我想重置(随机化)Keras(深度学习)模型中所有层的权重。原因是我希望能够使用不同的数据分割多次训练模型,而不必每次都进行(缓慢的)模型重新编译。
灵感来自这次讨论 https://github.com/fchollet/keras/pull/1908,我正在尝试以下代码:
# Reset weights
for layer in KModel.layers:
if hasattr(layer,'init'):
input_dim = layer.input_shape[1]
new_weights = layer.init((input_dim, layer.output_dim),name='{}_W'.format(layer.name))
layer.trainable_weights[0].set_value(new_weights.get_value())
然而,它只起到了部分作用。
部分原因是我检查了一些 layer.get_weights() 值,它们似乎发生了变化。但是当我重新开始训练时,成本值远低于第一次运行时的初始成本值。这几乎就像我已经成功地重置了一些权重,但不是全部。
在编译模型之后、训练之前立即保存初始权重:
model.save_weights('model.h5')
然后在训练后,通过重新加载初始权重来“重置”模型:
model.load_weights('model.h5')
这为您提供了一个同类模型来比较不同的数据集,并且应该比重新编译整个模型更快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)