2017-08-12 10 views
0

TensorFlowは、勾配の更新をバッチで適用するより大きなシステムの一部として使用しています。理想的には私は(擬似コードで)の線に沿って何かをしたいと思います:勾配の計算/適用時の損失関数の設定値

grads_and_vars = tf.gradients(loss, [vars]) 
list_of_losses = [2, 1, 3, ...] 
for loss_vals in list_of_losses: 
    tf.apply_gradients(grads_and_vars, feed_dict = {loss : loss_vals} 

私の損失関数は、私のニューラルネットワークからの以前の予測に依存し、それはこのように、このための私の必要性を計算するのに長い時間がかかります。

答えて

0

tf.gradientsを呼び出す場合、引数grad_ysを使用すると、上流のバックプロパグラフからカスタム値を指定できます。それらを指定しないと、上流のバックプロップが1のテンソル(Fillノード)であると仮定するノードになります。したがって、tf.gradientsに、カスタムのアップストリーム値を指定できるプレースホルダーを指定するか、Fillノードに入力するだけです。ご提案ヤロスラフため

IE

tf.reset_default_graph() 
a = tf.constant(2.) 
b = tf.square(a) 
grads = tf.gradients(b, [a]) 
sess.run(grads, feed_dict={"gradients/Fill:0": 0}) 
0

(OPに代わって投稿。)

ありがとう!以下はあなたの提案に基づいてまとめたコードです。私はこれが私の問題を解決すると思う:

tf.reset_default_graph() 
with tf.Session() as sess: 
    X = tf.placeholder("float", name="X") 
    W = tf.Variable(1.0, name="weight") 
    b = tf.Variable(0.5, name="bias") 
    pred = tf.sigmoid(tf.add(tf.multiply(X, W), b)) 

    opt = tf.train.AdagradOptimizer(1.0) 
    gvs = tf.gradients(pred, [W, b], grad_ys=0.5) 

    train_step = opt.apply_gradients(zip(gvs, [W, b])) 
    tf.global_variables_initializer().run() 
    for i in range(50): 
     val, _ = sess.run([pred, train_step], feed_dict= {X : 2}) 
     print(val) 
関連する問題