如何知道我的输入数据的正确格式以输入到我的Keras RNN中?

我试图构建一个如这里所描述的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: 161Trainable params: 161Non-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中,但我不知道如何提供正确的输入。

有谁能给我一些解决方案的建议吗?


回答:

  1. SimpleRNN层期望输入的维度为 (seq_length, input_dim),在你的情况下是(7,7)。
  2. 另外,如果你想要每个时间步的输出,你需要使用 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: 161Trainable params: 161Non-trainable params: 0_________________________________________________________________

现在在训练时,它期望数据 输入和输出 的维度为 (num_samples, seq_length, input_dims)(15000, 7, 7) 对于两者都适用。

model.compile(loss='categorical_crossentropy', optimizer='adam')# 定义你想要的任何损失model.fit(x_train, y_train, epochs=2)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注