【发布时间】:2019-01-09 21:34:58
【问题描述】:
我正在尝试构建一个 Elman 简单 RNN,如 here 所述。
我使用 Keras 构建了我的模型,如下所示:
model = keras.Sequential()
model.add(keras.layers.SimpleRNN(7,activation =None,use_bias=True,input_shape=
[x_train.shape[0],x_train.shape[1]]))
model.add(keras.layers.Dense(7,activation = tf.nn.sigmoid))
model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
simple_rnn_2 (SimpleRNN) (None, 7) 105
_________________________________________________________________
dense_2 (Dense) (None, 7) 56
=================================================================
Total params: 161
Trainable params: 161
Non-trainable params: 0
_________________________________________________________________
我的训练数据目前的形状是 (15000, 7, 7)。也就是说,15000 个长度为 7 的热编码实例,编码七个字母之一。例如[0,0,0,1,0,0,0],[0,0,0,0,1,0,0] 等等。
数据的标签格式相同,因为每个字母都预测序列中的下一个字母,即[0,1,0,0,0,0,0] 具有标签[0,0,1,0,0,0,0]。
所以,训练数据(x_train) 和训练标签(y_train) 都被塑造成(15000,7,7)。
我的验证数据 x_val 和 y_val 的形状为 (10000,7,7)。即相同的形状,但实例更少。
所以当我运行我的模型时:
history = model.fit(x_train,
y_train,
epochs = 40,
batch_size=512,
validation_data = (x_val,y_val))
我得到错误:
ValueError: Error when checking input: expected simple_rnn_7_input to have shape (15000, 7) but got array with shape (7, 7)
显然我的输入数据格式不正确,无法输入到 Keras RNN,但我想不出如何为其提供正确的输入。
谁能告诉我解决方案?
【问题讨论】:
-
一个 RNN 接受 3-D 输入。第一个是批量大小(示例数 = 165k),第二个是与时间相关的轴(看起来你缺少),第三个是每个给定时间的向量(=7)。如果是句子,时间将等于句子中的单词数或字母数
-
感谢@GergesDib。请看我编辑的帖子。我对其进行了更改,使输入为 3D,并得到类似但不相同的错误。
-
制作
input_shape = x_train.shape[1:] -
现在我得到
ValueError: Error when checking target: expected dense_8 to have 2 dimensions, but got array with shape (15000, 7, 7)- - 突然它需要二维输入?我尝试添加一个什么也没做的展平层 -
很奇怪。要尝试的一件事是重新启动您的 python 会话。看起来您正在使用笔记本或交互式会话?
标签: python tensorflow machine-learning keras recurrent-neural-network