Почему тензорный поток потребляет столько памяти? - PullRequest
0 голосов
/ 30 апреля 2018
  • У меня есть простой CNN (4 слоя conv-pool-lrelu и 2 полностью связанных).
  • Я использую только TensorFlow на процессоре (без графического процессора).
  • У меня есть ~ 6 ГБ доступной памяти.
  • Мои партии состоят из 56 изображений размером 640x640 пикселей (<100 МБ). </li>

И TensorFlow потребляет больше, чем доступная память (очевидно, вызывая сбой программы).

Мой вопрос: почему TensorFlow требует столько памяти для работы моей сети? Я не понимаю, что занимает такое много места (возможно, кэширование данных несколько раз для оптимизации сверточных вычислений? Сохранение всех скрытых выходных данных для целей обратного распространения?). И есть ли способ предотвратить использование TensorFlow такого большого количества памяти?

Примечания:

  • Я не могу уменьшить размер пакета, я пытаюсь провести обучение с использованием нескольких экземпляров, поэтому мне нужно вычислить все свои патчи за один прогон.
  • Я использую AdamOptimizer
  • Все мои свертки - 5x5 окон, 1x1 шаг, с (от 1-го до последнего) функциями 32, 64, 128 и 256. Я использую негерметичные ReLU и пул 2x2 max. Слои ФК состоят из 64 и 3 нейронов.
  • Использование Ubuntu 16.4 / Python 3.6.4 / TensorFlow 1.6.0

1 Ответ

0 голосов
/ 30 апреля 2018

Как вы упомянули:

Все мои свертки 5x5 окон, 1x1 шаг, с (от 1-го до последний) 32, 64, 128 и 256 функций. Я использую вытекающие реле и 2x2 макс пул. Слои ФК состоят из 64 и 3 нейронов.

Итак, потребление памяти вашей сети выглядит следующим образом:

Input: 640x640x3 = 1200 (в КБ)

C1: 636x636x32 = 12,5 МБ (шаг = 1 обработано)

P1: 635x635x32 = 12,3 МБ (шаг = 1 обработано)

C2: 631x631x64 = 24,3 МБ

P2: 630x630x64 = 24,2 МБ

C3: 626x626x128 = 47,83 МБ

P3: 625x625x128 = 47,68 МБ

C4: 621x621x256 = 94,15 МБ

P4: 620x620x256 = 93,84 МБ

FC1: 64 = 0,0625 КБ (незначительно)

FC2: 3 = 0,003 КБ (незначительно)

Total for one image = ~ 358 МБ

For batch of 56 image = 56 x 358 ~ 19,6 ГБ

Вот почему ваша сеть не работает на 6 GB. Попробуйте с некоторыми higher stride или lower sized image установить его в 6 GB пробел. И это должно работать.

Вы можете обратиться к этому , чтобы лучше понять расчет потребления памяти.

...