第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

從凱拉斯檢查點加載

從凱拉斯檢查點加載

精慕HU 2022-09-27 09:56:34
我正在Keras中訓(xùn)練一個模型,我使用以下代碼保存了所有內(nèi)容。filepath = "project_model.hdh5"checkpoint = ModelCheckpoint("project_model.hdf5", monitor='loss', verbose=1,    save_best_only=False, mode='auto', period=1)然后,我使用以下代碼來運行訓(xùn)練。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(xiàn)在,此培訓(xùn)的學(xué)習(xí)率為 .001?,F(xiàn)在,在運行訓(xùn)練循環(huán)一段時間后,如果我決定將學(xué)習(xí)速率更改為.002,我是否必須運行與模型相關(guān)的所有代碼(模型結(jié)構(gòu),然后是優(yōu)化等)?假設(shè)我這樣做了,我如何從停止訓(xùn)練時的先前狀態(tài)加載?另一個問題是,如果我重新啟動PC,并使用我之前在這里共享的檢查點代碼運行jupyter單元格,這會替換以前保存的文件嗎?加載保存的文件和權(quán)重并從那里恢復(fù)訓(xùn)練的理想方法是什么?我問這個問題的原因是,當我遵循Keras文檔時,它似乎只是從頭開始。
查看完整描述

1 回答

?
楊魅力

TA貢獻1811條經(jīng)驗 獲得超6個贊

現(xiàn)在,在運行訓(xùn)練循環(huán)一段時間后,如果我決定將學(xué)習(xí)速率更改為.002,我是否必須運行與模型相關(guān)的所有代碼(模型結(jié)構(gòu),然后是優(yōu)化等)?

您可以在訓(xùn)練期間或加載模型后更新學(xué)習(xí)速率。

請記住,學(xué)習(xí)速率不屬于模型架構(gòu),它屬于優(yōu)化器(在模型編譯期間分配)。學(xué)習(xí)速率是一個超參數(shù),用于調(diào)節(jié)梯度下降期間權(quán)重更新的大小(表示如下 alpha):

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

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


如何從停止訓(xùn)練時的先前狀態(tài)加載?


在 Keras 中,您可以選擇保存/加載整個模型(包括架構(gòu)、權(quán)重、優(yōu)化器狀態(tài),或僅保存權(quán)重,或僅保存/加載架構(gòu)(源)。


要保存/加載整個模型:


from keras.models import load_model


model.save('my_model.h5')

model = load_model('my_model.h5')

要僅保存/加載模型權(quán)重:


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單元格,這會替換以前保存的文件嗎?


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


加載保存的文件和權(quán)重并從那里恢復(fù)訓(xùn)練的理想方法是什么?


例:


# 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

結(jié)果


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,)

結(jié)果:


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


查看完整回答
反對 回復(fù) 2022-09-27
  • 1 回答
  • 0 關(guān)注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號