我想重置(随机化)我的Keras(深度学习)模型中所有层的权重。原因是我希望能够使用不同的数据拆分多次训练模型,而不必每次都执行(慢速)模型重新编译。
受this discussion启发,我尝试以下代码:
# 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())
然而,它只是部分起作用。
部分原因是因为我检查了一些图层,得到了加权值,它们似乎发生了变化。但当我重新开始培训时,成本值远远低于第一次运行时的初始成本值。好像我已经成功地重置了一些重量,但不是全部。
任何关于我错在哪里的建议都会非常感激。谢谢。。
通过检查初始化项重置所有层:
更新:kernel_初始化器现在是kernel.initializer。
在编译模型后但在训练之前保存初始权重:
然后在训练之后,通过重新加载初始权重来“重置”模型:
这为您提供了一个比较不同数据集的apples-to-apples模型,并且应该比重新编译整个模型更快。
如果要真正地重新随机化权重,而不仅仅是恢复初始权重,可以执行以下操作。根据使用的是TensorFlow还是Theano,代码略有不同。
相关问题 更多 >
编程相关推荐