训练后修改Keras模型

smw*_*smw 3 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)
Run Code Online (Sandbox Code Playgroud)

在训练模型后,我想添加一个图层来选择权重.我试过了

model.layers.append(Dense(output_dim, activation='sigmoid', input_shape=(input_dim,), kernel_initializer='ones'))

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

小智 11

如果我理解你的问题,那么你只需要为所有模型的图层保存权重.你可以用不同的方式做到这一点.最简单的是:

# training ...
temp_weights = [layer.get_weights() for layer in model.layers]
Run Code Online (Sandbox Code Playgroud)

在训练模型之后 - 有必要再次使用一层构建模型:

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'])  
Run Code Online (Sandbox Code Playgroud)

并将以前保存的权重加载到相应的图层中:

for i in range(len(temp_weights)):
    model.layers[i].set_weights(temp_weights[i])
Run Code Online (Sandbox Code Playgroud)