を使用してこれはthis oneへのフォローアップの質問です。Tensorflow:cifar10例の奇妙な行動カスタム変数の作成方法
私はまだファイルcifar10.pyのcifar10 exampleで作業しており、変数の作成に関するいくつかの奇妙な動作に気づいています。
しかし、まず副次的な質問:なぜ、減量係数がwd=0.0
であり、wd=None
でない変数が作成されるのですか?そうすることで、計算グラフの頂点が少なくなります。
次に、奇妙な行動。私は、変数を作成することがより便利にするために、以下の機能を追加しました:
def _create_variable(name, shape, initializer, wd=None):
dtype = tf.float16 if FLAGS.use_fp16 else tf.float32
with tf.device('/cpu:0'):
var = tf.get_variable(name, shape, dtype, initializer)
if wd is not None:
wd_val = tf.mul(tf.nn.l2_loss(var), wd, name='weight_loss')
tf.add_to_collection('losses', wd_val)
return var
(オリジナルパラメータを持つ)の変数を作成するには、この機能を使用する場合は、計算されlogitsがために+ -1e13の範囲から来ます最初のバッチは徐々に良くなって+ -1.5に達しました。一方、損失は約400000から始まり、それがNaNに達するまで大きくなります。
元の関数を使用して変数を作成する場合、ロギットは最初から+ -1の範囲から来ており、損失は約4.5で徐々に小さくなります。
私と、変数生成のために提供された関数の違いは何ですか?なぜ、その効果は非常に大きいのですか?私はそれを見ない。
変更されたcifar10.pyの完全なコードはhereです。それをテストするには、元のファイルを自分のバージョンに置き換えてください。元と私の機能を切り替えるには、単に行212をCUSTOM = False
に変更してください。
ありがとうございます。私