我正在训练一个回归模型,该模型近似估算方程的权重: Y = R + B + G 为此,我提供了R,B,G和Y的预定值作为训练数据。
R = np.array([-4, -10, -2, 8, 5, 22, 3], dtype=float)
B = np.array([4, -10, 0, 0, 15, 5, 1], dtype=float)
G = np.array([0, 10, 5, 8, 1, 2, 38], dtype=float)
Y = np.array([0, -10, 3, 16, 21, 29, 42], dtype=float)
训练批次由1x3数组组成,分别对应于R,B和G的Ith值。
RBG = np.array([R,B,G]).transpose()
print(RBG)
[[ -4. 4. 0.]
[-10. -10. 10.]
[ -2. 0. 5.]
[ 8. 0. 8.]
[ 5. 15. 1.]
[ 22. 5. 2.]
[ 3. 1. 38.]]
我使用了一个具有3个输入的神经网络,其中1个具有2个神经元的密集层(隐藏层),以及一个具有单个神经元的输出层(输出)。
hidden = tf.keras.layers.Dense(units=2, input_shape=[3])
output = tf.keras.layers.Dense(units=1)
进一步,我训练了模型
model = tf.keras.Sequential([hidden, output])
model.compile(loss='mean_squared_error',
optimizer=tf.keras.optimizers.Adam(0.1))
history = model.fit(RBG,Y, epochs=500, verbose=False)
print("Finished training the model")
损失与时期的关系是正常的,先降低后平坦。
但是当我测试模型时,使用R,B和G的随机值作为
print(model.predict([[1],[1],[1]]))
预期输出为1 + 1 + 1 = 3,但出现值错误:
ValueError: Error when checking input: expected dense_2_input to have shape (3,) but got array with shape (1,)
知道我可能会出错吗?
令人惊讶的是,它响应的唯一输入是训练数据本身。即
print(model.predict(RBG))
[[ 2.1606684e-07]
[-3.0000000e+01]
[-3.2782555e-07]
[ 2.4000002e+01]
[ 4.4999996e+01]
[ 2.9000000e+01]
[ 4.2000000e+01]]
答案 0 :(得分:1)
正如错误所述,问题出在您输入的形状上。您需要转置[[1],[1],[1]]
此输入,然后您将具有模型期望的形状。
所以npq = np.array([[1],[1],[1]]).transpose()
现在将其提供给model.predict(npq)