Как повторно использовать изображения, уже загруженные в память в CNN Keras? - PullRequest
0 голосов
/ 15 апреля 2019

Фон

Я строю нейронную сеть с изображениями и другими числовыми данными в качестве входных данных. Я использую Keras с бэкэндом Tensorflow. Сеть имеет 2 входные части:
1) изображения с несколькими слоями конвул
2) числовые данные, за которыми следуют плотные слои

Количество уникальных изображений мало, но данные для обучения велики.
Большинство изображений появляются несколько раз во входных данных.
(Уникальное количество изображений: около 2000
данные обучения: 500 000 строк)

Пример:

|---------------------|------------------|  
|      Image_id       | Other data cols  |  
|---------------------|------------------|  
|          1          |         1        |  
|---------------------|------------------|  
|          1          |         2        |  
|---------------------|------------------|  
|          1          |         3        |  
|---------------------|------------------|  
|          2          |         4        |  
|---------------------|------------------|  
|          2          |         5        |  
|---------------------|------------------|  

Мой вопрос:

Есть ли способ повторно использовать данные изображения, уже находящиеся в памяти, во время тренировки, вместо создания огромного массива со всеми соответствующими данными изображения?

Обычный подход будет выглядеть примерно так:

scaled pixel values for image 1 - other data 1  
scaled pixel values for image 1 - other data 2  
scaled pixel values for image 1 - other data 3  
...  
scaled pixel values for image 1 - other data 1000  

Как вы можете видеть, этот подход приведет к созданию массива с повторяющимися данными изображения, который будет занимать слишком много памяти.

Удивительно сложно найти подобные случаи в сети. Спасибо за любой совет.

1 Ответ

1 голос
/ 15 апреля 2019

Вы можете сделать это, используя пользовательский класс Data Geberator в Keras.Взгляните на здесь , чтобы понять, как это сделать.Что вам нужно будет изменить здесь

  1. Загрузите изображения один раз и сохраните их в словаре ID(string)-data(numpy array).
  2. Передайте этот словарь (data_dict) в __init__
  3. В __data_generation использовать X[i,] = data_dict[ID]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...