У меня вопрос по поводу снижения скорости обучения в Керасе. Мне нужно понять, как работает параметр decay внутри оптимизаторов, чтобы перевести его в эквивалентную формулировку PyTorch.
Из исходного кода SGD я вижу, что обновление выполняется таким образом после каждого пакетного обновления:
lr = self.lr * (1. / (1. + self.decay * self.iterations))
Означает ли это, что после каждого пакетного обновления lr обновляется, начиная с его значения из предыдущего обновления или с его начального значения? Я имею в виду, какая из двух следующих интерпретаций является правильной?
lr = lr_0 * (1. / (1. + self.decay * self.iterations))
или
lr = lr * (1. / (1. + self.decay * self.iterations))
, где lr
- это значение, обновленное после предыдущей итерации, а lr_0
- это всегда начальная скорость обучения.
Если правильный ответ будет первым, это будет означать, что в моем случае скорость обучения снизится с 0,001 до 0,0002 после 100 эпох, тогда как во втором случае она снизится с 0,001 в районе 1e-230 после 70 эпох.
Просто, чтобы дать вам некоторый контекст, я работаю с CNN для решения проблемы регрессии из изображений, и мне просто нужно перевести код Keras в код Pytorch. До сих пор, используя вторую из вышеупомянутых интерпретаций, мне удается всегда только прогнозировать одно и то же значение, независимо от размера партии и ввода во время теста.
Заранее спасибо за помощь!