我正在这样编译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 以某种方式将整个数组解释为单个单元以用于训练目的,而不是“逐行”。这也解释了为什么训练是无稽之谈,没有接近任何明智的东西。
你的问题来自于你的预测。
作为输入,您有一个向量数组,并且在第一个预测中,您为模型提供了一个数组。
您的模型是在向量数组上进行训练的。
要解决此问题,请添加 [ ]。
这给出:
res = model.predict(testData[[0]])