Cey*_* B. 5 conv-neural-network keras tensorflow
实际问题是为 Keras 中现有(已构建)模型生成随机层权重。有一些使用 Numpy [2] 的解决方案,但选择这些解决方案并不好。因为,在 Keras 中,有特殊的初始化器对每种层类型使用不同的分布。当使用 Numpy 而不是初始化器时,生成的权重具有与其原始权重不同的分布。我们举个例子:
我的模型的第二层是卷积(一维)层,其初始化器是 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())
Run Code Online (Sandbox Code Playgroud)
我正在构建现有模型。构建过程结束后,模型的权重将重新初始化。然后我得到重新初始化的权重并将它们设置为另一个模型。构建模型来生成新的权重具有冗余的过程。所以,我需要一个新的解决方案,而不需要构建模型和 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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10297 次 |
最近记录: |