これは、テンソルフローで高速化されたR-CNN実装です。
proposal_layerはので、私はその後、私は小さなを行う勾配が成功どのように勾配が渡されたかtf.py_func
をバック届ける考える
を変え続けるされている勾配がtf.py_func
によって重みとバイアスを渡すことができれば、私は好奇心午前のpython
でimplementですテスト
import tensorflow as tf
import numpy as np
def addone(x):
# print type(x)
return x + 1
def pyfunc_test():
# create data
x_data = tf.placeholder(dtype=tf.float32, shape=[None])
y_data = tf.placeholder(dtype=tf.float32, shape=[None])
w = tf.Variable(tf.constant([0.5]))
b = tf.Variable(tf.zeros([1]))
y1 = tf.mul(w, x_data, name='y1')
y2 = tf.py_func(addone, [y1], tf.float32)
y = tf.add(y2, b)
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for step in xrange(201):
ran = np.random.rand(115).astype(np.float32)
ans = ran * 1.5 + 3
dic = {x_data: ran, y_data: ans}
tt, yy, yy1= sess.run([train, y1, y2], feed_dict=dic)
if step % 20 == 0:
print 'step {}'.format(step)
print '{}, {}'.format(w.eval(), b.eval())
test = sess.run(y, feed_dict={x_data:[1]})
print 'test = {}'.format(test)
if __name__ == '__main__':
pyfunc_test()
変数b
は値AFを保つw
変え続けるが、 TERは(tf.RegisterGradient
とgradient_override_map
を使用することをお勧めが、私はより速くrcnnレポでこれらを見つけることができないポストの上にリンクを初期化し、決して
sess.run(tf.gradients(loss, b), feed_dict=dic)
GET値
sess.run(tf.gradients(loss, w), feed_dict=dic)
は、私はいくつかの質問を知って{TypeError}Fetch argument None has invalid type <type 'NoneType'>
を取得変更します)
w
がpy_func
の
おかげであなたの答えを使用するように変更されていますが、私はより速くrcnnレポで 'tf.RegisterGradient'を見つけることができないので、私は知っているだろう'tf.RegisterGradient'を使わずにpy_funcだけで勾配を与えたり、レイヤーをスキップしたりする場合 – xxi
' tf.RegisterGradient'はコアTensorFlowの一部です。Pythonシェル –
で 'help(tf.RegisterGradient)'を試してみてください。より速いR-CNNレポの 'tf.py_func'のグラディエントは配信できませんが、' tf.py_func'の前の値で計算される損失の一部です。したがって、 'tf.py_func'の勾配さえもnoneであれば、' tf.py_func'の前の重みを更新することができます。 – xxi