tensorflow - 如何在 Keras 中重新初始化现有模型的层权重?
问题描述
实际问题是为 Keras 中现有(已经构建的)模型生成随机层权重。有一些使用 Numpy [2] 的解决方案,但选择这些解决方案并不好。因为,在 Keras 中,有特殊的初始化器为每种层类型使用不同的分布。当使用 Numpy 代替初始化器时,生成的权重与原始权重的分布不同。我们举个例子:
我的模型的第二层是卷积(1D)层,它的初始化器是 GlorotUniform [1]。如果使用 Numpy 生成随机权重,生成的权重的分布将不是 GlorotUniform。
我有这个问题的解决方案,但它有一些问题。这是我所拥有的:
def set_random_weights(self, tokenizer, config):
temp_model = build_model(tokenizer, config)
self.model.set_weights(temp_model.get_weights())
我正在构建现有模型。在构建过程之后,模型的权重被重新初始化。然后我得到重新初始化的权重并将它们设置为另一个模型。生成新权重的构建模型具有冗余过程。因此,我需要一个新的解决方案,而无需构建模型和 Numpy。
解决方案
在此处查看此问题的先前答案。具体来说,如果您想使用 Keras 层的原始权重初始化程序,您可以执行以下操作:
import tensorflow as tf
import keras.backend as K
def init_layer(layer):
session = K.get_session()
weights_initializer = tf.variables_initializer(layer.weights)
session.run(weights_initializer)
layer = model.get_layer('conv2d_1')
init_layer(layer)
推荐阅读
- javascript - 通过删除 Javascript 中的前导零来缩短十六进制数
- node.js - 有没有办法连接一系列端点?
- excel - 培训矩阵 - 显示最后日期 + 突出显示失败且未单独完成课程
- javascript - 如何将对象数组减少为所需键的单个数组?
- python - 用数据框中的数组替换 NaN 值
- tensorflow - ImageNet 网站未加载 - 无法访问数据集
- html - 导航栏菜单未在每个页面中折叠
- php - 使用 simplexml_load_string 解决 simplexml_load_string()
- javascript - socket.emit 导致其他函数/变量为空?
- xcode - 在 ReactNative 项目的 XCode 12.5 中出现错误“找不到库 ldoubleconversion”