【问题标题】:EEG data classification in TensorflowTensorflow 中的 EEG 数据分类
【发布时间】: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


【解决方案1】:

batch_x 的形状是什么?问题出在您的占位符上: 试试这个:

x = tf.placeholder(tf.float32, shape=[None, 91, 97500])

另外,最好在重塑 x 之后调用变量,例如 reshaped_x 以防止混淆。

【讨论】:

  • batch_X 的形状是 [6,91,97500],我的电脑堆栈/冻结当我使用 x = tf.placeholder(tf.float32, shape=[None, 91, 97500]),当我重塑我的 X 时,我遇到了同样的问题,即 x=x.reshape(8872500)。通过这两个试验,我没有形状错误消息,但我的计算机冻结,直到我手动重新启动。我尝试使用 gc.collect()清除内存但仍然冻结@rmeertens
  • 这个解决方案在改变我的卷积和池化层的参数后工作。由于池化后输入数据的大小,我的计算机正在堆叠。
猜你喜欢
  • 2019-02-26
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 2019-09-11
相关资源
最近更新 更多