我有一个简单训练过的keras模型:
model = Sequential()
model.add(Dense(output_dim, activation='relu',input_shape(input_dim,)))
model.add(Dense(output_dim, activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train)
在我训练模型后,我想添加一个我选择权重的图层。我试过了
model.layers.append(Dense(output_dim, activation='sigmoid', input_shape=(input_dim,), kernel_initializer='ones'))
但它不起作用......我觉得我可能需要再次编译模型,但它不起作用。有什么想法吗?
答案 0 :(得分:9)
如果我理解你的问题,那么你只需要为所有模型的图层保存权重。你可以用不同的方式做到这一点。最简单的是:
# training ...
temp_weights = [layer.get_weights() for layer in model.layers]
在训练模型之后 - 有必要再次使用一层建立模型:
model = Sequential()
model.add(Dense(output_dim, activation='relu',input_shape(input_dim,)))
model.add(Dense(output_dim, activation='sigmoid'))
model.add(Dense(output_dim, activation='sigmoid', kernel_initializer='ones')) # new layer
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
将先前保存的权重加载到相应的图层中:
for i in range(len(temp_weights)):
model.layers[i].set_weights(temp_weights[i])