Как этот код регуляризации влияет на потери? - PullRequest
0 голосов
/ 11 апреля 2019

Я видел некоторое обучение с использованием кода нейронной сети свертки.Я не понимаю следующую часть этого кода.

loss = tf.reduce_sum(tf.nn.l2_loss(tf.subtract(train_output, train_gt)))
    for w in weights:
        loss += tf.nn.l2_loss(w)*1e-4

Первая строка понятна.Он сравнивает полученный результат с меткой, а затем представляет квадрат разницы.И это определение потери.Но я не понимаю последний код: for w in weights: !!

Здесь w - это список из 10 весов и смещений.Так что len(w) это 20(w10 + b10).Но почему этот код вычисляет квадрат w и умножает его на 1e-4, чтобы добавить к потере?

Это необходимо для курса обучения?

1 Ответ

2 голосов
/ 11 апреля 2019

Это формула, которая у вас есть:

enter image description here

  1. tf.subtract(train_output, train_gt) выполняет поэлементное вычитание между двумя тензорами train_output и train_gt.
  2. tf.nn.l2_loss(tf.subtract(train_output, train_gt)) вычисляет l2-норму полученного тензора из (1).
  3. tf.reduce_sum(tf.nn.l2_loss(tf.subtract(train_output, train_gt))) выполняет уменьшение суммы по всем измерениям (например, несколько выборок в партии, которые у вас есть - N выборок в формуле).
  4. for w in weights: loss += tf.nn.l2_loss(w)*1e-4 добавляет член l2-регуляризации (квадрат суммы всех l2-нормализованных весов в вашей модели).

Но почему этот код вычисляет квадрат w и умножает его на 1e-4, чтобы добавить к потере? Это необходимый курс для обучения?

Он наказывает большие значения ваших весов и ограничивает ваше решение (с точки зрения весов) какой-то ограниченной областью. Это необходимо? Иногда да, а иногда нет. Нет короткого ответа. Начните с чтения этого:

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