#keras #keras-layer
#keras #keras-layer
Вопрос:
Привет, у меня есть приведенный ниже код, в котором я загружаю предварительно сохраненные пользовательские веса из файла .cpkt в модель resnet.
»’
def resnet_model():
input_tensor = Input(shape=(224,224,3))
base_model = keras.applications.ResNet50(input_tensor=input_tensor,weights = 'imagenet', include_top = False)
for layer in base_model.layers:
layer.trainable = True
x = base_model.output
x = GlobalAveragePooling2D(data_format='channels_last')(x)
x = Dense(256)(x)
l2_norm_final = Lambda(lambda x: K.l2_normalize(x,axis=1))(x)
final_model = Model(inputs=base_model.input, outputs = l2_norm_final)
return final_model
model = resnet_model()
model.load_weights(weights_file_orig)
#this works i.e., W has the model's weights
W = model.get_weights()
#this does not work i.e., w,b have []
all_weights = [], all_biases = []
for layer in model.layers:
w,b = layer.get_weights()
all_weights.append(w)
all_biases.append(b)
»’
Как мне получить послойные веса и смещения из сохраненного файла .cpkt?
Большое спасибо!
Комментарии:
1. Какой слой не возвращает веса? Вы должны учитывать, что не все слои имеют веса.
2. Ни один из слоев. Все они возвращают пустые списки.
Ответ №1:
первое исправление :
вы неправильно используете множественное присвоение, исправление упомянуто ниже :
all_weights = [], all_biases = [] # wrong
all_weights, all_biases = [], [] # correct way to use multi-assignment in python
второе исправление:
не все слои имеют веса, например: входные, выпадающие и т. Д. поэтому, когда вы пытаетесь получить как веса узлов, так и веса смещения этих слоев, у вас будет ошибка, указывающая на несколько значений для распаковки, приведенный ниже код должен выполнить работу.
for layer in model.layers:
try:
w,b = layer.get_weights()
all_weights.append(w)
all_biases.append(b)
except:
pass # not all layers have weights !
если вы хотите получить веса только предварительно обученной модели (res-net), то перед выполнением приведенного выше кода определите переменную модели следующим образом:
model = keras.applications.ResNet50(input_tensor=input_tensor,weights = 'imagenet', include_top = False)