Tensorflow中的EEG数据分类

时间:2017-04-21 16:15:08

标签: python-3.x tensorflow deep-learning

我有EEG数据文件,我想在CNN中使用tensorflow分类为2类。我的数据是3D(91,2500,39),91是电极的no,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:无法为Tensor' Placeholder:0'提供形状值(6,97500,91),其形状为'(?,8872500)'

我试图将我的输入重新整形为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})

谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

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