【发布时间】: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