训练后修改Keras模型

时间:2017-05-01 05:31:05

标签: machine-learning deep-learning keras

我有一个简单训练过的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'))

但它不起作用......我觉得我可能需要再次编译模型,但它不起作用。有什么想法吗?

1 个答案:

答案 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])