Проблема с пользовательской функцией потерь: использование tf.Tensor в качестве Python bool недопустимо при выполнении Graph - PullRequest
1 голос
/ 21 июня 2020

Я пытаюсь реализовать настраиваемую потерю по этой формуле:

введите описание изображения здесь Это первый шаг к использованию реальной пользовательской функции потерь для моей модели. Набор данных - Keras Cifar10. Реализация кажется правильной, но я получаю эту ошибку:

OperatorNotAllowedInGraphError: using a tf.Tensor as a Python bool is not allowed in Graph execution. Use Eager execution or decorate this function with @tf.function.

def custom_loss(y_true, y_pred):

  #  −(?log(?)+(1−?)log(1−?))

  return tf.sqrt(tf.divide(tf.reduce_sum(tf.pow(tf.subtract(y_true, y_pred),2.0)),tf.cast(tf.size(y_true), tf.float32)))

Я даже попытался использовать свои train_labels (которые unit8 to float32), но это не помогло. Любая помощь будет принята с благодарностью.

Моя модель представляет собой простую 5-слойную модель CNN:

model = keras.models.Sequential([keras.layers.Conv2D(filters= 3,kernel_size=(3,3),activation= keras.activations.relu, input_shape= (32,32,3)),
                                 keras.layers.MaxPool2D(pool_size= (2,2)),
                                 keras.layers.Conv2D(filters= 3,kernel_size=(3,3),activation= keras.activations.relu),
                                 keras.layers.MaxPool2D(pool_size= (2,2)),
                                 keras.layers.Flatten(),
                                 keras.layers.Dense(units= 64, activation= keras.activations.relu),
                                 keras.layers.Dense(units= 10, activation= keras.activations.softmax)])

model.compile(loss= classification_loss(train_labels,model.layers[-1].output),optimizer= keras.optimizers.Adam(), metrics=['accuracy'])
model.fit(x= train_images, y= train_labels,epochs=10)

1 Ответ

0 голосов
/ 21 июня 2020

используемая формула u - это ROOT MSE (RMSE)

def RMSE(y_true, y_pred):
    
    return tf.sqrt(tf.reduce_mean(tf.square(y_true-y_pred)))

здесь рабочий пример ...

def RMSE(y_true, y_pred):
    
    return tf.sqrt(tf.reduce_mean(tf.square(y_true-y_pred)))

X = np.random.uniform(0,1, (1000,10))
y = np.random.uniform(0,1, 1000)

inp = Input((10,))
x1 = Dense(32, activation='relu')(inp)
x2 = Dense(16, activation='relu')(x1)
out = Dense(1)(x2)

m = Model(inp, out)
m.compile('adam', RMSE)
m.fit(X,y, epochs=5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...