簡體   English   中英

ValueError:“順序”層的輸入 0 與該層不兼容:預期形狀 =(無,33714,12),找到形狀 =(無,12)

[英]ValueError: Input 0 of layer "sequential" is incompatible with the layer: expected shape=(None, 33714, 12), found shape=(None, 12)

我正在嘗試使用從 csv 文件中提取的一些數據運行一個簡單的 RNN。 我已經預處理了我的數據並將它們分成訓練集和驗證集,但我得到了上面的錯誤。 這是我的網絡結構,也是我到目前為止所嘗試的。 我的形狀是 x_train 的 (33714,12),y_train 的 (33714,),x_val 的 (3745,12) 和 y_val 的 (3745,)。

model = Sequential()
# LSTM LAYER IS ADDED TO MODEL WITH 128 CELLS IN IT
model.add(LSTM(128, input_shape=x_train.shape, activation='tanh', return_sequences=True))
model.add(Dropout(0.2))  # 20% DROPOUT ADDED FOR REGULARIZATION
model.add(BatchNormalization())

model.add(LSTM(128, input_shape=x_train.shape, activation='tanh', return_sequences=True))   # ADD ANOTHER LAYER
model.add(Dropout(0.1))
model.add(BatchNormalization())

model.add(LSTM(128, input_shape=x_train.shape, activation='tanh', return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add(Dense(32, activation='relu'))  # ADD A DENSE LAYER
model.add(Dropout(0.2))

model.add(Dense(2, activation='softmax'))  # FINAL CLASSIFICATION LAYER WITH 2 CLASSES AND SOFTMAX
# ---------------------------------------------------------------------------------------------------

# OPTIMIZER SETTINGS
opt = tf.keras.optimizers.Adam(learning_rate=LEARNING_RATE, decay=DECAY)

# MODEL COMPILE
model.compile(loss='sparse_categorical_crossentropy', optimizer=opt, metrics=['accuracy'])

# CALLBACKS
tensorboard = TensorBoard(log_dir=f"logs/{NAME}")
filepath = "RNN_Final-{epoch:02d}-{val_acc:.3f}"
checkpoint = ModelCheckpoint("models/{}.model".format(filepath, monitor='val_acc', verbose=1,
                                                      save_best_only=True, mode='max'))  # save only the best ones

# RUN THE MODEL
history = model.fit(x_train, y_train, epochs=EPOCHS, batch_size=BATCH_SIZE,
                    validation_data=(x_val, y_val), callbacks=[tensorboard, checkpoint])

雖然它會給你一個很大的價值,但最好的辦法是壓平具有更大尺寸的那個。

A tensorflow.keras.layers.Flatten() 基本上會使您的 output 將值相乘,即輸入:(無 -> 5N,1)()

對於您的示例,這將為您提供:

(無,33714,12)->(無,404568)。

我不完全確定當您更改形狀大小時這是否會起作用,但這就是我克服形狀不兼容問題的方法:預期:(無,x),得到:(無,y,x)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM