我如何知道我的输入数据到我的 keras RNN 的正确格式?
How do I know the correct format for my input data into my keras RNN?
我正在尝试按照 here 所述构建一个 Elman 简单 RNN。
我使用 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,但我想不出如何为它提供正确的输入。
谁能告诉我解决方案?
- SimpleRNN 层期望输入维度
(seq_length, input_dim)
,在您的情况下为 (7,7)。
- 此外,如果你想在每个时间步输出,你需要使用
return_sequence=True
,默认情况下是false
。这样你就可以比较时间步长的输出。
所以模型架构将是这样的:
model.add(keras.layers.SimpleRNN(7, activation='tanh',
return_sequences=True,
input_shape=[7,7]))
model.add(keras.layers.Dense(7))
model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
simple_rnn_12 (SimpleRNN) (None, 7, 7) 105
_________________________________________________________________
dense_2 (Dense) (None, 7, 7) 56
=================================================================
Total params: 161
Trainable params: 161
Non-trainable params: 0
_________________________________________________________________
现在在训练时,它需要数据 input and output
的 dims (num_samples, seq_length, input_dims)
,即两者的 (15000, 7, 7)
。
model.compile(loss='categorical_crossentropy', optimizer='adam')# define any loss, you want
model.fit(x_train, y_train, epochs=2)
我正在尝试按照 here 所述构建一个 Elman 简单 RNN。
我使用 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,但我想不出如何为它提供正确的输入。
谁能告诉我解决方案?
- SimpleRNN 层期望输入维度
(seq_length, input_dim)
,在您的情况下为 (7,7)。 - 此外,如果你想在每个时间步输出,你需要使用
return_sequence=True
,默认情况下是false
。这样你就可以比较时间步长的输出。
所以模型架构将是这样的:
model.add(keras.layers.SimpleRNN(7, activation='tanh',
return_sequences=True,
input_shape=[7,7]))
model.add(keras.layers.Dense(7))
model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
simple_rnn_12 (SimpleRNN) (None, 7, 7) 105
_________________________________________________________________
dense_2 (Dense) (None, 7, 7) 56
=================================================================
Total params: 161
Trainable params: 161
Non-trainable params: 0
_________________________________________________________________
现在在训练时,它需要数据 input and output
的 dims (num_samples, seq_length, input_dims)
,即两者的 (15000, 7, 7)
。
model.compile(loss='categorical_crossentropy', optimizer='adam')# define any loss, you want
model.fit(x_train, y_train, epochs=2)