如何冻结张量流模型?

时间:2018-02-15 19:17:57

标签: python tensorflow rnn

我有一个保存一类rnn的model.py文件。例如:

class TextRNN:
    def __init__(self, hidden_size, num_classes, learning_rate...):

        self.input_data = tf.placeholder(tf.int32,[batch_size,None],name="input_data")
        self.output_label = tf.placeholder(tf.float32,[batch_size,num_classes],name="output_label")
        self.dropout_rate = tf.placeholder(tf.float32,name="dropout_rate")

        with tf.name_scope("embedding"):
            ...

        with tf.name_scope("hidden"):
            ...

        with tf.name_scope("output"):
            ...

在我的main.py中,我使用以下代码来使用此模型。

with tf.Graph().as_default():
        sess = tf.Session()
        with sess.as_default():
            rnn = TextRNN(...)
            ...

            #training step
            def train_step(x_batch, y_batch...):
                feed_dict = {rnn.input_data:x_batch,rnn.output_label:y_batch,rnn.dropout_rate:0.5}
                sess.run(feed_dict)
                ...
            #testing step
            def test_step(x_batch, y_batch...):
                feed_dict = {rnn.input_data:x_batch,rnn.output_label:y_batch,rnn.dropout_rate:0.5}
                sess.run(feed_dict)

我的问题是如何在测试步骤中冻结模型?我知道如果我运行训练步骤,模型的权重将会更新。但是当我运行测试步骤时,我不想再更新权重,我只想获得预测结果?我应该如何修改我的代码才能实现这一目标?

1 个答案:

答案 0 :(得分:1)

要训练你的模型,你需要定义一个训练操作它,例如 train_op = tf.train.AdamOptimizer(1e-4).minimize(loss_op)意味着每次你运行train_op它将继续一步loss_op上的AdamOptimizer,它将更新变量。

但是,如果您想评估您的模型,只需运行output_op即可获得结果。 TensorFlow将仅运行所需图形的一部分而不是更多。因此,当您要求output_oploss_op时,它不会修改变量。

您可能会发现此page对于了解TensorFlow中的工作原理非常有用。