Вызов K.eval () для input_tensor внутри пользовательской функции потерь keras? - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь преобразовать входной тензор в массив numpy внутри пользовательской функции потери keras, следуя инструкциям здесь .

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

"tenorflow.python.framework.errors_impl.InvalidArgumentError: Вы должны передать значение для тензора-заполнителя 'input_1' с помощью dtype float
[[Node: input_1= Placeholderdtype = DT_FLOAT, shape = [], _device = "/ job: localhost / replica: 0 / task: 0 / cpu: 0"]] "

Мне нужно преобразовать в массив Numpyпотому что у меня есть другие модели keras, которые должны работать на входе - я не показал эти строки ниже в joint_loss, но даже приведенный ниже пример кода вообще не работает.

import numpy as np
from keras.models import Model, Sequential
from keras.layers import Dense, Activation, Input
import keras.backend as K

def joint_loss_wrapper(x):
    def joint_loss(y_true, y_pred):
        x_val = K.eval(x)
        return y_true - y_pred
    return joint_loss


input_tensor = Input(shape=(6,))
hidden1 = Dense(30, activation='relu')(input_tensor)
hidden2 = Dense(40, activation='sigmoid')(hidden1)
out = Dense(1, activation='sigmoid')(hidden2)
model = Model(input_tensor, out)
model.compile(loss=joint_loss_wrapper(input_tensor), optimizer='adam')

1 Ответ

0 голосов
/ 28 января 2019

Я понял это! То, что вы хотите сделать, это использовать функциональный API для Keras.
Тогда ваши выходные данные подмоделей в виде тензоров могут быть получены как y_pred_submodel = submodel(x).
Это похоже на то, как слой Keras действует на тензор.
Манипулировать только тензорами в функции потерь. Это должно работать нормально.

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