Я пытаюсь создать систему обнаружения ключевых точек с помощью Keras. У меня есть модель, подобная UNet, с серией сверток, пакетной нормализацией и максимальным объединением, за которыми следует симметричная серия слоев повышающей выборки, свертки и пакетной нормализации (и пропуска соединений). Когда у меня есть 100 экземпляров, я могу без проблем вызвать model.fit(). Однако, если я оставлю модель той же, но использую 500 экземпляров, Keras выйдет из строя с исключением OOM. Почему это происходит и могу ли я что-нибудь сделать, чтобы это исправить?
Вот (как я думаю) соответствующая часть кода, в которой я вызываю model.fit :
Код: Выделить всё
model = build_model(
filters=50,
filter_step=1,
stages=5,
stage_steps=1,
initial_convolutions=0,
stacks=1,
)
print(model.summary())
dataset = tf.data.Dataset.from_tensor_slices((X, y))
dataset = dataset.batch(1)
model.fit(
dataset,
epochs=2**7,
callbacks=[
EarlyStopping(monitor="loss", patience=5, min_delta=1e-7, start_from_epoch=10),
LearningRateScheduler(step_decay)
],
)
и y — это массивы Numpy следующих форм:
- : (100, 1024, 1024, 3)
- : (100, 1024, 1024)
100 — размер набора данных. Если я увеличу это значение до 500 (или более), я получу исключение нехватки памяти. Мне кажется, что Керас, возможно, пытается загрузить весь набор данных в память, несмотря на использование from_tensor_slices и пакетного(1), поэтому я явно что-то не понимаю.
Подробнее здесь:
https://stackoverflow.com/questions/770 ... e-no-probl