Невозможно понять формат тестовых данных при оценке модели обучения - PullRequest
0 голосов
/ 20 сентября 2019

Я тренирую регрессионную модель, которая принимает приближенные веса для уравнения: 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, соответствующего I-му значению R, B и G.

    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 плотныйслой (скрытый слой) с двумя нейронами и выходной слой (выходной) с одним нейроном.

    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 Ответ

1 голос
/ 20 сентября 2019

Как говорит ошибка, проблема в вашей форме ввода.Вам нужно транспонировать [[1],[1],[1]] этот вход, тогда у вас будет форма, ожидаемая моделью.

, поэтому npq = np.array([[1],[1],[1]]).transpose() и теперь укажите это model.predict(npq)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...