Могу ли я выбрать обновление весов в своей нейронной сети вручную, чтобы размер пакета был практически неограниченным? - PullRequest
0 голосов
/ 15 февраля 2019

Я загружаю большие изображения в свой CNN, и по какой-то причине преобразование изображений в оттенки серого или уменьшение размера моей сети никак не влияет на мой максимальный размер пакета.Если я делаю что-то больше, чем 4, у меня заканчивается память на моем 16 ГБ процессоре.Я загружаю каждую партию за раз, но у меня все еще возникают проблемы с памятью.Мне было интересно, если бы вместо этого, используя Tensorflow (или Keras с бэкэндом TF предпочтительно), я мог загружать по одному изображению за раз, обновляя градиентную аппроксимацию и с каждым изображением, и обновляя только веса после каждого пакета.

Теоретически, это должно позволить мне сделать размер пакета настолько большим, насколько я хочу, при условии, что у меня достаточно памяти для подачи одного изображения за раз.Я ошибаюсь в этом мышлении?Есть ли какие-то встроенные функции для Keras и Tensorflow, которые мне не хватает, которые могли бы помочь с этим?Спасибо!

1 Ответ

0 голосов
/ 15 февраля 2019

Вам нужно использовать пакетный генератор.С Керасом см model.fit_generator.

Определите ваш генератор аналогично (взятому из документов):

def generate_arrays_from_file(path):
    while True:
        with open(path) as f:
            for line in f:
                # create numpy arrays of input data
                # and labels, from each line in the file
                x1, x2, y = process_line(line)
                yield ({'input_1': x1, 'input_2': x2}, {'output': y})

А затем установите генератор в вашу модель.

model.fit_generator(generate_arrays_from_file('/my_file.txt'),
                    steps_per_epoch=10000, epochs=10)

Чтобы избежать проблем с памятью,передайте аргумент max_queue_size=1 в fit_generator, чтобы в очередь загружался только один пакет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...