【问题标题】:Modify Keras model after training训练后修改 Keras 模型
【发布时间】:2017-09-28 14:37:24
【问题描述】:

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

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

【问题讨论】:

    标签: machine-learning deep-learning keras


    【解决方案1】:

    如果我正确理解了您的问题,那么您只需要保存模型所有层的权重即可。你可以用不同的方式来做。最简单的如下:

    # 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])
    

    【讨论】:

      猜你喜欢
      • 2020-06-20
      • 2018-04-15
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多