Keras Custom Layer для изменения меток вывода - PullRequest
1 голос
/ 27 июня 2019

Я хочу написать собственный слой в Keras, который изменяет как входные, так и соответствующие выходные метки сети. Можно ли изменить выходные метки?

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

Вот пример того, что я имею / хочу:

from keras import layers
import numpy as np

class MyLayer(layers.Layer):
    def call(self, x):
        a = np.random.randint(0, 5)
        new_x = x + a
        new_y = y + a # <-- how can I do this?
        return new_x

Можно ли вообще изменить выходные метки во время тренировки?

Ожидаемый результат будет следующим:

  • Допустим следующий тренировочный набор:
X = [[1, 2, 3], [4, 5, 6]]
Y = [1, 2]
  • Во время обучения вход и метки могут быть изменены, чтобы быть похожими (с разными a в каждой эпохе
a = 2
X = [[3, 4, 5], [6, 7, 8]]
Y = [3, 4]

1 Ответ

1 голос
/ 27 июня 2019

Короткий ответ, вероятно, «Нет, не так просто - и вы, вероятно, не хотите этого делать».

Более длинный ответ:

Подумайте, что происходитво время тренировки.С огромным упрощением можно сказать, что мы делаем что-то неопределенно похожее на:

y_pred = model(x_train)
loss = compute_loss(y_pred, y_train)
back_propagate_and_update_gradients_through_model(loss_operations)

тогда, когда мы обучим нашу модель, на умозаключении мы делаем что-то вроде:

predictions = model(x_new)

Помните на умозаключенииу нас нет доступа ни к каким ярлыкам!Поэтому для модели не имеет особого смысла сворачивать какие-либо метки.

Было бы намного лучше (и это вполне обычное явление) разбирать любые метки либо в конвейере предварительной обработки, либо в крайнем случае., в пользовательской функции потерь:

def my_loss(y_true, y_pred):
   y_pred_wrangled = ## do your wrangling here
   return tf.keras.losses.{your_prefered_loss_fn}(y_true, y_pred_wrangled )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...