检查目标时出错:预期dense_1具有 2 个维度,但得到形状为 (1, 4000, 25) 的数组



我正在尝试训练一个LSTM网络来进行无监督的二元分类。

我有一个整数矩阵作为输入,每一行都是不同的跟踪广告,每一列都是一个功能。

这是我使用的模型:

time_steps = 4000
features = 25
model = Sequential()
model.add(LSTM(128, input_shape=(time_steps, features), name='lstm'))
model.add(Dense(1, activation='relu'))
model.summary()
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, x_train, batch_size=batch_size, epochs=epochs, verbose=2)

这是我得到的错误:

检查目标时出错:预期dense_1具有 2 个维度,但得到形状为 (1, 4000, 25( 的数组

它是在尝试运行model.fit时生成的

输入的形成方式如下:

x_train = np.array([input_array[:4000]])

输入的每条迹线都有 25 个特征。

我是该领域的新手,我不知道如何解决问题。 我检查过类似的票,但没有一张帮助我。

以下是我分析的一些门票:

检查目标时出错:预期dense_1具有 3 个维度,但得到形状为 (118、1( 的数组

值错误:检查目标时出错:预期dense_1具有 2 个维度,但得到形状为 (68、50、50、50、50、1( 的数组

检查目标时出错:预期dense_2具有 2 个维度,但得到形状为 (1, 1226, 2( 的数组

值错误:检查目标时出错:预期dense_2具有 3 个维度,但得到形状为 (10000, 1( 的数组

几点评论:

  • x_train作为 LSTM 图层的输入给出,该图层需要 3D 输入。第一个维度是样本,第二个维度是时间步长,最终维度是特征。
  • 当您调用 fit 时,您会传递两次x_train,这意味着您希望目标与输入数据相同。如果您尝试执行自动编码器,这是有意义的,但是它无法在此体系结构上运行。密集层的输出将是单个值,它无法匹配输入的形状(即 3D(。下面我添加了一个y_train,以便您的模型预测单个值。
time_steps = 40
features = 25
x_train = np.random.normal(size=(10, time_steps, features))
y_train =  np.random.normal(size=(10, ))
model = Sequential()
model.add(LSTM(128, input_shape=(time_steps, features), name='lstm'))
model.add(Dense(1, activation='relu'))
model.summary()
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=2, verbose=2)

祝你好运!

您尚未显示input_array的形状,但您可以尝试使用np.reshape(input_array, (4000, 25))重塑它。在此处阅读有关重塑的更多信息

最新更新