当input_shape指定为3-d时,Keras SimpleRNN出错

时间:2016-08-26 16:51:00

标签: python neural-network theano keras recurrent-neural-network

我正在尝试从Keras上的SimpleRNN上的文本进行训练。

在Keras中,我为SimpleRNN指定了一个非常简单的参数,如下所示:

model = Sequential()
model.add(SimpleRNN(output_dim=1, input_shape=(1,1,1))

我知道input_shape应该是(nb_samples,timesteps,input_dim),与我的train_x.shape相同

所以我很惊讶我收到了以下错误。

Traceback (most recent call last):
  File "C:/Users/xxx/xxxx/xxx/xxx.py", line 262, in <module>
    model.add(SimpleRNN(output_dim=vocab_size, input_shape=train_x.shape))
  File "C:\Anaconda3\envs\py34\lib\site-packages\keras\models.py", line 275, in add
    layer.create_input_layer(batch_input_shape, input_dtype)
  File "C:\Anaconda3\envs\py34\lib\site-packages\keras\engine\topology.py", line 367, in create_input_layer
    self(x)
  File "C:\Anaconda3\envs\py34\lib\site-packages\keras\engine\topology.py", line 467, in __call__
    self.assert_input_compatibility(x)
  File "C:\Anaconda3\envs\py34\lib\site-packages\keras\engine\topology.py", line 408, in assert_input_compatibility
    str(K.ndim(x)))
Exception: Input 0 is incompatible with layer simplernn_1: expected ndim=3, found ndim=4

不确定为什么当指定只有3时keras“找到了ndim = 4”!

为了清楚起见,我的

  

train_x.shape =(73,84,400)

  

vocab_size = 400

。只要input_shape被输入3d及以上,我就会意识到会产生错误。

任何帮助将不胜感激!!! :))

1 个答案:

答案 0 :(得分:2)

您不应在模型的输入形状中包含n_samples。因此,您必须为图层的输入形状指定大小为2的元组(或将形状的第一个元素设置为None)。 Keras会自动将None添加到您的输入形状,从而生成ndim=4。 有关此问题的更多信息,请访问here

此外,您的input_dim=400(假设您使用词汇中单词的单热编码表示)并且您的训练数据由73文本(非常小)组成,每个文本的长度为{{ 1}}。所以你应该设置84