2017-05-14 10 views
0

私はAdamOptimizerを持っています。私は自分のモデルをデバッグしたいので、診断を受けたい。私はopt.get_slot()メソッドを認識していますが、残念ながら常にNoneを返します。オプティマイザでスロット値を取得する適切な方法

私は次のことを試してみました:私はopt.minimizeと呼ばれた後

  • は私がなし得るんどちらの場合も、数回

最適化ステップを実行する(損失)

  • を、それを取得します。私は間違って何をしていますか?

  • 答えて

    0

    私自身が問題を発見しました。 opt.get_slot(var、slot)を呼び出す必要があります。ここで、varは変数であり、損失関数ではありません。ですから、すべての瞬間とレートのベクトルを返すはずですが、検査する変数を指定する必要があります。

    1

    スロットに固有のものではない、より汎用的な方法は、あなたがcapture_varsデコレータ内部minimizeまたはapply_gradientsコールを行い、その後、そのvariable.name

    @contextlib.contextmanager 
    def capture_vars(): 
        """Decorator to capture global variables created in the block. 
        """ 
    
        micros = int(time.perf_counter()*10**6) 
        scope_name = "capture_vars_"+str(micros) 
        op_list = [] 
        with tf.variable_scope(scope_name): 
        yield op_list 
    
        g = tf.get_default_graph() 
        for v in tf.global_variables(): 
        scope = v.name.split('/', 1)[0] 
        if scope == scope_name: 
         op_list.append(v) 
    
    with u.capture_vars() as adam_vars: 
        train_op = opt.apply_gradients(grad_new.to_grads_and_vars()) 
    sess.run([v.initializer for v in adam_vars]) 
    
    に基づいて、必要な変数を除外し、あります
    関連する問題