Обрезать y_true в пользовательской потере Keras (TF backend) - PullRequest
0 голосов
/ 30 апреля 2018

Я хочу устранить влияние, которое необходимость дополнения оказывает на мои последовательности с точки зрения обучения, поэтому я пытаюсь удалить конечные нули, которые могут иметь последовательности, перед вычислением MSE. Остановка градиента таким способом кажется мне лучше, чем попытка кормить последовательности различной длины, когда дело доходит до стабильности.

Однако мой код выдает разные ошибки для разных подходов. Для этого подхода, который показался мне наиболее перспективным, он AttributeError: 'NoneType' object has no attribute 'dtype' выброшен из K.update_sub(i,1)

def truncated_MSE(y_true, y_pred):
    i = K.int_shape(y_true)[0]
    i = K.update_sub(i,1)
    while y_true[i][0] == 0 and y_pred[i][1] == 0:
        i = K.update_sub(i,1)
    y_true = y_true[:i]
    y_pred = y_pred[:i]

    return K.mean(K.square(y_pred - y_true), axis=-1)   

PS: Если это плохой стиль кодирования на Python, я с удовольствием выучу!

1 Ответ

0 голосов
/ 30 апреля 2018

Ошибка возникает из-за применения внутренних функций Keras к обычным целым числам вместо объектов Tensor.

i = K.int_shape(y_true)[0]

Эта строка выдает int и поэтому не может использоваться в вызове K.update_sub. Вы можете, однако, просто использовать обычные вычисления с целыми числами Python.

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