Проблема в обучении переносу - не удалось перенести вес с помощью кера - PullRequest
0 голосов
/ 30 апреля 2019

Я обучил сеть с использованием контролируемого обучения и сохранил ее веса, теперь я создал новую сеть с дополнительными слоями (новая сеть содержит те же слои старой сети и имеет дополнительные слои), мне нужно перенести все старые веса сети вновая сеть и оставить новые дополнительные слои случайным образом инициализированными, но когда я использую новые веса, он принимает случайные предсказания (веса инициализируются случайным образом).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("========================================")

схема двух сетей: this photo describes the relation between the old and new network

1 Ответ

0 голосов
/ 30 апреля 2019

У меня был тот же вопрос ранее сегодня, но я больше не могу найти ответ от stackoverflow.Если вы назовете слой в старой модели с помощью 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)

...