TensorFlow中输入与预测的形状不匹配问题求助
TensorFlow中输入与预测的形状不匹配问题求助
我最近在搭建一个TensorFlow/Keras模型,想让它学习从两个浮点数输入预测出一个浮点数结果,但遇到了预测阶段的形状不匹配问题,还怀疑训练效果糟糕也和这个有关,来向大家求助!
先给大家看我的模型定义与编译代码:
model = tf.keras.Sequential() model.add( tf.keras.layers.InputLayer(shape=(2,)) ) model.add( tf.keras.layers.Dense(1024) ) model.add( tf.keras.layers.Dense(1024) ) model.add( tf.keras.layers.Dense(units=1) ) model.compile(loss="mean_squared_error", optimizer="adam", metrics=["mse"])
训练部分我用的是numpy数组作为数据集:trainData和trainRes都是numpy数组,其中trainData.shape是(10000, 2),trainRes.shape是(10000,)。训练代码如下:
model.fit(x=trainData, y=trainRes, epochs=12, batch_size=100)
训练看起来是正常执行的,所有epochs都能跑完,甚至model.evaluate(x=testData, y=testRes)也能运行——不过输出的MSE数值大得离谱。
但当我尝试预测单个样本时,比如运行:
res = model.predict(testData[0])
直接触发了错误,错误信息如下:
Invalid input shape for input Tensor("data:0", shape=(2,), dtype=float32). Expected shape (None, 2), but input has incompatible shape (2,) Arguments received by Sequential.call(): • inputs=tf.Tensor(shape=(2,), dtype=float32) • training=False • mask=None
奇怪的是,如果我用切片取一个batch的方式来预测,比如:
res = model.predict(testData[0:1])
就能成功运行,不过返回的是一个1x1的数组,而不是我想要的单个数值。
我现在的猜测是:是不是Keras在训练时把整个数组当成了单个输入单元,而不是逐行处理每个样本?这会不会也是训练效果极差、MSE居高不下的原因呢?
备注:内容来源于stack exchange,提问作者v010dya
相关产品推荐
相关产品推荐

