提交 791ffba1 编写于 作者: H hypox64

make it easier to use homemade datasets

上级 f24cc449
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# MyRules
datasets/
/pythontest.py
/datasets/au
/checkpoints/running_err.png
/checkpoints/test_heatmap.png
/checkpoints/train_heatmap.png
*.pth
*.edf
*log*
\ No newline at end of file
......@@ -2,41 +2,43 @@ from torch import nn
from models import cnn_1d,densenet,dfcnn,lstm,mobilenet,resnet,resnet_1d,squeezenet
from models import multi_scale_resnet,multi_scale_resnet_1d,micro_multi_scale_resnet_1d
def CreatNet(name):
def CreatNet(opt):
name = opt.model_name
label_num = opt.label
if name =='lstm':
net = lstm.lstm(100,27,num_classes=5)
net = lstm.lstm(100,27,num_classes=label_num)
elif name == 'cnn_1d':
net = cnn_1d.cnn(1,num_classes=5)
net = cnn_1d.cnn(1,num_classes=label_num)
elif name == 'resnet18_1d':
net = resnet_1d.resnet18()
net.conv1 = nn.Conv1d(1, 64, 7, 2, 3, bias=False)
net.fc = nn.Linear(512, 5)
net.fc = nn.Linear(512, label_num)
elif name == 'multi_scale_resnet_1d':
net = multi_scale_resnet_1d.Multi_Scale_ResNet(inchannel=1, num_classes=5)
net = multi_scale_resnet_1d.Multi_Scale_ResNet(inchannel=1, num_classes=label_num)
elif name == 'micro_multi_scale_resnet_1d':
net = micro_multi_scale_resnet_1d.Multi_Scale_ResNet(inchannel=1, num_classes=5)
net = micro_multi_scale_resnet_1d.Multi_Scale_ResNet(inchannel=1, num_classes=label_num)
elif name == 'multi_scale_resnet':
net = multi_scale_resnet.Multi_Scale_ResNet(inchannel=1, num_classes=5)
net = multi_scale_resnet.Multi_Scale_ResNet(inchannel=1, num_classes=label_num)
elif name == 'dfcnn':
net = dfcnn.dfcnn(num_classes = 5)
net = dfcnn.dfcnn(num_classes = label_num)
elif name in ['resnet101','resnet50','resnet18']:
if name =='resnet101':
net = resnet.resnet101(pretrained=False)
net.fc = nn.Linear(2048, 5)
net.fc = nn.Linear(2048, label_num)
elif name =='resnet50':
net = resnet.resnet50(pretrained=False)
net.fc = nn.Linear(2048, 5)
net.fc = nn.Linear(2048, label_num)
elif name =='resnet18':
net = resnet.resnet18(pretrained=False)
net.fc = nn.Linear(512, 5)
net.fc = nn.Linear(512, label_num)
net.conv1 = nn.Conv2d(1, 64, 7, 2, 3, bias=False)
elif 'densenet' in name:
if name =='densenet121':
net = densenet.densenet121(pretrained=False,num_classes=5)
net = densenet.densenet121(pretrained=False,num_classes=label_num)
elif name == 'densenet201':
net = densenet.densenet201(pretrained=False,num_classes=5)
net = densenet.densenet201(pretrained=False,num_classes=label_num)
elif name =='squeezenet':
net = squeezenet.squeezenet1_1(pretrained=False,num_classes=5,inchannel = 1)
net = squeezenet.squeezenet1_1(pretrained=False,num_classes=label_num,inchannel = 1)
return net
\ No newline at end of file
......@@ -4,8 +4,6 @@ import random
import scipy.io as sio
import numpy as np
import h5py
import mne
import dsp
import transformer
......@@ -69,7 +67,7 @@ def loaddata_cc2018(filedir,filename,signal_name,BID,filter = True):
#trim
signals = trimdata(signals,3000)
stages = trimdata(stages,3000)
#30s per lable
#30s per label
signals = signals.reshape(-1,3000)
stages = stages[::3000]
#Balance individualized differences
......@@ -131,9 +129,10 @@ def loaddata_sleep_edfx(filedir,filename,signal_name,BID,select_sleep_time):
def loaddataset(filedir,dataset_name,signal_name,num,BID,select_sleep_time,shuffle = False):
print('load dataset, please wait...')
signals_train=[];stages_train=[];signals_test=[];stages_test=[]
signals_train=[];labels_train=[];signals_test=[];labels_test=[]
if dataset_name == 'cc2018':
import h5py
filenames = os.listdir(filedir)
if shuffle:
random.shuffle(filenames)
......@@ -147,12 +146,13 @@ def loaddataset(filedir,dataset_name,signal_name,num,BID,select_sleep_time,shuff
for cnt,filename in enumerate(filenames[:num],0):
signal,stage = loaddata_cc2018(filedir,filename,signal_name,BID = BID)
if cnt < round(num*0.8) :
signals_train,stages_train = connectdata(signal,stage,signals_train,stages_train)
signals_train,labels_train = connectdata(signal,stage,signals_train,labels_train)
else:
signals_test,stages_test = connectdata(signal,stage,signals_test,stages_test)
signals_test,labels_test = connectdata(signal,stage,signals_test,labels_test)
print('train subjects:',round(num*0.8),'test subjects:',round(num*0.2))
elif dataset_name == 'sleep-edfx':
import mne
if num > 197:
num = 197
......@@ -163,19 +163,19 @@ def loaddataset(filedir,dataset_name,signal_name,num,BID,select_sleep_time,shuff
for filename in filenames_sc_train[:round(num*153/197*0.8)]:
signal,stage = loaddata_sleep_edfx(filedir,filename,signal_name,BID,select_sleep_time)
signals_train,stages_train = connectdata(signal,stage,signals_train,stages_train)
signals_train,labels_train = connectdata(signal,stage,signals_train,labels_train)
for filename in filenames_st_train[:round(num*44/197*0.8)]:
signal,stage = loaddata_sleep_edfx(filedir,filename,signal_name,BID,select_sleep_time)
signals_train,stages_train = connectdata(signal,stage,signals_train,stages_train)
signals_train,labels_train = connectdata(signal,stage,signals_train,labels_train)
for filename in filenames_sc_test[:round(num*153/197*0.2)]:
signal,stage = loaddata_sleep_edfx(filedir,filename,signal_name,BID,select_sleep_time)
signals_test,stages_test = connectdata(signal,stage,signals_test,stages_test)
signals_test,labels_test = connectdata(signal,stage,signals_test,labels_test)
for filename in filenames_st_test[:round(num*44/197*0.2)]:
signal,stage = loaddata_sleep_edfx(filedir,filename,signal_name,BID,select_sleep_time)
signals_test,stages_test = connectdata(signal,stage,signals_test,stages_test)
signals_test,labels_test = connectdata(signal,stage,signals_test,labels_test)
print('---------Each subject has two sample---------',
'\nTrain samples_SC/ST:',round(num*153/197*0.8),round(num*44/197*0.8),
......@@ -183,8 +183,8 @@ def loaddataset(filedir,dataset_name,signal_name,num,BID,select_sleep_time,shuff
elif dataset_name == 'preload':
signals_train = np.load(filedir+'/signals_train.npy')
stages_train = np.load(filedir+'/stages_train.npy')
labels_train = np.load(filedir+'/labels_train.npy')
signals_test = np.load(filedir+'/signals_test.npy')
stages_test = np.load(filedir+'/stages_test.npy')
labels_test = np.load(filedir+'/labels_test.npy')
return signals_train,stages_train,signals_test,stages_test
\ No newline at end of file
return signals_train,labels_train,signals_test,labels_test
\ No newline at end of file
11fb48812e83a3c2fd6f95b5c573bbf6 SC4001E0-PSG.edf
3d35b0902528a1adb4a6732a12b7db0d SC4001EC-Hypnogram.edf
cb024a92e093ceb339a4239256494ec2 SC4002E0-PSG.edf
155c66715cb6d9acb642626a6a5da506 SC4002EC-Hypnogram.edf
a91664f356ab5d2a323cdd6e3839ccb3 SC4011E0-PSG.edf
262661aeed43cb1d70e5fd34606499f7 SC4011EH-Hypnogram.edf
cbe11ec01cb01c057852379295677569 SC4012E0-PSG.edf
2b17f9432ce3193de828b5ad0c539dda SC4012EC-Hypnogram.edf
8b91c2bc8d04d9053d01db7a205f4384 SC4021E0-PSG.edf
4c1f9f9de2669a2a8d5e4122e4539d75 SC4021EH-Hypnogram.edf
6cdb8ef7c51ffc67289c5385e8ea9786 SC4022E0-PSG.edf
0e2c31c0a42e33cc7af17b4d20a91118 SC4022EJ-Hypnogram.edf
e4f9daec166cc591ba73fd02f55d1163 SC4031E0-PSG.edf
eff9356d9490c4c5f0cf33dd18d684fb SC4031EC-Hypnogram.edf
87d2024e3d174ab5c1e5233a5bc19df3 SC4032E0-PSG.edf
53b253ebddff8588c86cfdd8e397e843 SC4032EP-Hypnogram.edf
a0af4dbecf2b84b72ecbd1cf17b0fe36 SC4041E0-PSG.edf
86cb6cd094a58ad700b2170732846124 SC4041EC-Hypnogram.edf
9347543de106be8198b4ca15e3ce4a7a SC4042E0-PSG.edf
3e45aaa3d4fd53cc39a7aa6e0a2bbaf7 SC4042EC-Hypnogram.edf
7e9c193ced5f39be7eea142f27371c30 SC4051E0-PSG.edf
4d3bbf7d876baf25ee773de014652b09 SC4051EC-Hypnogram.edf
28398f89873f1fc33cd5ea35bac0e9b2 SC4052E0-PSG.edf
4d65de5db155f6293f1a4df26de7823d SC4052EC-Hypnogram.edf
6aacf21e2cd0b095b1547c6d810549cd SC4061E0-PSG.edf
cd3a93a4ea739d76e444f18da1f23522 SC4061EC-Hypnogram.edf
5b66810fa8eb99dab2ef68e811dae252 SC4062E0-PSG.edf
f4e66702f8958627f13a5fda07ebf496 SC4062EC-Hypnogram.edf
604167e0b5ec5c146f3c240c77231473 SC4071E0-PSG.edf
87f2e85deb047eeee1a97c2bc7d0fa89 SC4071EC-Hypnogram.edf
8213a7d7498dbea7439c9e47c9b6beb3 SC4072E0-PSG.edf
876832ea09778bbe4df5e828cb916400 SC4072EH-Hypnogram.edf
510af559e12d05de83ee676b63f797e0 SC4081E0-PSG.edf
68f8c5a51669723d7995e76f34922169 SC4081EC-Hypnogram.edf
1859c21ab2b6a87b6e7c7097b1a91a58 SC4082E0-PSG.edf
e2d3429f5f530b85c78064b8dbab5218 SC4082EP-Hypnogram.edf
d914cf351984870aeab29e55f1b82c2f SC4091E0-PSG.edf
2b509b1b83a98936185ed7ce8f531dfa SC4091EC-Hypnogram.edf
93b55cc96bba161dc2277dce5df05506 SC4092E0-PSG.edf
3fd8a4e8e25a839a30cbd9e0b8d697d1 SC4092EC-Hypnogram.edf
79d5a1f6681da57cc0a14bda1be7f6a1 SC4101E0-PSG.edf
26ddfe396768e6781aba1d0538181ee7 SC4101EC-Hypnogram.edf
aa94d75c088ef07616c7c34043a918a2 SC4102E0-PSG.edf
633833129cdb28f7f41e4c32bbc22dea SC4102EC-Hypnogram.edf
b751ea284c9be149def6f2164a329b7c SC4111E0-PSG.edf
e9aa3dad03332b37d810884956ac98fc SC4111EC-Hypnogram.edf
bac0f00b21c857b360149db40ce6f77f SC4112E0-PSG.edf
5685c6a950edfb8064e23ca24dd6fa3a SC4112EC-Hypnogram.edf
be1a5f579864a74c1c996c44ab184d2f SC4121E0-PSG.edf
fe250ac834876b30064fc4a45c56ce8c SC4121EC-Hypnogram.edf
5a5431058363b8be0e99c47f2612984a SC4122E0-PSG.edf
983fc9e07d6720013eb131036a5440ae SC4122EV-Hypnogram.edf
976c10ac357df7713d8184d866fbc31d SC4131E0-PSG.edf
d7c8db5b131ac3279eb6c76b0138ea5f SC4131EC-Hypnogram.edf
fa3326f7c0503f28e6957a96f0c8dc38 SC4141E0-PSG.edf
67e98e01cc12f99b008b2a86a960b4f7 SC4141EU-Hypnogram.edf
bf7678e8f32a6a5932e628b94fba15ed SC4142E0-PSG.edf
7728f7c6d75b79bcdbcf734e6ed32f72 SC4142EU-Hypnogram.edf
b786fa9ee2cfb5aa835451fe886e0674 SC4151E0-PSG.edf
d25c4508a1dd05f36bc72b72040f6049 SC4151EC-Hypnogram.edf
56f3f5463510d29814f3c0e071796bac SC4152E0-PSG.edf
ee931a7f394ae6d35f4fbbe492d73800 SC4152EC-Hypnogram.edf
74947fbfd8ee0121c999406a43513b38 SC4161E0-PSG.edf
d11c64cf806990099e30f8a2b2193208 SC4161EC-Hypnogram.edf
ff6d3c364d646b134d1df48c233ddbfc SC4162E0-PSG.edf
e6922d4a3a82c2c35a5e671b28e30532 SC4162EC-Hypnogram.edf
a6287785e2a4cda752b58b29b444445a SC4171E0-PSG.edf
57183d0a9204637c669fa01f0bfb154c SC4171EU-Hypnogram.edf
ad1a28a580d173ba7883fece56cca954 SC4172E0-PSG.edf
4aa2708b3123afb1f68b55e452d516ea SC4172EC-Hypnogram.edf
11969931e6099660b09055e15e5c4d56 SC4181E0-PSG.edf
20135f405d070b10a789669351c23ef7 SC4181EC-Hypnogram.edf
f2ba5dd637d7d9afffb22b91327baab7 SC4182E0-PSG.edf
364a4e8e15be85c74278877952c072a8 SC4182EC-Hypnogram.edf
9a9cc260df0a092b9aad98691d74c84e SC4191E0-PSG.edf
2183cbb8a6168e98788151e485fe6dab SC4191EP-Hypnogram.edf
bd68495d8d085d5558eccf4c29468b90 SC4192E0-PSG.edf
d208931b58296fd6adae9bcd1e645d89 SC4192EV-Hypnogram.edf
3ee8c1b55128a14ef8ddf92759cabcc5 SC4201E0-PSG.edf
456791e254a57d3189f5131ede6b37c1 SC4201EC-Hypnogram.edf
df728974b4823bf429f3cf3e45d4208d SC4202E0-PSG.edf
f1f944a892d70921cd157a195b3e2a2c SC4202EC-Hypnogram.edf
9e6cf6777dfba6808a1a3880c1885eaa SC4211E0-PSG.edf
b8da453b608b19b5fdd02551987e68b4 SC4211EC-Hypnogram.edf
766b6c5b66dfdf4e006ccfbf000ee2e1 SC4212E0-PSG.edf
b0135cdd6a45bf7ae00bc36b380dae65 SC4212EC-Hypnogram.edf
3d438244748c1c0136e5d38f87a88663 SC4221E0-PSG.edf
d6c4e5296c1727c6ca3a17ec2a070ac5 SC4221EJ-Hypnogram.edf
404c28bc9aa5916920cfc479ca530f21 SC4222E0-PSG.edf
b9410e91188d95b6f077d42a1d24b5b2 SC4222EC-Hypnogram.edf
8897f334329d556f9a38f8bff0241be7 SC4231E0-PSG.edf
1e8d7c94f6c68213daf60df0981f5a69 SC4231EJ-Hypnogram.edf
fec39c3fd39b3d2aa5522482553b27ee SC4232E0-PSG.edf
8a5ae360755fb2f8f95c4dbe813ea1ef SC4232EV-Hypnogram.edf
df7c91ec21897a638eac385088796203 SC4241E0-PSG.edf
4c10e81d5b4ac4c9d8eceed9b3c940bd SC4241EC-Hypnogram.edf
7afd58481defa6d0fd642fddd1df570f SC4242E0-PSG.edf
dbd60f97e6d8978d7685f64b85d2be90 SC4242EA-Hypnogram.edf
09b5dc275461adbf889a70f563c056ff SC4251E0-PSG.edf
614f03da42eba5040638c0a2941a28ca SC4251EP-Hypnogram.edf
79d393923ab1ae5fe80e2a0caa62abe1 SC4252E0-PSG.edf
e00da13719cb35214c20d585a7bef5c2 SC4252EU-Hypnogram.edf
756d004f20ee2adc774fb700dd363e85 SC4261F0-PSG.edf
c754f88912a8d00934fbb2a77cd1b6b1 SC4261FM-Hypnogram.edf
b0a387340ab6689d1a5c1a9c087f03e5 SC4262F0-PSG.edf
1e0055a61a3ee152a4e400bd7fed6614 SC4262FC-Hypnogram.edf
4091794b93b6204c7b71143fa6a1a8d7 SC4271F0-PSG.edf
c722131c3ce531c257d4863ad018e30f SC4271FC-Hypnogram.edf
9b8baacac1bad37a3c6df2540ffe37bf SC4272F0-PSG.edf
f4b1410cd2bddd99ec56dc98be2550b5 SC4272FM-Hypnogram.edf
03b9b825a241e872a507b912d2e320d8 SC4281G0-PSG.edf
812a1e4bd96048fba49fb7529e48b43d SC4281GC-Hypnogram.edf
b22fa2b3e45627548480be5c04ca8bee SC4282G0-PSG.edf
29e808e79b01be67b1d7c97f0ef8c80f SC4282GC-Hypnogram.edf
0723c07a3239bcd19ed1c13cf78b273b SC4291G0-PSG.edf
010f55de184d7e0c47c97e5643b7bddc SC4291GA-Hypnogram.edf
a936f8843f0c73300e73a00a359b257f SC4292G0-PSG.edf
86f03a6dfee627b8bc41649b2b395acb SC4292GC-Hypnogram.edf
89f985ff657f88d93000d53cea825149 SC4301E0-PSG.edf
ef138e0ed476fe1c34fc0c6ad60acb26 SC4301EC-Hypnogram.edf
e3e9852ea6af666f79a15a53c7bbedca SC4302E0-PSG.edf
dfd095da62369e13c8f17366cb561a6f SC4302EV-Hypnogram.edf
366fe73bfb005000973abf0deea048b7 SC4311E0-PSG.edf
b5abe2800de5184212601b3e64e1d46c SC4311EC-Hypnogram.edf
893ed5153178016256aea01573090e16 SC4312E0-PSG.edf
a7773e2b206ba3122843a7ab78e332e2 SC4312EM-Hypnogram.edf
4906b1fe3fd1892641a56f6698271228 SC4321E0-PSG.edf
376cbdb311451c14010ea83a0c75491f SC4321EC-Hypnogram.edf
f6a7f0950c3b53eea926ae9fad7e96a4 SC4322E0-PSG.edf
4cee57ee07b8eaf04f1ac8faaea45905 SC4322EC-Hypnogram.edf
baa25372b519844a91a50188a8584d8a SC4331F0-PSG.edf
623ce58c2eff7b6127b68db42e63ef03 SC4331FV-Hypnogram.edf
22a53a9082b364fa2a14a8dd78a6c902 SC4332F0-PSG.edf
3499a5bed0c923e9249fade61be3ec49 SC4332FC-Hypnogram.edf
b37ed70070b090b8565aa413d682d34b SC4341F0-PSG.edf
31aa75213bace1e48cf2efe2c685fc58 SC4341FA-Hypnogram.edf
080f4f10de20ec9d9968727ba3ced5d4 SC4342F0-PSG.edf
2b205df0511480703bbfaf26e7dbee2d SC4342FA-Hypnogram.edf
1667a929f3f98bd6612f8231e12f8719 SC4351F0-PSG.edf
1cbf0ab08928efe3e7c56dee2d1405df SC4351FA-Hypnogram.edf
5390b39ed7a498983db6d218cd0b2143 SC4352F0-PSG.edf
ca645bd47adab144d6d9bbc82d1cc1cb SC4352FV-Hypnogram.edf
cd4c4c08d6e55a4fae156904ac1babb5 SC4362F0-PSG.edf
f21539b76ec55b3f179d21745410e16c SC4362FC-Hypnogram.edf
0fee7d240c1ca19f6a6ccb87bfd8b4f2 SC4371F0-PSG.edf
39e03652b8a5c10b0af687297c11371e SC4371FA-Hypnogram.edf
c1b079282362060a6c0e013abac71ae2 SC4372F0-PSG.edf
b0cddaadb764785f9ecfbeba37c90275 SC4372FC-Hypnogram.edf
0bcfe77ca8444e175beacc9f24f3a922 SC4381F0-PSG.edf
1d821d9fcb941d6e69ee6151b4292ac8 SC4381FC-Hypnogram.edf
13ee764ad3901f25a6b788cc5238c049 SC4382F0-PSG.edf
2578a57d1b36881d1bfd8e90ea76cd8f SC4382FW-Hypnogram.edf
9ea4c3c91f6c7573592de36fc274fb8b SC4401E0-PSG.edf
33f8628a5dda786edf425b16867b889e SC4401EC-Hypnogram.edf
bf98b2bcec565ad41f517b535219c1f5 SC4402E0-PSG.edf
fce6d478bdb0b82dd0327b5a4b952cf6 SC4402EW-Hypnogram.edf
9aaec3e319da524d13f4289d4c989fad SC4411E0-PSG.edf
c82950e81ca644ecb8029387c081d7cf SC4411EJ-Hypnogram.edf
3676233fa4b6f2dbd46cc05d61a5cf08 SC4412E0-PSG.edf
1a56c0380b622c793e29f8649074c413 SC4412EM-Hypnogram.edf
b91393891378cd7829a6428ee28e4b22 SC4421E0-PSG.edf
db9a41379e21873bec81799ddb225bd5 SC4421EA-Hypnogram.edf
145c8df1c3c3ac3fb4a3d7557a89a7b1 SC4422E0-PSG.edf
a58bb8d3e69c130eee23a1413467472f SC4422EA-Hypnogram.edf
e1ebd1b16666c06f4c7b450870b735ff SC4431E0-PSG.edf
8c076576c3e5c7381bb2f42b94f0cd0f SC4431EM-Hypnogram.edf
b8c855038035191383799dce89baea55 SC4432E0-PSG.edf
975d6acddc55f19bb6562f363f501acf SC4432EM-Hypnogram.edf
9d08ef7bb8481a60378b7b49605ff501 SC4441E0-PSG.edf
2606aefbe4e6b4a973b4c6c31bea62ff SC4441EC-Hypnogram.edf
567251ed91e070e3ba06b3e927ee873c SC4442E0-PSG.edf
5a3ef5f4477f9bb0fed1fef179604539 SC4442EV-Hypnogram.edf
3c80cf7d3a8cd57a887c7d5e4e79992f SC4451F0-PSG.edf
f4e99de3cfb131980944547f070b4913 SC4451FY-Hypnogram.edf
163aea4484d2b55da118534b0e64bc75 SC4452F0-PSG.edf
cb6e4bc17e2a44b4d98cf6bb126bf45c SC4452FW-Hypnogram.edf
407a19ec6b6299d35be368d5fac38170 SC4461F0-PSG.edf
13bbabb27e664664acaa8a59f05820bb SC4461FA-Hypnogram.edf
2cb2b5a57bdbb4d13bdf94c14d11a8a2 SC4462F0-PSG.edf
98500456dc37b1e3265b99282034ad18 SC4462FJ-Hypnogram.edf
46f620e017543c5bb706b8bf7925ae47 SC4471F0-PSG.edf
2fdb490f913230af38b128f133ec1919 SC4471FA-Hypnogram.edf
bf2c963f41209dcac5b3def13fb8ade0 SC4472F0-PSG.edf
ff185522b56f7c2a17b590d077eac9a4 SC4472FA-Hypnogram.edf
d72e1333b024ed9e6d2d1dcbd790545a SC4481F0-PSG.edf
00a7f93cc180ec7f15ec84dafc3b53fd SC4481FV-Hypnogram.edf
acf21f7d40b0f1404dfe5adb23bb8e24 SC4482F0-PSG.edf
a597ae21eadf1e58d7e2abe3fa9ef848 SC4482FJ-Hypnogram.edf
36dc2dcc8a777f6eac01e3bf0b5ba590 SC4491G0-PSG.edf
7ed2b155d8e45645943f9930adc68a47 SC4491GJ-Hypnogram.edf
5db9b119b04caf410100bfd002ce183f SC4492G0-PSG.edf
c69e305156a743499fd00083c38456a0 SC4492GJ-Hypnogram.edf
e4111b34d65a74b29ac016435fc2bac8 SC4501E0-PSG.edf
08507fd4434eddfae10882c34af736b5 SC4501EW-Hypnogram.edf
9d80190195f6fa7d58939aee63379b92 SC4502E0-PSG.edf
ea6dad21193df7a09afdad00da837603 SC4502EM-Hypnogram.edf
200859b0860f90e26ab9e7994e2758ea SC4511E0-PSG.edf
ca3b72262cb62023d76b4e4029e5b2e1 SC4511EJ-Hypnogram.edf
2f2fbe185977cc8a934f651249288878 SC4512E0-PSG.edf
914663b83bb745a7a0621d1f99d2f791 SC4512EW-Hypnogram.edf
228aeb167cb2427b1da03ae424092182 SC4522E0-PSG.edf
607242cc6dffef201d2baf8656087174 SC4522EM-Hypnogram.edf
f1567bc2fbd71cad4caf05d9f0fa22d5 SC4531E0-PSG.edf
30a81e743baba1125d89d47c984eb5fe SC4531EM-Hypnogram.edf
a4a4495eea55d80248dc4772578da6bf SC4532E0-PSG.edf
c1237914a00e51c0fc285ba49becd10c SC4532EV-Hypnogram.edf
ec3a818b21acb504300358551d75d700 SC4541F0-PSG.edf
d8c8d1f40e207880e8a014aa094295b3 SC4541FA-Hypnogram.edf
03b5fcabbdfd59bb02e1377d9a4172b7 SC4542F0-PSG.edf
d8b5981610b2fe352e9ae1e44fd0c3d9 SC4542FW-Hypnogram.edf
ae7ba0c823b7341aaa67792a9fa10ea3 SC4551F0-PSG.edf
77f170696d645cee7956f5aaf5de54e0 SC4551FC-Hypnogram.edf
f96eb5e13c426dfacfb0fe5b6d88893c SC4552F0-PSG.edf
25edba30bb0b2deecc9d06c3f4a3f711 SC4552FW-Hypnogram.edf
cf5c8749255a037570754cf4f9c19e66 SC4561F0-PSG.edf
edf1d50c3b49b4f9237b26045b58d8c5 SC4561FJ-Hypnogram.edf
e82a832ac0c2a6cd60c7e91df455cadf SC4562F0-PSG.edf
4c1ed9ac3af5617288736f52c0699ae5 SC4562FJ-Hypnogram.edf
53b6f74479441fe12f62bc28ed57f202 SC4571F0-PSG.edf
885f6926ae33b6cecd67bbcb9094a922 SC4571FV-Hypnogram.edf
23c7e93de5387ef2f8e4679da96c7b1e SC4572F0-PSG.edf
eb4b56197ef2f222c3ce16d84525c4f9 SC4572FC-Hypnogram.edf
9f6b0d7ad8ab8093db3b0e33ab4f455a SC4581G0-PSG.edf
7ee7db5877c53fc756ed5d0e89d5633c SC4581GM-Hypnogram.edf
4ee0740aa46560a20b79685def4cacce SC4582G0-PSG.edf
651b09d8a7c6f2b2ffde3ad81ee9139a SC4582GP-Hypnogram.edf
988c9a4d426eb2b16ed135ef73b18add SC4591G0-PSG.edf
62be4a8b5e6ae3f7bc53f45ee24677b9 SC4591GY-Hypnogram.edf
8bdadaaa6707eea88d8e5785f39a12cf SC4592G0-PSG.edf
c469b8e3e732cf1fbd46f80bbe62cd54 SC4592GY-Hypnogram.edf
39a742ad058fe41a9a6d24b71ac41a06 SC4601E0-PSG.edf
f60e82543170de1ef58053d5f3931c0a SC4601EC-Hypnogram.edf
a5710d18c7e25311657172ad8a96ef31 SC4602E0-PSG.edf
dec7e9b27d49f61af77936b3496c04ec SC4602EJ-Hypnogram.edf
087e4b25b0b346db8478892a97636965 SC4611E0-PSG.edf
863675dbbb9f76d1d666939502c748b0 SC4611EG-Hypnogram.edf
4cb0b686bd921da1eb07e7a1cbdd81a5 SC4612E0-PSG.edf
2b821a6937e4a634f9acc9f6225ad89c SC4612EA-Hypnogram.edf
060c55bbe4383424caea9c908a56577f SC4621E0-PSG.edf
19195a3a7b78e716e189a95f81a1fb11 SC4621EV-Hypnogram.edf
2a760991c42f7248429c82bf4038e2c9 SC4622E0-PSG.edf
3c135c7b1367871ca78904a4a4d84f82 SC4622EJ-Hypnogram.edf
cfca14ec14ec6f2516c751c49387a9d3 SC4631E0-PSG.edf
444c255a3b0ef6d2dd06183a42bb0a72 SC4631EM-Hypnogram.edf
690471e7fe33b38f2f4daeb606f48291 SC4632E0-PSG.edf
8963a5e0cae4c35ebfa001b9ad01aed6 SC4632EA-Hypnogram.edf
8e8fc2cca978cdc8fa42d5eb94f160b7 SC4641E0-PSG.edf
33e2cbaa38ea5529f68fd1c5f031a1d0 SC4641EP-Hypnogram.edf
b3a2d44f86a524d5687efd4fb0271b13 SC4642E0-PSG.edf
bde88c45f97b3162ad9b965cabef6d08 SC4642EP-Hypnogram.edf
c442cdb9bd4e7ff2625705ba72c2f03a SC4651E0-PSG.edf
71e4114055fc0c763a6d891dfd8c467b SC4651EP-Hypnogram.edf
6f5ed338c243989ad7b1d106ca2173a4 SC4652E0-PSG.edf
aa5e50af6c24d4e094967340a88b2fd2 SC4652EG-Hypnogram.edf
c733f4c8467198143bc9fafdb5a13271 SC4661E0-PSG.edf
f7816abebfcbd300f7490aa22762ee45 SC4661EJ-Hypnogram.edf
d36933781fbe087227d0975a48c21121 SC4662E0-PSG.edf
0d3466ccfade82f40054a2b91fd52f3c SC4662EJ-Hypnogram.edf
67e0c90d3844dfcb98c965a734b4f339 SC4671G0-PSG.edf
3d291570f69e7340d724035009a90d39 SC4671GJ-Hypnogram.edf
d65898df97ad940260950d61ff62e9cf SC4672G0-PSG.edf
63edde5fb4c2389b0100d22c94145818 SC4672GV-Hypnogram.edf
259234283b7ec8ffc9a1dded1768ec94 SC4701E0-PSG.edf
592146d556c0b9dabfaf418ec7605b90 SC4701EC-Hypnogram.edf
9a075dd8eebac387d17d93fe15012103 SC4702E0-PSG.edf
029fa68838c0c0eed2a013541d02c7bc SC4702EA-Hypnogram.edf
d6c24320405824d4a45256003f306dad SC4711E0-PSG.edf
30f91c33eaba678c947d1c04ca590196 SC4711EC-Hypnogram.edf
8d2c92f03bfb4108e77e368c7195ea39 SC4712E0-PSG.edf
0adb0d0b41fa61d5458bfdf72c683260 SC4712EA-Hypnogram.edf
769f3ab864470231120e55a75edfcdf7 SC4721E0-PSG.edf
2d79d6210ca1cf88c4051b17567267cc SC4721EC-Hypnogram.edf
0a4e10eab7d1a40061c71b45973a734e SC4722E0-PSG.edf
1777651a80ba75388a379cc68a39379c SC4722EM-Hypnogram.edf
e1461b0824b8aeb199134a1971e809ce SC4731E0-PSG.edf
4d882e5067b8534c92838ca9535c0604 SC4731EM-Hypnogram.edf
a3ee82c7956a2fd334b145af7fb995ac SC4732E0-PSG.edf
00c3d4871d6153974568e0faa0e77610 SC4732EJ-Hypnogram.edf
31c3d308008bec127f4ace857ee74488 SC4741E0-PSG.edf
83d8c616cf8a13b1ff37c979d4f3956c SC4741EA-Hypnogram.edf
e3e400f4140c6ba4aea19b98340012c5 SC4742E0-PSG.edf
4abfd71bd5ea9026f3630ac6d0af942d SC4742EC-Hypnogram.edf
559430ad36bc9b9b069231461f5eefd0 SC4751E0-PSG.edf
e14f63ed918db6102436680863af6798 SC4751EC-Hypnogram.edf
d0946d0ac79d016c7efa56d3adfec006 SC4752E0-PSG.edf
4a8962340e7dfaf73f1d2176acf0252d SC4752EM-Hypnogram.edf
5dd1a926b43cc210d32b5d368dc6f484 SC4761E0-PSG.edf
ad7a5e9e606978ba65f208d5669d78b6 SC4761EP-Hypnogram.edf
05c0207e0bf03ff4ab86f613909926fa SC4762E0-PSG.edf
37b0b373e886ddbfbe7eea2b2883b0b9 SC4762EG-Hypnogram.edf
d91c6520562c7b087b730a60b3346095 SC4771G0-PSG.edf
753e4b88abb28b0bd0a5035ae6e44596 SC4771GC-Hypnogram.edf
5b8f3969b6c918102f0d63dff25a51a6 SC4772G0-PSG.edf
4a164f63877935417e07a971c5cd054b SC4772GC-Hypnogram.edf
4520fba97c1971b85efdf416e470f7b7 SC4801G0-PSG.edf
787562a131121853223e3686b1dfa61a SC4801GC-Hypnogram.edf
ee37c233e2a18fc1a076d0bac717ed01 SC4802G0-PSG.edf
c714cb7f67eeda61e3949704f6356240 SC4802GV-Hypnogram.edf
52e78c2a822e442280ca52b82e760d6c SC4811G0-PSG.edf
ca0765a887d99695b37f874b06d8910d SC4811GG-Hypnogram.edf
dcec53d988ebe19fab26a205186060dd SC4812G0-PSG.edf
3acd1d874946a49c1cea2d6089becb13 SC4812GV-Hypnogram.edf
85173472c6e4e24bd57cbce1284a997d SC4821G0-PSG.edf
fe5935d7c7ff68b7f803484fa092373c SC4821GC-Hypnogram.edf
2923d7ac62e8c04dd2e6da1c5b56fb21 SC4822G0-PSG.edf
0c2ba3abbeccca73d59bed189b8f20f1 SC4822GC-Hypnogram.edf
a06c296e83a618ace8423e45c14087bf ST7011J0-PSG.edf
ea59d18717677fcfdaeb51dbede2a21b ST7011JP-Hypnogram.edf
a2e0e4f3ab3305fb41fe4a70a3ea69f1 ST7012J0-PSG.edf
be9dacc9811394d0c279ef29eebdda75 ST7012JP-Hypnogram.edf
ed9d4007c544654ea40ff19a99f435ff ST7021J0-PSG.edf
7c9b4af33bae66e60796a72a72a5b3cf ST7021JM-Hypnogram.edf
aef43219a4a7b920383c7ede490033c4 ST7022J0-PSG.edf
fc6b54c934df37ea78413f57c477169d ST7022JM-Hypnogram.edf
ff78306e942654072ef337e29828c8a2 ST7041J0-PSG.edf
715157dd8dc64caf1e8d3f44fae608e4 ST7041JO-Hypnogram.edf
f466cbf2317bb6536602539360f2fc6b ST7042J0-PSG.edf
8a6d080937ac455ae9a6ba21ca03ecb8 ST7042JO-Hypnogram.edf
0cdd08361ab42b179e09c4aca1d13948 ST7051J0-PSG.edf
b9cfc69a0b887430273f614053ff792e ST7051JA-Hypnogram.edf
c24461c4475599b902d09e5b598f4a92 ST7052J0-PSG.edf
952b0510f56c58fd94fb81858f48c678 ST7052JA-Hypnogram.edf
16a0bb4493ac01c5b0e2257d6aae84e1 ST7061J0-PSG.edf
41b16ed6741b316cd2e9222c54e26bdd ST7061JR-Hypnogram.edf
2e4c00968e7f98372250bd9ee97db3c9 ST7062J0-PSG.edf
cbe5bac2411c9e594c309b35c91f5fcd ST7062JR-Hypnogram.edf
4a5c85edfa5f42443a36c9ad11190e74 ST7071J0-PSG.edf
5d4685ea491503072003961ea2aa9912 ST7071JA-Hypnogram.edf
041ad788cb2ab399aaab7a923a699306 ST7072J0-PSG.edf
033f8aef2f139a5cab68b769a83c5602 ST7072JA-Hypnogram.edf
7bebc741fe3468efe32be4958aebc54a ST7081J0-PSG.edf
98bcc86691e6ac83c57a749d25944ab9 ST7081JW-Hypnogram.edf
adf27e3e31d7e40319dbd6cf4d2babfa ST7082J0-PSG.edf
1dd245a7d2b9efb7dce2660d00cb707f ST7082JW-Hypnogram.edf
9cc37fc7ee94ae38e1e211203ae0b14c ST7091J0-PSG.edf
ee525503a2d93004c146df60300fcb3a ST7091JE-Hypnogram.edf
c8d2f322f77944b742fdc8e996fafaa6 ST7092J0-PSG.edf
471379e4479271be27f465dd2291c6f8 ST7092JE-Hypnogram.edf
15b56b253802059e87c231d3866a1480 ST7101J0-PSG.edf
474881c70778907b9b442c09cdf117e0 ST7101JE-Hypnogram.edf
55fe6b024cab91274a84a1e77774167a ST7102J0-PSG.edf
4ff85eed58eab454c0497f8a5d391efd ST7102JE-Hypnogram.edf
c796204e64a2d0d3c6c5f6cae1facb04 ST7111J0-PSG.edf
cb49fafd8bea4f9ac1062abf9b776bf3 ST7111JE-Hypnogram.edf
b177f85470c75fee3a06c05532448b15 ST7112J0-PSG.edf
3797535865213efd813844f1f5674e8b ST7112JE-Hypnogram.edf
19ff2565887587cdfced0939d1017594 ST7121J0-PSG.edf
079024321c1a567f2e378f93e08f932e ST7121JE-Hypnogram.edf
4cea39bdda826b2fee2447803f77f52c ST7122J0-PSG.edf
8917db84166da03294ae831ab34d85a4 ST7122JE-Hypnogram.edf
4bad319bba684db0fb659262c88cf21b ST7131J0-PSG.edf
5f3d0f18bf833969525eff6925ac34f0 ST7131JR-Hypnogram.edf
be8e8728af911665e6c3cb31b14c589b ST7132J0-PSG.edf
aac0d7b92ab0d3ecece961508a375ec7 ST7132JR-Hypnogram.edf
74a95e36db07abe88551431d63aee8d9 ST7141J0-PSG.edf
a763270145c4694eed9aab34640955c1 ST7141JE-Hypnogram.edf
e2134bc7b3843cc973b4313c40b2af99 ST7142J0-PSG.edf
2a6ffb2a134e3e0d69abaf802eb625dd ST7142JE-Hypnogram.edf
913e0c007954f8aa38529a4f6684f605 ST7151J0-PSG.edf
706cfbfe700169ddec0b4da715971a7f ST7151JA-Hypnogram.edf
1c8cea3c6df57ca096b66f47fa7e12bc ST7152J0-PSG.edf
0c4fa95897d3741f73692616a6c75dfc ST7152JA-Hypnogram.edf
3901851bf017d1c8df75f3c7a4ddac20 ST7161J0-PSG.edf
0287e3a14276e5f05151b637e89696ea ST7161JM-Hypnogram.edf
b6e9edb6820cdbeb9222646d5d0a2be5 ST7162J0-PSG.edf
de5905e0744f3e30b5cecdcf13671075 ST7162JM-Hypnogram.edf
a917cf79b4afe78bd4bcd164aa4e0e1d ST7171J0-PSG.edf
ce3d0f4058e004b991642b3413d742c8 ST7171JA-Hypnogram.edf
a92f5b9409fc1f72a101ae815a22bcab ST7172J0-PSG.edf
5e178ac2f3f7fdd66acb5be686d88f01 ST7172JA-Hypnogram.edf
3246e8a740b45f5e913201762ba11fba ST7181J0-PSG.edf
15cf3abab9d7ee14b24c6e05a1cd6637 ST7181JR-Hypnogram.edf
993633dad1ecfe4a93af19377e3a8659 ST7182J0-PSG.edf
441301adbed6547f3dc95f187a3b7031 ST7182JR-Hypnogram.edf
8659cf879fddf8dffd9b2774ad198e1e ST7191J0-PSG.edf
9b06ec03ede6ce729109a10a099e879f ST7191JR-Hypnogram.edf
90ea8835d9a9c1de5178ed67ea867ca7 ST7192J0-PSG.edf
337f4b8847d53d93928d9555e39a2448 ST7192JR-Hypnogram.edf
25b20ae9e49a6137ecb16ddcb1f98d96 ST7201J0-PSG.edf
fe2c495ff226dc0e09956a32575880fb ST7201JO-Hypnogram.edf
8845b1dca06789ef7d683dbd0d16b9f9 ST7202J0-PSG.edf
f757a4d4a6be897b17ec1c36b6ef8100 ST7202JO-Hypnogram.edf
9a4a8817ba2cf4d454891b2f6388c0d4 ST7211J0-PSG.edf
b80672bc5464043110e22a0e0f0ae303 ST7211JJ-Hypnogram.edf
bcb1526bb1d1c4517c61108808adbb5c ST7212J0-PSG.edf
a0e6f9d6a8c0baa1a61586efb123d760 ST7212JJ-Hypnogram.edf
14bbb9b6785946ae61a41e5558e36ed3 ST7221J0-PSG.edf
307ad0d9b34397b2384ea12fb64fa1a2 ST7221JA-Hypnogram.edf
d899220dff12d5d8d31955875949fe03 ST7222J0-PSG.edf
9e791735d127b23f13c2ec23ddf281e7 ST7222JA-Hypnogram.edf
6527e2bf54708182d73c043c5f9d38b6 ST7241J0-PSG.edf
e329f22acdb5a00c4850f3b3eb378b08 ST7241JO-Hypnogram.edf
3bf21bd4eeb02333ddbf6e8df6e410b8 ST7242J0-PSG.edf
e0f31b4f09572f20abd7e4401eb843c9 ST7242JO-Hypnogram.edf
......@@ -8,22 +8,22 @@ headers = {
'User-Agent':'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.75 Chrome/73.0.3683.75 Safari/537.36'
}
def download(url,name,path):
def download(url,name,savedir):
r=requests.get(url, headers, timeout = 30)
f=open(os.path.join(path,name),"wb")
f=open(os.path.join(savedir,name),"wb")
f.write(r.content)
f.close()
def compare_md5(filepath,md5s):
if os.path.exists(filepath):
md5file=open(filepath,'rb')
md5=hashlib.md5(md5file.read()).hexdigest()
md5file.close()
try:
md5file=open(filepath,'rb')
md5=hashlib.md5(md5file.read()).hexdigest()
md5file.close()
except Exception as e:
return False
if md5 in md5s:
return True
else:
print('Warning:',name,'md5 do not match, we will try again')
return False
else:
return False
......@@ -34,11 +34,11 @@ def downloader(url,filenames,md5s,dir):
print('Download:',name)
while not compare_md5(filepath,md5s):
try:
download(url+name,name,dir)
download(url+name+'?download',name,dir)
except Exception as e:
print('Warning:',name,'download failed! we will try again')
def rundownloader(url,filenames,md5s,dir,ThreadNum=2):
def rundownloader(url,filenames,md5s,dir,ThreadNum=4):
perthread=int(len(filenames)/ThreadNum)
for i in range(0,ThreadNum):
t = threading.Thread(target=downloader,args=(url,filenames[perthread*i:perthread*(1+i)],md5s,dir,))
......@@ -48,10 +48,10 @@ def rundownloader(url,filenames,md5s,dir,ThreadNum=2):
savedir = './datasets/sleep-edfx/'
url = 'https://physionet.org/physiobank/database/sleep-edfx/'
url = 'https://physionet.org/files/sleep-edfx/1.0.0/'
# https://physionet.org/files/sleep-edfx/1.0.0/sleep-cassette/SC4001E0-PSG.edf?download
MD5SUMS=open(os.path.join(savedir,'sleep-cassette_MD5SUMS.txt'),'rb')
MD5SUMS=open(os.path.join(savedir,'md5/sleep-cassette_MD5SUMS.txt'),'rb')
MD5SUMS = MD5SUMS.read()
MD5SUMS=MD5SUMS.decode('utf-8')
MD5SUMS = MD5SUMS.split()
......@@ -60,7 +60,7 @@ filenames = MD5SUMS[::-2]
print('start download sleep-edfx/sleep-cassette')
rundownloader(url+'sleep-cassette/',filenames,md5s,savedir)
MD5SUMS=open(os.path.join(savedir,'sleep-telemetry_MD5SUMS.txt'),'rb')
MD5SUMS=open(os.path.join(savedir,'md5/sleep-telemetry_MD5SUMS.txt'),'rb')
MD5SUMS = MD5SUMS.read()
MD5SUMS=MD5SUMS.decode('utf-8')
MD5SUMS = MD5SUMS.split()
......
......@@ -5,6 +5,7 @@ import time
zhfont1 = matplotlib.font_manager.FontProperties(fname='/home/hypo/.local/share/fonts/simsun.ttc')
zhfont = matplotlib.font_manager.FontProperties(fname='/usr/share/fonts/times.ttf')
FontSize=15
BarFontSize = 15
def heatmap(data, row_labels, col_labels, ax=None,
cbar_kw={}, cbarlabel="", **kwargs):
"""
......@@ -33,9 +34,9 @@ def heatmap(data, row_labels, col_labels, ax=None,
im = ax.imshow(data, **kwargs,origin='lower')
# Create colorbar
#cbar = ax.figure.colorbar(im, ax=ax, **cbar_kw)
#cbar.ax.set_ylabel(cbarlabel, rotation=-90, va="bottom",fontproperties=zhfont,fontsize=15)
cbar = ax.figure.colorbar(im, ax=ax, **cbar_kw)
cbar.ax.set_ylabel(cbarlabel, rotation=-90, va="bottom",fontproperties=zhfont,fontsize=15)
cbar.ax.tick_params(labelsize=BarFontSize)
# We want to show all ticks...
ax.set_xticks(np.arange(data.shape[1]))
ax.set_yticks(np.arange(data.shape[0]))
......@@ -130,12 +131,12 @@ def annotate_heatmap(im, data=None, valfmt="{x:.2f}",
# [23,26,76,0,0,1474]
# ]
# harvest = np.array(mat).astype(int)
# True_lable = ["N3", "N2", "N1", "REM","W"]
# Pred_lable = ["N3", "N2", "N1", "REM","W"]
# true_lable = ["N3", "N2", "N1", "REM","W"]
# pred_lable = ["N3", "N2", "N1", "REM","W"]
def draw(harvest,
True_lable = ["N3", "N2", "N1", "REM","W"],
Pred_lable = ["N3", "N2", "N1", "REM","W"],
true_lable = ["N3", "N2", "N1", "REM","W"],
pred_lable = ["N3", "N2", "N1", "REM","W"],
name = 'train'):
harvest = harvest.astype(float)
......@@ -143,12 +144,16 @@ def draw(harvest,
for i in range(wide):
harvest[i,:]=harvest[i,:]/np.sum(harvest[i])
# plt.close()
# plt.figure('confusion_mat')
fig, ax = plt.subplots()
h = harvest.shape[0]+1
w = int(h*0.75)+0.5
global BarFontSize
BarFontSize = int((BarFontSize+h)*0.5)
fig, ax = plt.subplots(figsize=(h, w))
ax.set_ylabel('True',fontsize=FontSize)
ax.set_xlabel('Pred',fontsize=FontSize)
im = heatmap(harvest, True_lable, Pred_lable, ax=ax,
im = heatmap(harvest, true_lable, pred_lable, ax=ax,
cmap="Wistia")
try:
texts = annotate_heatmap(im, valfmt="{x:.2f}")
......@@ -156,11 +161,22 @@ def draw(harvest,
print('Draw heatmap error:',e)
fig.tight_layout()
plt.savefig(name+'_heatmap.png')
plt.savefig('checkpoints/'+name+'_heatmap.png')
# plt.show()
# del fig
# plt.pause(1)
plt.close('all')
def main():
mat = [[8027,6,5,0,0,15],
[83,408,41,0,1,66],
[21,15,3470,57,4,49],
[5,3,85,520,50,0],
[3,0,7,43,592,0],
[23,26,76,0,0,1474]
]
harvest = np.array(mat).astype(int)
draw(harvest,name = 'train')
if __name__ == '__main__':
main()
\ No newline at end of file
......@@ -12,24 +12,30 @@ class Options():
self.initialized = False
def initialize(self):
#base
self.parser.add_argument('--no_cuda', action='store_true', help='if input, do not use gpu')
self.parser.add_argument('--no_cudnn', action='store_true', help='if input, do not use cudnn')
self.parser.add_argument('--label', type=int, default=5,help='number of labels')
self.parser.add_argument('--label_name', type=str, default='auto',help='name of labels')
self.parser.add_argument('--pretrained', action='store_true', help='if input, use pretrained models')
self.parser.add_argument('--continue_train', action='store_true', help='if input, continue train')
self.parser.add_argument('--lr', type=float, default=0.001,help='learning rate')
self.parser.add_argument('--BID', type=str, default='5_95_th',help='Balance individualized differences 5_95_th | median |None')
self.parser.add_argument('--model_name', type=str, default='lstm',help='Choose model lstm | multi_scale_resnet_1d | resnet18 |...')
self.parser.add_argument('--batchsize', type=int, default=64,help='batchsize')
self.parser.add_argument('--dataset_dir', type=str, default='./datasets/sleep-edfx/',
help='your dataset path')
self.parser.add_argument('--dataset_name', type=str, default='sleep-edfx',help='Choose dataset sleep-edfx | cc2018')
self.parser.add_argument('--select_sleep_time', action='store_true', help='if input, for sleep-cassette only use sleep time to train')
self.parser.add_argument('--signal_name', type=str, default='EEG Fpz-Cz',help='Choose the EEG channel C4-M1 | EEG Fpz-Cz |...')
self.parser.add_argument('--sample_num', type=int, default=20,help='the amount you want to load')
self.parser.add_argument('--model_name', type=str, default='lstm',help='Choose model lstm | multi_scale_resnet_1d | resnet18 |...')
self.parser.add_argument('--epochs', type=int, default=20,help='end epoch')
self.parser.add_argument('--weight_mod', type=str, default='avg_best',help='Choose weight mode: avg_best|normal')
self.parser.add_argument('--weight_mod', type=str, default='normal',help='Choose weight mode: avg_best|normal')
self.parser.add_argument('--network_save_freq', type=int, default=5,help='the freq to save network')
self.parser.add_argument('--dataset_name', type=str, default='sleep-edfx',
help='Choose dataset preload | sleep-edfx | cc2018 ,preload:your data, sleep-edfx&cc2018:sleep stage')
#EEG datasets
self.parser.add_argument('--BID', type=str, default='5_95_th',help='Balance individualized differences 5_95_th | median |None')
self.parser.add_argument('--select_sleep_time', action='store_true', help='if input, for sleep-cassette only use sleep time to train')
self.parser.add_argument('--signal_name', type=str, default='EEG Fpz-Cz',help='Choose the EEG channel C4-M1 | EEG Fpz-Cz |...')
self.parser.add_argument('--sample_num', type=int, default=20,help='the amount you want to load')
self.initialized = True
def getparse(self):
......@@ -42,4 +48,13 @@ class Options():
if self.opt.no_cuda:
self.opt.no_cudnn = True
if self.opt.label_name == 'auto':
if self.opt.dataset_name == 'sleep-edf' or self.opt.dataset_name == 'sleep-edfx' or self.opt.dataset_name == 'cc2018':
self.opt.label_name = ["N3", "N2", "N1", "REM","W"]
else:
names = []
for i in range(self.opt.label):
names.append(str(i))
self.opt.label_name = names
return self.opt
\ No newline at end of file
......@@ -2,47 +2,47 @@ import numpy as np
import matplotlib.pyplot as plt
import util
def stage(stages):
#N3->0 N2->1 N1->2 REM->3 W->4
stage_cnt=np.array([0,0,0,0,0])
def stage(opt,stages):
#sleep stage: N3->0 N2->1 N1->2 REM->3 W->4
stage_cnt=np.zeros(opt.label,dtype=np.int64)
for i in range(len(stages)):
stage_cnt[stages[i]] += 1
stage_cnt_per = stage_cnt/len(stages)
util.writelog(' dataset statistics [S3 S2 S1 R W]: '+str(stage_cnt),True)
util.writelog(str(stage_cnt),True)
return stage_cnt,stage_cnt_per
def reversal_label(mat):
new_mat = np.zeros(mat.shape,dtype='int')
new_mat[0]=mat[4]
new_mat[1]=mat[2]
new_mat[2]=mat[1]
new_mat[3]=mat[0]
new_mat[4]=mat[3]
mat=new_mat.copy()
new_mat[:,0]=mat[:,4]
new_mat[:,1]=mat[:,2]
new_mat[:,2]=mat[:,1]
new_mat[:,3]=mat[:,0]
new_mat[:,4]=mat[:,3]
return new_mat
def class_5to4(mat):
#[W N1 N2 N3 R] to [W N1+N2 N3 R]
new_mat=np.zeros((4,5),dtype='int')
new_mat[0] = mat[0]
new_mat[1] = mat[1]+mat[2]
new_mat[2] = mat[3]
new_mat[3] = mat[4]
mat = new_mat.copy()
new_mat=np.zeros((4,4),dtype='int')
new_mat[:,0] = mat[:,0]
new_mat[:,1] = mat[:,1]+mat[:,2]
new_mat[:,2] = mat[:,3]
new_mat[:,3] = mat[:,4]
return new_mat
# def reversal_label(mat):
# new_mat = np.zeros(mat.shape,dtype='int')
# new_mat[0]=mat[4]
# new_mat[1]=mat[2]
# new_mat[2]=mat[1]
# new_mat[3]=mat[0]
# new_mat[4]=mat[3]
# mat=new_mat.copy()
# new_mat[:,0]=mat[:,4]
# new_mat[:,1]=mat[:,2]
# new_mat[:,2]=mat[:,1]
# new_mat[:,3]=mat[:,0]
# new_mat[:,4]=mat[:,3]
# return new_mat
# def class_5to4(mat):
# #[W N1 N2 N3 R] to [W N1+N2 N3 R]
# new_mat=np.zeros((4,5),dtype='int')
# new_mat[0] = mat[0]
# new_mat[1] = mat[1]+mat[2]
# new_mat[2] = mat[3]
# new_mat[3] = mat[4]
# mat = new_mat.copy()
# new_mat=np.zeros((4,4),dtype='int')
# new_mat[:,0] = mat[:,0]
# new_mat[:,1] = mat[:,1]+mat[:,2]
# new_mat[:,2] = mat[:,3]
# new_mat[:,3] = mat[:,4]
# return new_mat
def Kappa(mat):
......@@ -88,7 +88,7 @@ def stagefrommat(mat):
stage_num = np.zeros(wide,dtype='int')
for i in range(wide):
stage_num[i]=np.sum(mat[i])
util.writelog('statistics of dataset [S3 S2 S1 R W]:\n'+str(stage_num),True)
util.writelog('statistics:\n'+str(stage_num),True)
def show(plot_result,epoch):
train = np.array(plot_result['train'])
......@@ -108,7 +108,7 @@ def show(plot_result,epoch):
plt.plot(test_x,test*100,label='test', linewidth = 2.0,color = 'blue')
plt.legend(loc=1)
plt.title('Running err.',fontsize='large')
plt.savefig('./running_err.png')
plt.savefig('./checkpoints/running_err.png')
# plt.draw()
# plt.pause(0.01)
......@@ -117,8 +117,7 @@ def show(plot_result,epoch):
def main():
mat=[[37980,1322,852,2,327],[3922,8784,3545,0,2193],[1756,5136,99564,1091,991],[18,1,7932,4063,14],[1361,1680,465,0,23931]]
mat = np.array(mat)
avg_recall,avg_acc,err = result(mat)
print(avg_recall,avg_acc,err)
avg_recall,avg_acc,avg_sp,err,kappa = result(mat)
print(avg_recall,avg_acc,avg_sp,err,kappa)
if __name__ == '__main__':
main()
main()
\ No newline at end of file
......@@ -30,26 +30,26 @@ but the data needs meet the following conditions:
we recommend signal data normalized useing 5_95_th for each subject,
example: signals_normalized=transformer.Balance_individualized_differences(signals_origin, '5_95_th')
'''
signals_train,stages_train,signals_test,stages_test = dataloader.loaddataset(opt.dataset_dir,opt.dataset_name,opt.signal_name,opt.sample_num,opt.BID,opt.select_sleep_time)
signals_train,labels_train,signals_test,labels_test = dataloader.loaddataset(opt.dataset_dir,opt.dataset_name,opt.signal_name,opt.sample_num,opt.BID,opt.select_sleep_time)
util.writelog('train:',True)
stage_cnt,stage_cnt_per = statistics.stage(stages_train)
stage_cnt,stage_cnt_per = statistics.stage(opt,labels_train)
util.writelog('test:',True)
_,_ = statistics.stage(stages_test)
signals_train,stages_train = transformer.batch_generator(signals_train,stages_train,opt.batchsize)
signals_test,stages_test = transformer.batch_generator(signals_test,stages_test,opt.batchsize)
_,_ = statistics.stage(opt,labels_test)
signals_train,labels_train = transformer.batch_generator(signals_train,labels_train,opt.batchsize)
signals_test,labels_test = transformer.batch_generator(signals_test,labels_test,opt.batchsize)
batch_length = len(signals_train)
print('length of batch:',batch_length)
show_freq = int(len(stages_train)/5)
show_freq = int(len(labels_train)/5)
t2 = time.time()
print('load data cost time: %.2f'% (t2-t1),'s')
net=CreatNet(opt.model_name)
net=CreatNet(opt)
util.show_paramsnumber(net)
weight = np.array([1,1,1,1,1])
weight = np.ones(opt.label)
if opt.weight_mod == 'avg_best':
weight = np.log(1/stage_cnt_per)
weight[2] = weight[2]+1
......@@ -74,7 +74,7 @@ criterion = nn.CrossEntropyLoss(weight)
def evalnet(net,signals,stages,epoch,plot_result={}):
# net.eval()
confusion_mat = np.zeros((5,5), dtype=int)
confusion_mat = np.zeros((opt.label,opt.label), dtype=int)
for i, (signal,stage) in enumerate(zip(signals,stages), 1):
signal=transformer.ToInputShape(signal,opt.model_name,test_flag =True)
......@@ -90,22 +90,22 @@ def evalnet(net,signals,stages,epoch,plot_result={}):
recall,acc,sp,err,k = statistics.result(confusion_mat)
plot_result['test'].append(err)
heatmap.draw(confusion_mat,name = 'test')
heatmap.draw(confusion_mat,opt.label_name,opt.label_name,name = 'test')
print('recall,acc,sp,err,k: '+str(statistics.result(confusion_mat)))
return plot_result,confusion_mat
print('begin to train ...')
final_confusion_mat = np.zeros((5,5), dtype=int)
final_confusion_mat = np.zeros((opt.label,opt.label), dtype=int)
plot_result={'train':[1.],'test':[1.]}
confusion_mats = []
for epoch in range(opt.epochs):
t1 = time.time()
confusion_mat = np.zeros((5,5), dtype=int)
confusion_mat = np.zeros((opt.label,opt.label), dtype=int)
print('epoch:',epoch+1)
net.train()
for i, (signal,stage) in enumerate(zip(signals_train,stages_train), 1):
for i, (signal,stage) in enumerate(zip(signals_train,labels_train), 1):
signal=transformer.ToInputShape(signal,opt.model_name,test_flag =False)
signal,stage = transformer.ToTensor(signal,stage,no_cuda =opt.no_cuda)
......@@ -123,11 +123,11 @@ for epoch in range(opt.epochs):
confusion_mat[stage[x]][pred[x]] += 1
if i%show_freq==0:
plot_result['train'].append(statistics.result(confusion_mat)[3])
heatmap.draw(confusion_mat,name = 'train')
heatmap.draw(confusion_mat,opt.label_name,opt.label_name,name = 'train')
statistics.show(plot_result,epoch+i/(batch_length*0.8))
confusion_mat[:]=0
plot_result,confusion_mat = evalnet(net,signals_test,stages_test,epoch+1,plot_result)
plot_result,confusion_mat = evalnet(net,signals_test,labels_test,epoch+1,plot_result)
confusion_mats.append(confusion_mat)
# scheduler.step()
......@@ -147,4 +147,4 @@ final_confusion_mat = confusion_mats[pos]
util.writelog('final: '+'recall,acc,sp,err,k: '+str(statistics.result(final_confusion_mat)),True)
util.writelog('confusion_mat:\n'+str(final_confusion_mat),True)
statistics.stagefrommat(final_confusion_mat)
heatmap.draw(final_confusion_mat,name = 'final_test')
\ No newline at end of file
heatmap.draw(final_confusion_mat,opt.label_name,opt.label_name,name = 'final_test')
\ No newline at end of file
......@@ -20,7 +20,7 @@ def batch_generator(data,target,batchsize,shuffle = True):
shuffledata(data,target)
data = trimdata(data,batchsize)
target = trimdata(target,batchsize)
data = data.reshape(-1,batchsize,3000)
data = data.reshape(-1,batchsize,data.shape[1])
target = target.reshape(-1,batchsize)
return data,target
......@@ -99,22 +99,24 @@ def random_transform_2d(img,finesize = (224,122),test_flag = True):
def ToInputShape(data,net_name,test_flag = False):
data = data.astype(np.float32)
batchsize=data.shape[0]
batchsize = data.shape[0]
loadsize = data.shape[1]
_finesize = int(loadsize*0.9)
if net_name=='lstm':
result =[]
for i in range(0,batchsize):
randomdata=random_transform_1d(data[i],finesize = 2700,test_flag=test_flag)
randomdata=random_transform_1d(data[i],finesize = _finesize,test_flag=test_flag)
result.append(dsp.getfeature(randomdata))
result = np.array(result).reshape(batchsize,2700*5)
result = np.array(result).reshape(batchsize,_finesize*5)
elif net_name in['cnn_1d','resnet18_1d','multi_scale_resnet_1d','micro_multi_scale_resnet_1d']:
result =[]
for i in range(0,batchsize):
randomdata=random_transform_1d(data[i],finesize = 2700,test_flag=test_flag)
randomdata=random_transform_1d(data[i],finesize = _finesize,test_flag=test_flag)
result.append(randomdata)
result = np.array(result)
result = result.reshape(batchsize,1,2700)
result = result.reshape(batchsize,1,_finesize)
elif net_name in ['squeezenet','multi_scale_resnet','dfcnn','resnet18','densenet121','densenet201','resnet101','resnet50']:
result =[]
......
......@@ -7,7 +7,7 @@ import os
# return usage
def writelog(log,printflag = False):
f = open('./log','a+')
f = open('./checkpoints/log.txt','a+')
f.write(log+'\n')
if printflag:
print(log)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册