当 input_shape 指定为 3-d 时,Keras SimpleRNN 出错
Error on Keras SimpleRNN when input_shape is specified to be 3-d
我正在尝试在 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
不知道为什么 keras "found ndim=4" 只指定了 3 个!
为清楚起见,我的
train_x.shape = (73, 84, 400)
和
vocab_size=400
。只要 input_shape 被喂 3d 及以上,我意识到会导致错误。
任何帮助将不胜感激!!! :))
您不应在模型的输入形状中包含 n_samples
。因此,您必须为图层的输入形状指定大小为 2 的元组(或将形状的第一个元素设置为 None
)。这里 Keras 会自动将 None
添加到您的输入形状中,从而导致 ndim=4
。
有关这方面的更多信息,请参见 here。
而且您的 input_dim=400
(假设您使用词汇表中单词的单热编码表示)和您的训练数据由 73
个文本(非常小)组成,每个文本的长度为84
。所以你应该设置 input_shape=(84,400).
我正在尝试在 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
不知道为什么 keras "found ndim=4" 只指定了 3 个!
为清楚起见,我的
train_x.shape = (73, 84, 400)
和
vocab_size=400
。只要 input_shape 被喂 3d 及以上,我意识到会导致错误。
任何帮助将不胜感激!!! :))
您不应在模型的输入形状中包含 n_samples
。因此,您必须为图层的输入形状指定大小为 2 的元组(或将形状的第一个元素设置为 None
)。这里 Keras 会自动将 None
添加到您的输入形状中,从而导致 ndim=4
。
有关这方面的更多信息,请参见 here。
而且您的 input_dim=400
(假设您使用词汇表中单词的单热编码表示)和您的训练数据由 73
个文本(非常小)组成,每个文本的长度为84
。所以你应该设置 input_shape=(84,400).