TFLearnとTensorflowを使用してCNNを実行しています。私の現在のアプローチは、トレーニングとテストの間でバッチサイズが変わるため、実行ごとにモデルを再構築しています。私はいくつかの記憶上の問題に気づいた後、さらに調査したところ、グラフを再利用できると思うすべてを行っているにもかかわらず、各実行時にグラフ全体を再作成していました。私はデフォルトのグラフを使用していません、私はすべてのトレーニングを通して私のグラフの同じインスタンスを保持しています、そして、すべての変数は再利用がtrueに設定されています。私のTensorboardの出力で見ることができるように、私は2回目のトレーニングエポック後に2セットすべてを持っています。私は最初のセットだけを再利用するために何ができるのですか?Tensorflowがグラフを再作成しても新しい変数を作成する
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')