Tensorflow 中输入和预测的形状不匹配

问题描述 投票:0回答:1

我正在这样编译Tensorflow模型:

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"])

我希望它能够“学习”采用两个浮点数并预测一个浮点数。

当我训练它时

model.fit(x=trainData, y=trainRes, epochs=12, batch_size=100)

trainData
trainRes
都是 numpy 数组。

trainData.shape
(10000, 2)
trainRes.shape
(10000,)
。它似乎正在执行纪元,甚至
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

无论出于何种原因,以下内容都有效:

res = model.predict(testData[0:1])

但是,它返回 1x1 数组,而不是单个值。

我最好的猜测是,Keras 以某种方式将整个数组解释为单个单元以用于训练目的,而不是“逐行”。这也解释了为什么训练是无稽之谈,没有接近任何明智的东西。

python tensorflow
1个回答
0
投票

你的问题来自于你的预测。
作为输入,您有一个向量数组,并且在第一个预测中,您为模型提供了一个数组。
您的模型是在向量数组上进行训练的。
要解决此问题,请添加 [ ]。
这给出:

res = model.predict(testData[[0]])
© www.soinside.com 2019 - 2024. All rights reserved.