繁体   English   中英

ValueError:检查输入时出错:期望conv1d_81_input具有形状(177,100)但是具有形状的数组(1,177)

[英]ValueError: Error when checking input: expected conv1d_81_input to have shape (177, 100) but got array with shape (1, 177)

我的代码中出现此错误,任何人都可以帮助我吗? 如何固定输入数组以满足输入形状?

我的数据是:{来自参考的原始数据集包含5个不同的文件夹,每个文件夹有100个文件,每个文件代表一个主题/人。 每个文件记录了23.6秒的大脑活动。 相应的时间序列被采样到4097个数据点中。 每个数据点是在不同时间点的EEG记录的值。 因此,我们共有500个人,每个人有4097个数据点,持续23.5秒。

我们将每4097个数据点分割并混洗成23个块,每个块包含178个数据点1秒,每个数据点是在不同时间点记录的EEG值。 所以现在我们有23 x 500 = 11500条信息(行),每条信息包含178个数据点1秒(列),最后一列代表标签y {1,2,3,4,5}。 }

cvacc =[]
j=0
kf=KFold(n_splits=10, random_state=None, shuffle=False)
for train_index, test_index in kf.split(X):
    print('\nFold ',j)
    X_train, X_test = X[train_index], X[test_index] 
    y_train, y_test = y[train_index], y[test_index]

    # create model
    # 1D CNN neural network
    model = Sequential() 
    model.add(Conv1D(filters=10, kernel_size=10,             
    strides=1,activation='relu', input_shape=(3450,177)))
    model.add(Conv1D(filters=10, kernel_size=10, strides=1))
    model.add(MaxPooling1D(2))
    model.add(Conv1D(30,10,activation='relu', strides=1))
    model.add(Conv1D(30,10,activation='relu', strides=1))
    model.add(MaxPooling1D(2))
    model.add(Conv1D(60,10,activation='relu', strides=1))
    model.add(Conv1D(60,10,activation='relu', strides=1))
    model.add(MaxPooling1D(2))
    model.add(Conv1D(90,10,activation='relu', strides=1))
    model.add(Conv1D(90,10,activation='relu', strides=1))
    model.add(MaxPooling1D(2))
    model.add(Conv1D(120,10,activation='relu', strides=1))
    model.add(Conv1D(120,10,activation='relu', strides=1))
    model.add(MaxPooling1D(2))
    model.add(Flatten())
    model.add(Dense(50))
    model.add(Dense (20))
    model.add(Dense (5,activation='softmax'))
    # print(model.summary())

    model.compile(loss='categorical_crossentropy',
          optimizer='adam',
          metrics=['accuracy'])

    print(X_train.shape)
    print(X_test.shape)
# X_train= 
np.reshape(X_train(X_train.shape[0],X_train.shape[1],X_train.shape[1]))

history=model.fit(X_train, y_train, batch_size=3, 
epochs=15,validation_split=0.1)

加。 到doc https://keras.io/layers/convolutional/ ,你的输入应该是一个3D张量的形状(batch_size, steps, input_dim)其中batch_size是批处理中的系列数, steps是时间步数该系列, input_dim是系列中一个步骤的尺寸。 对你来说, steps = 178

尝试将模型中的第一行更改为:

model.add(Conv1D(filters=10, kernel_size=10,             
    strides=1,activation='relu', input_shape=(178, 1)))

(我们不需要提及batch_size值。在训练之前可以保持不确定。)

您的训练数据必须满足这些维度。 X_train.shape应为(*, 178, 1) X_train.shape (*, 178, 1)

注意:由于图层不正确,您将收到更多错误。 在第三个汇集层之后,步数将为6,并且下一个卷积层的stride为10(> 6),并将产生错误。 您必须重新配置图层。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM