【发布时间】:2021-10-15 15:55:11
【问题描述】:
我正在尝试分批提供 Sequential 模型。为了重现我的示例,假设我的数据是:
X = np.random.rand(432,24,1)
Y = np.random.rand(432,24,1)
我的目标是批量输入模型。一次 24 个点(24 x 1 矢量),432 次。
我将模型构建为:
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=12)
model = keras.Sequential([
#keras.layers.Flatten(batch_input_shape=(None, 432, 2)),
keras.layers.Dense(64, activation=tf.nn.relu),
keras.layers.Dense(2, activation=tf.nn.sigmoid),
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(X_train, y_train, epochs=200, batch_size=32, validation_split=0.3)
test_loss, test_acc = model.evaluate(X_test, y_test)
print('Model loss:', test_loss, 'Model accuracy: ', test_acc)
但是,我收到此错误:
ValueError:dense_25 层的输入 0 与该层不兼容:输入形状的预期轴 -1 具有值 864,但已接收 带形状的输入(无,432)
【问题讨论】:
-
数据集中单个数据条目的形状是什么?
-
这是第一批24点。有 432 个这样的: array([296, 87, 280, 87, 320, 87, 280, 95, 336, 118, 352, 118, 288, 158, 280, 214, 336, 214, 280, 285, 280 , 285, 288, 55])
-
你为什么要扁平化你的输入?不是已经
shape(batch_size, 24)了吗? -
@Lash 您仍在将数据维度与点数混合在一起。批次和数据点不应处于不同的维度;批次是通过沿第一维切片数据获得的。
-
你是对的。我不必把它弄平。但是输出不是我想要的。当我预测它给我一个形状数组(24,1)。我想要的是:对于模型获得的每批 24 个点,一个输出(0 或 1)。现在我每批 24 个点得到 24 个输出。
标签: python tensorflow machine-learning keras deep-learning