Я прочитал еще несколько сообщений о том, что делать, когда вы наносите nan на потерю обучения/проверки. Я предполагаю, что моя проблема недостаточна в моей скорости обучения, хотя мне интересно, может ли кто-то просто взглянуть и согласиться/не согласиться.Тренировочные/валидационные потери Наные вопросы
Я следую за потрясающим сообщением в блоге here, но реализую в тензорном потоке. Достаточно легко преобразовать модель, но импульс и скорость обучения немного сложнее, и я думаю, что это проблема. У меня проблемы, когда я могу пройти столько эпох, прежде чем потеря скачет и нан. Модель, которую я использую, должна быть эквивалентна net4/5 в учебнике блога.
... Epoch /Time/Train Loss/Valid Loss/Learn Rate
Epoch[ 900]0:14:11 0.000116 0.001566 0.027701
Epoch[ 910]0:14:20 0.000107 0.001565 0.026593
Epoch[ 920]0:14:29 0.000098 0.001564 0.026593
Epoch[ 930]0:14:39 0.000088 0.001567 0.026593
Epoch[ 940]0:14:48 0.000080 0.001567 0.026593
Epoch[ 950]0:14:58 0.000069 0.001578 0.026593
Epoch[ 960]0:15: 7 0.000072 0.001600 0.026593
Epoch[ 970]0:15:17 0.000105 0.001664 0.026593
Epoch[ 980]0:15:26 0.000221 0.001799 0.026593
Epoch[ 990]0:15:35 0.000456 0.002045 0.026593
Epoch[1000]0:15:45 0.000955 0.002473 0.025530
Epoch[1010]0:15:54 0.002148 0.003415 0.025530
Epoch[1020]0:16: 4 0.008455 0.009337 0.025530
Epoch[1030]0:16:13 0.009042 0.010412 0.025530
Epoch[1040]0:16:22 nan nan 0.025530
Так что я видел это, и кажется, что это просто случай необходимости снизить скорость обучения в этой точке. Это не очень хорошо сочетается с номерами обучающих программ, хотя это вызывает беспокойство.
Следующий шаг в блоге добавляет исключение. Я уже реализовал его в модели, где я просто передаю тензор bool, чтобы сказать это, если его обучение или нет. Таким образом, с отключением я получаю nans менее чем за 150 эпох, и я не уверен, в чем проблема. Поскольку предполагается, что это будет систематизировать систему, я не ожидал, что это произойдет.
... Epoch /Time/Train Loss/Valid Loss/Learn Rate
Epoch[ 0]0: 0: 1 0.025211 0.025614 0.045000
Epoch[ 10]0: 0:11 0.003496 0.004075 0.045000
Epoch[ 20]0: 0:22 0.003202 0.003742 0.045000
Epoch[ 30]0: 0:32 0.003169 0.003712 0.045000
Epoch[ 40]0: 0:42 0.003084 0.003605 0.045000
Epoch[ 50]0: 0:53 0.002976 0.003507 0.045000
Epoch[ 60]0: 1: 3 0.002891 0.003437 0.045000
Epoch[ 70]0: 1:14 0.002795 0.003381 0.045000
Epoch[ 80]0: 1:24 0.002648 0.003317 0.045000
Epoch[ 90]0: 1:34 0.002408 0.003181 0.011250
Epoch[ 100]0: 1:45 0.002267 0.003107 0.011250
Epoch[ 110]0: 1:55 0.001947 0.003003 0.011250
Epoch[ 120]0: 2: 6 0.004507 0.005768 0.011250
Epoch[ 130]0: 2:16 nan nan 0.011250
Любые мысли о том, какие могут быть проблемы с включением отсева? Я построил ту же самую модель afaik, хотя даже без нан-проблем мои потери не так хороши.
EDIT:
Так что у меня мои свертка слои созданы неправильно. Я просмотрел учебник, который имеет это.
InputLayer (None, 1, 96, 96) produces 9216 outputs
Conv2DCCLayer (None, 32, 94, 94) produces 282752 outputs
MaxPool2DCCLayer (None, 32, 47, 47) produces 70688 outputs
Conv2DCCLayer (None, 64, 46, 46) produces 135424 outputs
MaxPool2DCCLayer (None, 64, 23, 23) produces 33856 outputs
Conv2DCCLayer (None, 128, 22, 22) produces 61952 outputs
MaxPool2DCCLayer (None, 128, 11, 11) produces 15488 outputs
DenseLayer (None, 500) produces 500 outputs
DenseLayer (None, 500) produces 500 outputs
DenseLayer (None, 30) produces 30 outputs
и я только что обновил мой, так что я думаю, что теперь это то же самое.
conv: input size: (?, 96, 96, 1)
pool: input size: (?, 94, 94, 32)
conv: input size: (?, 47, 47, 32)
pool: input size: (?, 46, 46, 64)
conv: input size: (?, 23, 23, 64)
pool: input size: (?, 22, 22, 128)
fc: input size before flattening: (?, 11, 11, 128)
fc: input size: (?, 15488)
fc: input size: (?, 500)
fc: input size: (?, 500)
out: (?, 30)
Все еще не работает. Когда выпадение включено на слоях свертки и первом полностью подключенном слое, модель длится менее 50 эпох, а затем ошибка проходит через крышу. Даже при очень малых уровнях обучения проблема все еще возникает.
Epoch[ 0]0: 0: 1 0.029732 0.030537 0.030000
Epoch[ 10]0: 0:11 0.004211 0.004986 0.030000
Epoch[ 20]0: 0:20 0.003013 0.003530 0.004500
Epoch[ 30]0: 0:30 5.250690 5.426279 0.004500
Epoch[ 40]0: 0:40 nan nan 0.000675
И это выглядит как метод не недоучка сломан и делает то же самое> _> ...
EDIT: Я думаю, что я понял, вопрос. Я использую алгоритм оптимизации импульсов, который увеличивает импульс во времени. Я думаю, что небольшое увеличение от этого вызвало перерегулирование. В настоящее время работает без отсева, но я получаю лучшие результаты, чем раньше, имея постоянный импульс. После того, как я запустил 1000 эпох, я собираюсь проверить его с выпадением
Запуск с выпадением сейчас, и он не взрывается, поэтому я думаю, что исправил проблему.
Итак, я нашел в моей модели большой вопрос.Я не настроил параметры уровня свертки правильно, поэтому я собираюсь пройти пропуск и убедиться, что все правильно, а затем посмотреть, есть ли у меня все те же проблемы. – Exuro