【问题标题】:Tensorflow creating new variables even when graph is resued即使重新使用图形,Tensorflow 也会创建新变量
【发布时间】:2016-12-03 10:03:15
【问题描述】:

我正在使用 TFLearn 和 Tensorflow 运行 CNN。我目前的方法是在每次运行时重建模型,因为我的批量大小在训练和测试之间会发生变化。我注意到一些内存问题,然后当我进一步调查时,我发现在每次运行时我都在图表上重新创建我的整个模型,即使我正在尽我所能重用图表。我没有使用默认图表,我在整个训练过程中都持有我的图表的相同实例,并且我的所有变量都将重用设置为 true。正如你在我的 Tensorboard 输出中看到的那样,在我的第二个训练周期之后,我有两组所有内容,每增加一组,我就会得到另一组。我该怎么做才能确保只重复使用第一组?

def build_and_run_model(self, num_labels, data, labels, holdout, holdout_labels, batch_size, checkpoint_directory=None, checkpoint_file=None, restore=False,
                        num_epochs=10, train=True, image_names=None, gpu_memory_fraction=0):
    if not self.graph:
        self.graph = tf.Graph()

    with tf.Session(config=tf.ConfigProto(log_device_placement=False), graph=self.graph) as session:
        tflearn.config.is_training(train, session)

        if train:
            keep_prob = .8
        else:
            keep_prob = 1

        # Building 'AlexNet'
        network = input_data(shape=[None, 227, 227, 3])
        network = conv_2d(network, 96, 11, strides=4, activation='relu')
        network = max_pool_2d(network, 3, strides=2)
        network = local_response_normalization(network)
        network = conv_2d(network, 256, 5, activation='relu')
        network = max_pool_2d(network, 3, strides=2)
        network = local_response_normalization(network)
        network = conv_2d(network, 384, 3, activation='relu')
        network = conv_2d(network, 384, 3, activation='relu')
        network = conv_2d(network, 256, 3, activation='relu')
        network = max_pool_2d(network, 3, strides=2)
        network = local_response_normalization(network)
        network = fully_connected(network, 4096, activation='tanh')
        network = dropout(network, keep_prob)
        network = fully_connected(network, 4096, activation='tanh')
        network = dropout(network, keep_prob)
        network = fully_connected(network, num_labels, activation='softmax')
        network = regression(network, optimizer="adam",
                             loss='categorical_crossentropy',
                             learning_rate=self.build_learning_rate(), batch_size=batch_size)

        if not self.model:
            model = self.model = tflearn.DNN(network, tensorboard_dir="./tflearn_logs/", checkpoint_path=checkpoint_directory + checkpoint_file, tensorboard_verbose=3)

        else:
            model = self.model

        if restore | (not train):
            logger.info("Restoring checkpoint from ' % s'." % (checkpoint_directory + checkpoint_file))
            ckpt = tf.train.get_checkpoint_state(checkpoint_directory)
            logger.info("Loading variables from ' % s'." % ckpt.model_checkpoint_path)
            model.load(ckpt.model_checkpoint_path)
        else:
            tf.initialize_all_variables().run()

        if train:
            model.fit(data, labels, n_epoch=int(num_epochs), shuffle=True,
                      show_metric=True, batch_size=batch_size, snapshot_step=None,
                      snapshot_epoch=True, run_id='alexnet_imagerecog')

【问题讨论】:

    标签: python tensorflow tensorboard


    【解决方案1】:

    看来我对默认图表的含义有误解。我想如果我像上面那样创建图表,每次运行该模型时都会使用它,但情况似乎并非如此。我已更改代码以在块内构建模型,如下所示:

    tf.reset_default_graph()
    g = tf.Graph()
    with g.as_default() as g:
    

    我不再看到这个问题。

    【讨论】:

      【解决方案2】:

      也可以这样写:
      with tf.Graph().as_default(), tf.Session() as session:

      【讨论】:

        猜你喜欢
        • 2020-07-24
        • 1970-01-01
        • 2019-10-15
        • 2018-04-22
        • 2019-08-12
        • 2022-01-06
        • 2021-09-12
        • 2015-09-13
        • 2020-08-28
        相关资源
        最近更新 更多