评估训练模型时无法理解测试数据的格式

时间:2019-09-20 12:25:47

标签: python-3.x tensorflow linear-regression

我正在训练一个回归模型,该模型近似估算方程的权重: 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]]

1 个答案:

答案 0 :(得分:1)

正如错误所述,问题出在您输入的形状上。您需要转置[[1],[1],[1]]此输入,然后您将具有模型期望的形状。

所以npq = np.array([[1],[1],[1]]).transpose()现在将其提供给model.predict(npq)