Мне нужна функция потери Keras. Следующий код работает с функцией потерь loss2 , но не использует функцию потерь loss1 . Я получаю ошибки как
OperatorNotAllowedInGraphError: использование tf.Tensor
в качестве Python bool
не допускается при выполнении графика. Используйте Eager для выполнения или украсьте эту функцию с помощью @ tf.function.
Я украсил функцию с помощью @ tf.function, но она не работает.
import numpy as np
from keras import backend as K
from keras.models import Sequential
from keras.layers import Dense, LeakyReLU
def individual_model(keys, labels):
model = Sequential()
size = 32
model.add(Dense(32, input_dim=1))
model.add(LeakyReLU())
for i in range(2):
model.add(Dense(size))
model.add(LeakyReLU())
model.add(Dense(1))
model.compile(optimizer='adam', loss=my_loss, metrics=[
my_loss])
model.fit(keys, labels, epochs=256, batch_size=32, verbose=1)
return model
def loss1(v):
if v<0:
return -100 * v
else:
return v
def loss2(v):
return v*v
def my_loss(y_true, y_pred):
return K.map_fn(loss1,y_true-y_pred) #with loss2 this works
x=np.random.exponential(100,1000)
x.sort()
labels=np.arange(0,1000)
m=individual_model(x,labels)