Керас входной размерный слой - PullRequest
0 голосов
/ 27 мая 2020

Проблема

Я использую API модели для создания сети Keras, которая принимает два входа и один выход. При обучении сети я получаю следующую ошибку:

Ошибка при проверке ввода модели: список массивов Numpy, которые вы передаете своей модели, не соответствует ожидаемому размеру модели. Ожидалось увидеть 2 массива (ов), но вместо этого получен следующий список из 1 массива:

Несмотря на эту ошибку, входной массив X имеет форму (2,8), а выходной y массив имеет форму (1,4).

То, что уже пробовали

Есть ряд похожих вопросов по SO, однако их решения в основном вращаются вокруг обеспечения X и y - это Numpy массивы. Как видно из моей реализации, я уже сделал это. Таким образом, я не верю, что это повторяющийся вопрос.

Реализация

Я определил модель следующим образом:

    opt = Adam(lr = alpha)
    input = Input(shape=(input_dim_,))
    delta = Input(shape=[1])
    l1 = Dense(units = 1024, input_dim = input_dim_, activation = "relu")(input)
    l2 = Dense(units=512, activation="relu")(l1)

    def loss_function (y,y_pred):
        y_pred = K.clip(y_pred,1e-8,1-1e-8)
        return K.sum(-y*K.log(y_pred)*delta)

    if model_type == "actor":
        out = Dense(units = output_dim_, activation="softmax")(l2)
        model = Model(input=[input,delta], output = [out])
        model.compile(loss = loss_function,optimizer=opt)

И поезд модель, выполнив следующие действия:

X = [s_t,delta]
X = np.array(X)
actor.fit(X,y,verbose=0)

1 Ответ

1 голос
/ 27 мая 2020

Вы неправильно передаете данные в соответствие:

actor.fit(X,y,verbose=0)

Здесь X должен быть список, содержащий два numpy массивов, и каждый numpy массив соответствует одному из ваших входов ( у вас есть модель с двумя входами): Значит, это должно быть примерно так:

X = [np.array(s_t), np.array(delta)]
actor.fit(X, y, verbose=0)

Тогда должно работать.

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