Я использую keras для личного проекта, очень близкого к реализации word2vec с использованием keras. У меня все готово, включая модель, но всякий раз, когда я пытаюсь фактически обучить модель в пакетном режиме (в моем случае, пары одного горячего закодированного внедрения элементов), даже если я использую _yield вместо _return, он все равно выдает ошибку «ResourceExhaustedError: OOM при выделении тензора ... ".
Я дошел до того, что даже пробую тренироваться на каждой паре отдельно (он же размер партии = 1), но все равно не могу заставить это работать. Любая помощь будет оценена по достоинству.
Дополнительная информация о модели, которую я пытаюсь обучить: 1) No of items = 3115 2) Trainset состоит из пар элементов в соответствии с выигрышем размером, указанным в item_list
Вот код:
def create_all_data(all_data, items_size, window_size, shuffle):
all_couples = []
for item_list in all_data:
couples = create_data(item_list, window_size, shuffle)
all_couples.extend(couples)
if all_couples:
X, Y = zip(*all_couples)
X = np_utils.to_categorical(X, items_size+1)
Y = np_utils.to_categorical(Y, items_size+1)
yield X,Y
model = Sequential()
model.add(Dense(units = num_hidden_units, input_shape = (items_size+1,)))
model.add(Dense(units = items_size+1, activation= 'softmax'))
model.compile(loss='categorical_crossentropy', optimizer = 'rmsprop')
num_epochs = 20
win_size = 5
train_loss = []
for epoch in range(num_epochs):
for x,y in create_all_data(trainset, items_size, win_size, True):
loss = model.train_on_batch(x, y)
train_loss.append(loss)
print(epoch, loss)
И я получаю ошибку:
ResourceExhaustedError: OOM при выделении тензора с формой [704,3116] и типом float on / job: localhost / replica: 0 / task: 0 / device: CPU: 0 by allocator cpu [[{{node loss_2 / density_6_loss / clip_by_value / Minimum }} = Минимум [T = DT_FLOAT, _class = ["loc: @train ... ad / Reshape"], _device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0"] ( loss_2 / density_6_loss / truediv, loss_2 / density_6_loss / sub)]] Подсказка: если вы хотите видеть список выделенных тензоров, когда происходит OOM, добавьте report_tensor_allocations_upon_oom в RunOptions для получения информации о текущем распределении.