Я пытаюсь обучить модель, которая принимает n значений в качестве входных и выходных n значений. Проблема в том, что n может быть от 1 до 700. Поэтому я строю сеть с 700 в качестве входа и 700 в качестве выхода. Дополнительные входы и выходы установлены на ноль.
При обучении модели мне не важно, точны ли дополнительные результаты или нет. Поэтому я попытался определить свою собственную функцию потерь следующим образом:
def mse_truncate(y_true, y_pred):
def fn(x):
return tf.cond(x < 0.01,lambda: 0.0,lambda: 1.0)
#Ignore the square error if y_true[i] is near zero
sgn = tf.map_fn(fn,y_true)
return K.mean(sgn * K.square(y_true-y_pred),axis=-1)
Эта функция работает на консоли.
Но когда я компилирую модель, я получаю сообщение об ошибке:
model.compile(optimizer='sgd',loss=mse_truncate, metrics=['accuracy'])
ValueError: Shape must be rank 0 but is rank 1 for 'loss_5/dense_2_loss/map/while/cond/Switch' (op: 'Switch') with input shapes: [?], [?].
Может кто-нибудь сказать мне, что здесь не так?
Или есть более эффективные способы обработки ввода и вывода переменной длины?
Примечание:
Более подробно о проблеме: входные данные представляют собой последовательность (длина <= 700), а выходные данные - это расстояние между первым элементом и каждым элементом в последовательности. </p>