tensorflowを使ってGANを学習させているのですが、generatorとdiscriminatorを別々に保存・復元できるようにしたいです。
graphはそれぞれ"gen"と"dis"のscopeに属すよう作成しました。
そのうえで、saverをそれぞれ以下のように定義し、
python
1gen_var = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, "gen") 2dis_var = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, "dis") 3saver_gen = tf.train.Saver(gen_var) 4saver_dis = tf.train.Saver(dis_var)
学習後それぞれの保存と
python
1saver_gen.save(sess, MODEL_GEN_DIR + "model.ckpt") 2saver_dis.save(sess, MODEL_DIS_DIR + "model.ckpt")
復元をこのように記述しています。
python
1sess.tf.global_variables_initializer() 2saver_gen.restore(sess, MODEL_GEN_DIR + "model.ckpt") 3saver_dis.restore(sess, MODEL_DIS_DIR + "model.ckpt")
saveとrestoreを行う際はエラーも出ず一見うまくいっているようなのですが、出力が保存時と復元時で異なっているようなのです。
variableを詳しく調べてみると、tf.contrib.layers.batch_norm()で使用される'(スコープ)/moving_mean'と'(スコープ)/moving_variance'のvariableが保存されていない事がわかりました。
どうやら、batch_normのvariableの内gammaとbetaはtf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)で取得できるが、moving_meanとmoving_varianceは取得できていないようです。
この2変数の取得はどのように行えばよいでしょうか?御教示お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。