Есть ли альтернатива использованию get_value внутри Keras.layers.Layer? - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь реализовать собственный слой Keras, и его поведение сложнее, чем просто matmul. Я пытаюсь реализовать это с помощью tf.keras.backend.get_value и tf.keras.backend.set_value. Это не может быть реализовано в предварительной обработке! К входу НЕ применяется джиттер! Он применяется после узкого места автоэнкодера! Пожалуйста, не отвечайте, предлагая вариант «применить при предварительной обработке».

class Jitter(Layer):
    def __init__(self, rate, **kwargs):
        super(Jitter, self).__init__(**kwargs)
        self.rate = rate

    def call(self, inputs, training=None):
        if training:
            p, s = self.rate / 2, 1 - self.rate
            x = K.get_value(inputs)
            y = np.zeros_like(x)
            for i in range(len(x)):
                y[i] = np.random.choice([x[max(i - 1, 0)], x[i], x[min(i + 1, len(x) - 1)]], p=[p, s, p])
            return K.variable(y)
        return inputs

...more code...

x = K.print_tensor(x, message='pre-Jitter')
x = Jitter(0.12)(x)
x = K.print_tensor(x, message='post-Jitter')

У меня 2 ошибки. Первая ошибка заключается в том, что в отличие от эта документация Keras , training всегда ложна, даже во время обучения. Если я удалю if training:, вторая ошибка заключается в том, что вызов K.get_value(inputs) вызывает эту ошибку:

(0) Invalid argument: You must feed a value for placeholder tensor 'input_1' with dtype float and shape [?,96,80]
     [[node input_1 (defined at :1) ]]

Похоже, что, хотя документация не ясна, Layer.build и Layer.call просто вызывается последовательно «во время компиляции». Ни то, ни другое не вызывается «во время выполнения», что может подразумеваться наличием параметра training. Это откровенно странно и сбивает с толку. Зачем добавлять параметр training, если его значение невозможно узнать при вызове функции?

Я думаю, что самый важный вопрос заключается в следующем: какая альтернатива использованию K.get_value для реализации нормализация временного джиттера, как описано в этой статье ?

...