检查目标时出错:预期 dense_1 有 2 个维度,但得到形状为 (1, 4000, 25) 的数组
Error when checking target: expected dense_1 to have 2 dimensions, but got array with shape (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)
这是我得到的错误:
Error when checking target: expected dense_1 to have 2 dimensions, but got array with shape (1, 4000, 25)
尝试运行model.fit
时生成
输入格式如下:
x_train = np.array([input_array[:4000]])
输入的每条轨迹都有 25 个特征。
我是这个领域的新手,我不知道如何解决这个问题。
我查过类似的票,但 none 对我有帮助。
这里是我分析的一些门票:
ValueError: Error when checking target: expected dense_1 to have 2 dimensions, but got array with shape (68, 50, 50, 50, 1)
Error when checking target: expected dense_2 to have 2 dimensions, but got array with shape (1, 1226, 2)
ValueError: Error when checking target: expected dense_2 to have 3 dimensions, but got array with shape (10000, 1)
您还没有显示 input_array
的形状,但您可以尝试用 np.reshape(input_array, (4000, 25))
重塑它。阅读更多关于重塑 here
几点说明:
- x_train 作为 LSTM 层的输入,该层需要 3D 输入。第一维是样本,第二维是时间步长,最后一维是特征。
- 当您调用 fit 时,您会传递 x_train 两次,这意味着您希望目标与输入数据相同。如果你正在尝试做一个自动编码器,这是有道理的,但是它不能在这个架构上工作。 Dense 层的输出将是单个值,它无法匹配输入的形状(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)
祝你好运!
我正在尝试训练 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)
这是我得到的错误:
Error when checking target: expected dense_1 to have 2 dimensions, but got array with shape (1, 4000, 25)
尝试运行model.fit
时生成输入格式如下:
x_train = np.array([input_array[:4000]])
输入的每条轨迹都有 25 个特征。
我是这个领域的新手,我不知道如何解决这个问题。 我查过类似的票,但 none 对我有帮助。
这里是我分析的一些门票:
ValueError: Error when checking target: expected dense_1 to have 2 dimensions, but got array with shape (68, 50, 50, 50, 1)
Error when checking target: expected dense_2 to have 2 dimensions, but got array with shape (1, 1226, 2)
ValueError: Error when checking target: expected dense_2 to have 3 dimensions, but got array with shape (10000, 1)
您还没有显示 input_array
的形状,但您可以尝试用 np.reshape(input_array, (4000, 25))
重塑它。阅读更多关于重塑 here
几点说明:
- x_train 作为 LSTM 层的输入,该层需要 3D 输入。第一维是样本,第二维是时间步长,最后一维是特征。
- 当您调用 fit 时,您会传递 x_train 两次,这意味着您希望目标与输入数据相同。如果你正在尝试做一个自动编码器,这是有道理的,但是它不能在这个架构上工作。 Dense 层的输出将是单个值,它无法匹配输入的形状(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)
祝你好运!