【发布时间】:2017-04-21 16:15:07
【问题描述】:
我有脑电图数据文件,我想在 CNN 中使用 tensorflow 将其分类为 2 类。我的数据是 3D(91,2500,39),91 是电极数量,2500 样本数量和 39 是数量块。最后一个维度(39)在(38-41)之间的不同文件中有所不同,因此在将维度减少到 2D 后,我将所有文件的大小调整为(91,97500)并将所有文件附加到我的空列表中,代码如下
for file in os.listdir(dataDir):
data=scipy.io.loadmat(file)
x=data['eegdata']
x = x.reshape(91, -1)
x=cv2.resize(x,(91,97500))
# x=x.reshape(8872500)
# print(x.shape)
X.append(x)
X=np.array(X)
然后我为输入的原始数据创建了张量占位符,维度为 [None,8872500],值 8872500 来自 91*97500,我应该将数据分为两类
x = tf.placeholder(tf.float32, shape=[None, 8872500])
y = tf.placeholder(tf.float32, shape=[None, 2])
keep_prob = tf.placeholder(tf.float32)
我在输入卷积层之前对输入进行了重构
x = tf.reshape(x, shape=[-1, 91, 97500, 1])
我的批处理大小是 6,当我运行我的代码时出现错误
ValueError: 无法为形状为“(?, 8872500)”的张量“Placeholder:0”提供形状 (6, 97500, 91) 的值
我试图将我的输入重塑为 8872500(正如它可以在 for 循环的注释部分看到的那样),当我这样做时,我的计算机堆栈,我应该为我的程序使用哪些形状(张量和输入)? 我的会话看起来像这样
init=tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
step = 1
# Keep training until reach max iterations
while step * batch_size < training_iters:
offset = (step * batch_size) % (ytrain.shape[0] - batch_size)
batch_x = xtrain[offset:(offset + batch_size)]
batch_y = ytrain[offset:(offset + batch_size)]
# Run optimization op (backprop)
sess.run(optimizer, feed_dict={x: batch_x, y: batch_y, keep_prob: dropout})
谢谢。
【问题讨论】:
-
你取得了好成绩吗?我正在研究如何对脑电图数据进行分类,根据其他帖子,cnn 不好,结果会很糟糕,建议改用 deep nn。
-
是的,我得到了很好的结果,这是一个二分类问题,我们得到了 99% 的分类准确率。我在另外 64 个通道的 EEG 上使用了相同的模型,我得到了 96% 的分类准确率(五类问题)@PabloGonzalez
-
我明白了。我正在尝试使用 dnn,但我无法获得那么高的准确性,所以也许我应该尝试使用 cnn。如果您知道使用 cnn 进行脑电图分类的良好在线参考,请告诉我。我关注了一些 cmets,人们说 dnn 是这样做的正确方法,但您的结果证明 cnn 也可以做得很好。
-
就个人而言,我没有得到任何使用 CNN 进行脑电图分类的在线参考,我一直在这里询问我堆叠的确切点。因此,如果您堆叠,您可以在这里提问,您可以获得与我一样的帮助,或者您可以亲自致富@PabloGonzalez
-
这篇论文可能会给你一个突破ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=5492691@PabloGonzalez
标签: python-3.x tensorflow deep-learning