Загрузка с КПП Керас - PullRequest
       0

Загрузка с КПП Керас

1 голос
/ 05 апреля 2020

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

filepath = "project_model.hdh5"

checkpoint = ModelCheckpoint("project_model.hdf5", monitor='loss', verbose=1,
    save_best_only=False, mode='auto', period=1)

Затем я использовал следующие коды для запуска обучения.

for _ in range(20):
    for j in range(len(mfcc_data_padded_transposed[j])):
        batch_input=[mfcc_data_padded_transposed[j]]
        batch_input = np.array(batch_input)
        batch_input = batch_input/np.max(batch_input)
        batch_output = [y_labels_mfcc[j]]
        batch_output = np.array(batch_output)
        input_lengths2 = input_lengths_mfcc[j]
        label_lengths2 = label_lengths_mfcc[j]
        input_lengths2 = np.array(input_lengths2)
        label_lengths2 = np.array(label_lengths2)
        inputs = {'the_input': batch_input,
         'the_labels': batch_output,
         'input_length': input_lengths2,
         'label_length': label_lengths2}
        outputs = {'ctc': np.zeros([1])} 
        model.fit(inputs, outputs, epochs=1, verbose =1, callbacks=[checkpoint])

Я сделал выше, чтобы поэкспериментировать с контрольной точкой, потому что я не уверен, правильно ли я ее использую.

Теперь это обучение проводится с коэффициентом обучения 0,001. Теперь, после некоторого запуска обучения l oop, если я решу изменить скорость обучения, скажем, 0,002, придется ли мне запускать все коды, которые относятся к моделям (структура модели, затем оптимизация и т. Д.) 1011 *)? И скажите, что я это сделал, как мне загрузить из предыдущего состояния, когда я прекратил тренировку? Другой вопрос: если я перезапущу P C и запустлю ячейку jupyter с кодами контрольных точек, которые я поделился здесь ранее, это заменит ранее сохраненный файл? Какой идеальный способ загрузить сохраненные файлы и веса и возобновить обучение оттуда? Причина, по которой я спрашиваю, заключается в том, что, похоже, когда я следовал документации Keras, она только начиналась с самого начала.

1 Ответ

1 голос
/ 05 апреля 2020

Теперь, после того, как я на некоторое время проведу тренировку l oop, если я решу изменить скорость обучения на .002, мне придется запустить все коды, которые относятся к моделям (структура модели, затем оптимизация и т. д. c)?

Вы можете обновить скорость обучения либо во время тренировки, либо после загрузки вашей модели.

Помните, что обучение Скорость не принадлежит архитектуре модели, она относится к оптимизатору (который назначается при компиляции модели). Скорость обучения - это гиперпараметр, который регулирует величину обновления веса во время градиентного спуска (представленную как alpha ниже):

enter image description here

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

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

В Keras у вас есть выбор сохранения / загрузки всей модели (которая включает архитектуру, веса, состояние оптимизатора или только веса). или только архитектура (источник) .

Для сохранения / загрузки всей модели :

from keras.models import load_model

model.save('my_model.h5')
model = load_model('my_model.h5')

Для сохранения / загрузки только модели weights :

model.save_weights('my_model_weights.h5')
model.load_weights('my_model_weights.h5')

Вы также можете назначить пользовательский объект во время загрузки модели:

model = load_model(filepath, custom_objects={'loss': custom_loss})

Другой вопрос, если я перезапущу P C и запустите ячейку jupyter с кодами контрольных точек, которые я здесь ранее поделился. Заменит ли это ранее сохраненный файл?

Зависит от пути к файлу, используемого в контрольной точке: «если filepath равен весам. {эпоха» : 02d} - {val_loss: .2f} .hdf5, тогда контрольные точки модели будут сохранены с номером эпохи и потерей проверки в имени файла ". Таким образом, если вы используете уникальное форматирование для пути к файлу, вы можете избежать перезаписи ранее сохраненных моделей. source

Какой идеальный способ загрузить сохраненные файлы и веса и возобновить обучение оттуда?

Пример:

# Define model
model = keras.models.Sequential()

model.add(L.InputLayer([None],dtype='int32'))
model.add(L.Embedding(len(all_words),50))
model.add(keras.layers.Bidirectional(L.SimpleRNN(5,return_sequences=True)))

# Define softmax layer for every time step (hence TimeDistributed layer)
stepwise_dense = L.Dense(len(all_words),activation='softmax')
stepwise_dense = L.TimeDistributed(stepwise_dense)
model.add(stepwise_dense)

import keras.backend as K

# compile model with adam optimizer
model.compile('adam','categorical_crossentropy')

# print learning rate
print(f"Model learning rate is: {K.get_value(model.optimizer.lr):.3f}")

# train model
model.fit_generator(generate_batches(train_data), len(train_data)/BATCH_SIZE,
                    callbacks=[EvaluateAccuracy()], epochs=1)

# save model (weights, architecture, optimizer state)
model.save('my_model.h5')

# delete existing model
del model

Результаты

Model learning rate is: 0.001
Epoch 1/1
1341/1343 [============================>.] - ETA: 0s - loss: 0.4288
Measuring validation accuracy...
Validation accuracy: 0.93138
from keras.models import load_model

# create new adam optimizer with le-04 learning rate (previous: 1e-03)
adam = keras.optimizers.Adam(lr=1e-4)

# load model
model = load_model('my_model.h5', compile=False)

# compile model and print new learning rate
model.compile(adam, 'categorical_crossentropy')
print(f"Model learning rate is: {K.get_value(model.optimizer.lr):.4f}")

# train model for 3 more epochs with new learning rate
print("Training model: ")
model.fit_generator(generate_batches(train_data),len(train_data)/BATCH_SIZE,
                    callbacks=[EvaluateAccuracy()], epochs=3,)

Результаты :

Model learning rate is: 0.0001
Training model: 
Epoch 1/3
1342/1343 [============================>.] - ETA: 0s - loss: 0.0885
Measuring validation accuracy...
Validation accuracy: 0.93568

1344/1343 [==============================] - 41s - loss: 0.0885    
Epoch 2/3

1342/1343 [============================>.] - ETA: 0s - loss: 0.0768
Measuring validation accuracy...
Validation accuracy: 0.93925

1344/1343 [==============================] - 39s - loss: 0.0768    
Epoch 3/3
1343/1343 [============================>.] - ETA: 0s - loss: 0.0701
Measuring validation accuracy...
Validation accuracy: 0.94180

Больше информации на FAQ по Keras для конкретных c случаев.

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