我設(shè)法創(chuàng)建了一個成功的 RNN,它可以預(yù)測字母序列中的下一個字母。但是,我無法弄清楚為什么我遇到的問題的解決方案有效。我的訓(xùn)練數(shù)據(jù)是維度的 (39000,7,7)我的模型如下: model = Sequential() model.add(SimpleRNN(7, input_shape = [7,7], return_sequences = True)) model.add(Flatten()) model.add(Dense(7)) model.add(Activation('softmax')) adam = optimizers.Adam(lr = 0.001) model.compile(loss='categorical_crossentropy',optimizer=adam, metrics=['accuracy']) model.summary() return modelLayer (type) Output Shape Param # =================================================================simple_rnn_49 (SimpleRNN) (None, 7, 7) 105 _________________________________________________________________flatten_14 (Flatten) (None, 49) 0 _________________________________________________________________dense_49 (Dense) (None, 7) 350 _________________________________________________________________activation_40 (Activation) (None, 7) 0 =================================================================Total params: 455Trainable params: 455Non-trainable params: 0_________________________________________________________________這完美地工作。我的問題是,為什么我需要展平層?當(dāng)我不包括它時,我會得到這個模型摘要:跟著這個錯誤ValueError: Error when checking target: expected activation_41 to have 3 dimensions, but got array with shape (39000, 7)我的問題是:當(dāng)模型摘要說第二個例子中密集層的輸出應(yīng)該是 (None, 7 , 7) 并且錯誤消息說激活級別正在期待這樣一個 3D 輸入時,為什么密集層實際上是(39000,7)根據(jù)錯誤消息輸出形狀張量?我意識到 flatten() 層通過將所有內(nèi)容都放在 2D 中解決了這個問題,但我很困惑為什么沒有它它就無法工作。
1 回答

慕運維8079593
TA貢獻1876條經(jīng)驗 獲得超5個贊
在您的錯誤聲明中,您可以看到錯誤是在檢查目標(biāo)尺寸時引起的。沒有展平層的模型輸出的形狀(None, 7, 7)
在模型摘要中正確顯示。這里的問題是您的標(biāo)簽的形狀是(None, 7)
,因此 Keras 拋出 a ValueError
(可能在反向傳播期間),因為您的標(biāo)簽的維度比網(wǎng)絡(luò)的輸出少一個。Keras 期望(None, 7, 7)
from 標(biāo)簽與您的激活層的尺寸相匹配,但收到了一個(None, 7)
。
這就是為什么model.add(Flatten())
在添加密集層之前使用可以正常工作的原因,因為目標(biāo)維度和輸出維度都是(None, 7)
.
添加回答
舉報
0/150
提交
取消