передача входного слоя вместе с другой последовательной моделью в пользовательскую функцию потерь - PullRequest
0 голосов
/ 22 апреля 2019

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

здесь

Пользовательская функция потерь Keras: доступ к текущему шаблону ввода

и здесь

https://datascience.stackexchange.com/questions/25029/custom-loss-function-with-additional-parameter-in-keras

, но я также хочу добавить вывод второй модели в функцию потерь.

Похоже, ошибка исходит от v.predict (х).Сначала TensorFlow выдает ошибку, подобную ValueError: при использовании тензоров данных в качестве входных данных для модели необходимо указать аргумент steps.

Поэтому я пытаюсь добавить шаги arg v.predict (x, steps = n) где n некоторое целое число, и я получаю AttributeError: у объекта 'Tensor' нет атрибута 'numpy'

X = некоторый массив np.random Y = некоторая функция X плюс шум

def build_model():
    il = tf.keras.Input(shape=(2,),dtype=tf.float32)
    outl = kl.Dense(100,activation='relu')(il)
    outl = kl.Dense(50,activation='relu')(outl)
    outl = kl.Dense(1)(outl)
    return il,outl

def f(X,a):
    return (X[:,0:1] + theta*a)*a

def F(x,a):
    eps = tf.random.normal(tf.shape(x),mean=loc,stddev=scale)[:,0:1]
    z = tf.stack([x[:,0:1] + theta*a + eps,x[:,1:] - a],axis=1)[:,:,0]
    return z

def c_loss(x=None,v=None):
    def loss(y_true,y_pred):
        xp = F(x,y_pred)
        return kb.mean(f(x,y_pred) + v.predict(xp)) 
    return loss

v_in,v_out = build_model()
v_model = tf.keras.Model(inputs=v_in,outputs=v_out)
v_model.compile(tf.keras.optimizers.Adam(),loss='mean_squared_error')
v_model.fit(x=X,y=Y)

c_in,c_out = build_model()
c_model = tf.keras.Model(inputs=c_in,outputs=c_out)
c_model.compile(tf.keras.optimizers.Adam(),loss=c_loss(x=c_in,v=v_model))
c_model.fit(x=X,y=Y_dummy)

В идеале я просто ожидаю, что вызов c_model.fit () создаст нейронную сеть, чтобы минимизировать функционал f (x, a) + v (x).

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