Поэтому я пытаюсь использовать модифицированную версию этого кода
(https://github.com/snf/keras-fractalnet)
, которая использует плотные слои 512, 128, 32, 8 вместо слоев свертки. Я полагаю, что оригинал использует (63,3,3), (128,3,3), (256,3,3), (512,3,3), (512,3,3). Поскольку используется 4 блока шириной 3, в моей версии используется 4536 узлов, если я прав. Кроме того, все слои используют активацию tanh, за исключением последней строки последнего блока.
Я работаю на Ubuntu 18.04 с 16 ГБ ОЗУ, но я заметил это после него (запускаю керасы и TF2) выполняет train_on_batch, доступная память уменьшается с 13232 по команде free -m до 9718 и продолжает уменьшаться в аналогичных количествах при каждом первом вызове train_on_batch после каждых 20 эпизодов.
Теперь я довольно новичок в Tensorflow, но сброс около 3 ГБ (если я правильно читаю) каждый раз, когда вызывается train_on_batch, кажется мне немного экстремальным, поэтому я надеялся, что кто-нибудь скажет мне, если мое число узлов выглядит немного экстремально? Или, возможно, мог бы указать мне правильное направление, чтобы искать вещи? Если хотите, я могу опубликовать свои коды, но я также попытался использовать модифицированную версию кода TRPO pat-coady, которая использует PyBullet для построения NN, что означает, что он довольно длинный, но при необходимости я могу хотя бы поделиться им на github.
Обновление: Вот гистограмма графика того, как выглядят входные данные. ![histogram of input data](https://i.stack.imgur.com/lIbX4.png)
Обновление 2:
Благодаря prouast меня указали в правильном направлении, но я все еще немного сбит с толку. Пытаясь переключиться на float16 вместо float32, я обнаружил, что при каждом вызове фрактала _net создается 1000 новых плотных слоев. Однако я смог увидеть это только через предупреждения, которые начали появляться в моем коде о том, что значения float32 и float16 используются одновременно. Поэтому я изменил код, чтобы инициализировать 20 плотных слоев один раз, а затем использовать их каждый раз, когда вызывается фрактал _net. Похоже, это работает, так как становится реже терять 2 ГБ ОЗУ на вызовы train_on_batch. Но это все еще происходит здесь и там.
Так что мой следующий вопрос: есть ли в любом случае отчет о подклассе модели, сколько плотных слоев в настоящее время используются и занимают ОЗУ? Я попытаюсь снова создать предупреждения float16 против предупреждений float32, потому что я забыл, как они создавались, но я предпочел бы иметь более прямой способ увидеть размер модели.
I проверил веса до и после вызова train_on_batch, и веса не обновляются, как я боялся.