我设法创建了一个成功的 RNN,它可以预测字母序列中的下一个字母。但是,我无法弄清楚为什么我遇到的问题的解决方案有效。
我的训练数据是维度的 (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 model
Layer (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: 455
Trainable params: 455
Non-trainable params: 0
_________________________________________________________________
这完美地工作。我的问题是,为什么我需要展平层?当我不包括它时,我会得到这个模型摘要:
跟着这个错误
ValueError: Error when checking target: expected activation_41 to have 3 dimensions, but got array with shape (39000, 7)
我的问题是:当模型摘要说第二个例子中密集层的输出应该是 (None, 7 , 7) 并且错误消息说激活级别正在期待这样一个 3D 输入时,为什么密集层实际上是(39000,7)根据错误消息输出形状张量?我意识到 flatten() 层通过将所有内容都放在 2D 中解决了这个问题,但我很困惑为什么没有它它就无法工作。
慕运维8079593
相关分类