亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從凱拉斯檢查點加載

從凱拉斯檢查點加載

精慕HU 2022-09-27 09:56:34
我正在Keras中訓練一個模型,我使用以下代碼保存了所有內容。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])我做了上面的操作來試驗檢查點,因為我不確定我是否正確使用它?,F在,此培訓的學習率為 .001?,F在,在運行訓練循環一段時間后,如果我決定將學習速率更改為.002,我是否必須運行與模型相關的所有代碼(模型結構,然后是優化等)?假設我這樣做了,我如何從停止訓練時的先前狀態加載?另一個問題是,如果我重新啟動PC,并使用我之前在這里共享的檢查點代碼運行jupyter單元格,這會替換以前保存的文件嗎?加載保存的文件和權重并從那里恢復訓練的理想方法是什么?我問這個問題的原因是,當我遵循Keras文檔時,它似乎只是從頭開始。
查看完整描述

1 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

現在,在運行訓練循環一段時間后,如果我決定將學習速率更改為.002,我是否必須運行與模型相關的所有代碼(模型結構,然后是優化等)?

您可以在訓練期間或加載模型后更新學習速率。

請記住,學習速率不屬于模型架構,它屬于優化器(在模型編譯期間分配)。學習速率是一個超參數,用于調節梯度下降期間權重更新的大?。ū硎救缦?nbsp;alpha):

http://img1.sycdn.imooc.com//6332588a0001293203660182.jpg

因此,在初始訓練之后,您可以加載(保存的)模型,使用新的學習速率更新優化器(并可能將自定義對象分配給編譯器),然后繼續訓練。請記住,在長時間訓練模型后更改優化程序本身可能會產生較差的準確性結果,因為您的模型現在必須根據新優化器的權重計算重新校準。


如何從停止訓練時的先前狀態加載?


在 Keras 中,您可以選擇保存/加載整個模型(包括架構、權重、優化器狀態,或僅保存權重,或僅保存/加載架構(源)。


要保存/加載整個模型:


from keras.models import load_model


model.save('my_model.h5')

model = load_model('my_model.h5')

要僅保存/加載模型權重:


model.save_weights('my_model_weights.h5')

model.load_weights('my_model_weights.h5')

您還可以在模型加載期間分配自定義對象:


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

另一個問題是,如果我重新啟動PC,并使用我之前在這里共享的檢查點代碼運行jupyter單元格,這會替換以前保存的文件嗎?


取決于檢查點中使用的文件路徑:“如果文件路徑是權重。{epoch:02d}-{val_loss:.2f}.hdf5,則模型檢查點將與紀元編號和驗證丟失一起保存在文件名中“。因此,如果對文件路徑使用唯一格式,則可以避免覆蓋以前保存的模型。源


加載保存的文件和權重并從那里恢復訓練的理想方法是什么?


例:


# 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


查看完整回答
反對 回復 2022-09-27
  • 1 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號