如何使用预先训练的变量初始化TensorFlow估算器的模型函数中的权重?

时间:2018-05-31 06:39:54

标签: tensorflow tensorflow-estimator

我想使用TensorFlow的tf.Estimator API包装我的模型,所以我有以下model_fn

    def model_fn(features, labels, mode, params):
        # Load vocabulary
        n_vocab = params['n_vocab']

        if mode != tf.estimator.ModeKeys.PREDICT:
            labels = tf.reshape(labels, (-1, 1))

        embedding = tf.Variable(tf.random_uniform((tf.cast(n_vocab, tf.int32),
                                                  tf.cast(params['embed_space'], tf.int32)), 0, 1), name='embedding')
        embedding_layer = tf.nn.embedding_lookup(embedding, features[INPUT_TENSOR_NAME], name='embedding_layer')

        ...

它初始化嵌入变量并执行其他一些操作。现在,我不想使用tf.random_uniform初始化这些权重,但是使用我之前训练过的已保存模型的权重,并冻结它们以使它们不可训练。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用tf.estimator.WarmStartSettings。 Estimator通过添加名为clipsToBounds的参数提供了一种简单的方法来创建它。

创建估算器时,应传递已保存的模型目录:

true

请注意,您可能需要已保存模型的未冻结版本。