[英]Problem in transfer learning - couldn't transfer weights using keras
我使用監督學習訓練網絡並保存其權重,現在我創建了一個帶有附加層的新網絡(新網絡包含舊網絡的相同層並具有附加層),我需要將所有舊網絡權重轉移到新網絡中並保留新的附加層隨機初始化,但當我使用新的權重時,它采取隨機預測(權重隨機初始化)。 舊網絡的weights.h5與磁盤中新網絡的weights.h5大小不同。
from keras import layers, models, optimizers
from keras import backend as K
import numpy as np
from keras.models import Model, load_model
import keras.losses
model = load_model("nvidia_41_named.h5") #the old network
model.load_weights("nvidia_41_named_weights.h5") # the old weights
actor=load_model("actormodel.h5") #the new network
for layer in model.layers :
name = layer.name
for lay in actor.layers :
if lay.name == name:
print(lay.name)
weights = model.get_layer(name).get_weights()
actor.get_layer(name).set_weights(weights)
print(lay.name,'correctly transferred')
print("========================================")
我今天早些時候遇到了同樣的問題但是找不到stackoverflow的答案了。 如果使用model.load_weights("./weights_cnn.hdf5", by_name=True)
命名舊模型中的model.load_weights("./weights_cnn.hdf5", by_name=True)
標記“by_name”很重要!)它應該為命名圖層加載正確的權重。
cnn1 = tf.keras.layers.Conv2D(filters, kernel, padding="same", activation='relu', name='conv_1_j')(inp_layer)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.