При реализации пользовательской функции потерь в Keras мне требуется tf.Variable
с формой размера пакета моих входных данных (y_true, y_pred)
.
def custom_loss(y_true, y_pred):
counter = tf.Variable(tf.zeros(K.shape(y_true)[0], dtype=tf.float32))
...
Однако это приводит к ошибке:
You must feed a value for placeholder tensor 'dense_17_target' with dtype float and shape [?,?]
Если я фиксирую batch_size в значении:
def custom_loss(y_true, y_pred):
counter = tf.Variable(tf.zeros(batch_size, dtype=tf.float32))
...
, так что |training_set| % batch_size
и |val_set| % batch_size
равны нулю, все работает нормально.
Есть ли предложения, почему не работает присвоение переменной с размером пакета на основе формы ввода (y_true
и y_pred
)?
РЕШЕНИЕ
Я нашел удовлетворительное решение, которое работает.Я инициализировал переменную с максимально возможным размером batch_size (указанным во время сборки модели) и использовал K.shape(y_true)[0]
только для нарезки переменной.Таким образом, это работает отлично.Вот код:
def custom_loss(y_true, y_pred):
counter = tf.Variable(tf.zeros(batch_size, dtype=tf.float32))
...
true_counter = counter[:K.shape(y_true)[0]]
...