簡體   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