Tensorflow: как использовать настраиваемый слой, чтобы узнать сдвиг или смещение в последовательных данных? - PullRequest
0 голосов
/ 17 июня 2020

Скажем, у меня есть проблема, когда входы представляют собой последовательность длины 100, а желаемые выходы - последовательность длины 70, где выходы представляют собой сдвинутую версию входов. Я могу настроить потерю MSE, которая по существу оценивается как 0, когда выучен правильный сдвиг. Однако, как мне узнать параметр для правильного сдвига?

Я пробовал создать супер-простой слой «сдвига» (пока игнорируя неотрицательные ограничения):

class ShiftLayer(layers.Layer):
    def __init__(self):
        super(ShiftLayer, self).__init__()
        self.shift = tf.Variable(1, dtype='int32', trainable=True)

    def call(self, inputs):
        #return tf.slice(inputs, [self.shift], [70]) # Also doesn't work
        return inputs[self.shift:(70+self.shift)]

Что дает следующую ошибку:

ValueError: не предусмотрены градиенты для любой переменной: ['Variable: 0'].

Как я понимаю, применение сдвига через операцию нарезки не обеспечивает способ распространения градиентов от потери MSE. Есть ли способ переопределить проблему, чтобы она работала? Бонусные баллы за повторную выборку, которая допускает нецелочисленные значения сдвига!

Спасибо!

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