Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Hypo
candock
提交
791ffba1
C
candock
项目概览
Hypo
/
candock
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
candock
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
791ffba1
编写于
2月 15, 2020
作者:
H
hypox64
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
make it easier to use homemade datasets
上级
f24cc449
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
302 addition
and
522 deletion
+302
-522
.gitignore
.gitignore
+140
-0
creatnet.py
creatnet.py
+16
-14
dataloader.py
dataloader.py
+13
-13
datasets/sleep-edfx/sleep-cassette_MD5SUMS.txt
datasets/sleep-edfx/sleep-cassette_MD5SUMS.txt
+0
-306
datasets/sleep-edfx/sleep-telemetry_MD5SUMS.txt
datasets/sleep-edfx/sleep-telemetry_MD5SUMS.txt
+0
-88
download_dataset.py
download_dataset.py
+15
-15
heatmap.py
heatmap.py
+30
-14
options.py
options.py
+22
-7
statistics.py
statistics.py
+41
-42
train.py
train.py
+16
-16
transformer.py
transformer.py
+8
-6
util.py
util.py
+1
-1
未找到文件。
.gitignore
0 → 100644
浏览文件 @
791ffba1
# 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
creatnet.py
浏览文件 @
791ffba1
...
...
@@ -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
dataloader.py
浏览文件 @
791ffba1
...
...
@@ -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 lab
le
#30s per lab
el
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
=
[];
stage
s_test
=
[]
signals_train
=
[];
labels_train
=
[];
signals_test
=
[];
label
s_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
,
stage
s_train
)
signals_train
,
labels_train
=
connectdata
(
signal
,
stage
,
signals_train
,
label
s_train
)
else
:
signals_test
,
stages_test
=
connectdata
(
signal
,
stage
,
signals_test
,
stage
s_test
)
signals_test
,
labels_test
=
connectdata
(
signal
,
stage
,
signals_test
,
label
s_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
,
stage
s_train
)
signals_train
,
labels_train
=
connectdata
(
signal
,
stage
,
signals_train
,
label
s_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
,
stage
s_train
)
signals_train
,
labels_train
=
connectdata
(
signal
,
stage
,
signals_train
,
label
s_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
,
stage
s_test
)
signals_test
,
labels_test
=
connectdata
(
signal
,
stage
,
signals_test
,
label
s_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
,
stage
s_test
)
signals_test
,
labels_test
=
connectdata
(
signal
,
stage
,
signals_test
,
label
s_test
)
print
(
'---------Each subject has two sample---------'
,
'
\n
Train 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
+
'/stage
s_train.npy'
)
labels_train
=
np
.
load
(
filedir
+
'/label
s_train.npy'
)
signals_test
=
np
.
load
(
filedir
+
'/signals_test.npy'
)
stages_test
=
np
.
load
(
filedir
+
'/stage
s_test.npy'
)
labels_test
=
np
.
load
(
filedir
+
'/label
s_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
datasets/sleep-edfx/sleep-cassette_MD5SUMS.txt
已删除
100644 → 0
浏览文件 @
f24cc449
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
datasets/sleep-edfx/sleep-telemetry_MD5SUMS.txt
已删除
100644 → 0
浏览文件 @
f24cc449
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
download_dataset.py
浏览文件 @
791ffba1
...
...
@@ -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
()
...
...
heatmap.py
浏览文件 @
791ffba1
...
...
@@ -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)
#
T
rue_lable = ["N3", "N2", "N1", "REM","W"]
#
P
red_lable = ["N3", "N2", "N1", "REM","W"]
#
t
rue_lable = ["N3", "N2", "N1", "REM","W"]
#
p
red_lable = ["N3", "N2", "N1", "REM","W"]
def
draw
(
harvest
,
T
rue_lable
=
[
"N3"
,
"N2"
,
"N1"
,
"REM"
,
"W"
],
P
red_lable
=
[
"N3"
,
"N2"
,
"N1"
,
"REM"
,
"W"
],
t
rue_lable
=
[
"N3"
,
"N2"
,
"N1"
,
"REM"
,
"W"
],
p
red_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
,
P
red_lable
,
ax
=
ax
,
im
=
heatmap
(
harvest
,
true_lable
,
p
red_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
options.py
浏览文件 @
791ffba1
...
...
@@ -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
statistics.py
浏览文件 @
791ffba1
...
...
@@ -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
train.py
浏览文件 @
791ffba1
...
...
@@ -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
,
stage
s_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
,
label
s_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
(
stage
s_train
)
stage_cnt
,
stage_cnt_per
=
statistics
.
stage
(
opt
,
label
s_train
)
util
.
writelog
(
'test:'
,
True
)
_
,
_
=
statistics
.
stage
(
stage
s_test
)
signals_train
,
stages_train
=
transformer
.
batch_generator
(
signals_train
,
stage
s_train
,
opt
.
batchsize
)
signals_test
,
stages_test
=
transformer
.
batch_generator
(
signals_test
,
stage
s_test
,
opt
.
batchsize
)
_
,
_
=
statistics
.
stage
(
opt
,
label
s_test
)
signals_train
,
labels_train
=
transformer
.
batch_generator
(
signals_train
,
label
s_train
,
opt
.
batchsize
)
signals_test
,
labels_test
=
transformer
.
batch_generator
(
signals_test
,
label
s_test
,
opt
.
batchsize
)
batch_length
=
len
(
signals_train
)
print
(
'length of batch:'
,
batch_length
)
show_freq
=
int
(
len
(
stage
s_train
)
/
5
)
show_freq
=
int
(
len
(
label
s_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
,
stage
s_train
),
1
):
for
i
,
(
signal
,
stage
)
in
enumerate
(
zip
(
signals_train
,
label
s_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
,
stage
s_test
,
epoch
+
1
,
plot_result
)
plot_result
,
confusion_mat
=
evalnet
(
net
,
signals_test
,
label
s_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
transformer.py
浏览文件 @
791ffba1
...
...
@@ -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
=
[]
...
...
util.py
浏览文件 @
791ffba1
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录