optimizer = tf.train.XXXOptimizer(xxx, yyy)
train_op = optimizer.minimize(loss)
for xxx:
sess.run(train_op, feed_dict=xxxx)
optimizer = tf.train.XXXOptimizer(xxx, yyy)
gradients = optimizer.compute_gradients(loss)
bp_gradient = optimizer.compute_gradients(gradients)
for xxx:
sess.run(bp_gradient, feed_dict=xxx)
因为觉得损失函数,全部用 TensorFlow 里的 tf 数学操作来搞, ==不方便==在训练中临时修改,
还不方便代码共享(出库要出 C++的库)
所以,希望能用上 numpy 或者直接用 boost::python 上 C++(输出代码和训练代码统一)。
目前设想:
net_out = xxx # 作为网络 loss 输入的某些层
# np_loss = ╰(●’◡’●)╮(net_out) # 用 numpy 搞出的损失函数值
loss_pikapika = xxx(net_out, ph0,ph1) # 假的损失函数,保证损失函数值和 np_loss 一样~~~
# 比如 ph0*tf.reduce_mean(net_out)+ph1
optimizer = tf.train.XXXOptimizer(xxx, yyy)
train_op = optimizer.minimize(loss_pikapika)
for xxx
net_out = sess.run(net_out, feed_dict={xxx}) # 先跑前向网络
np_loss = ╰(●’◡’●)╮(net_out)
sess.run(train_op, feed_dict={xxx, ph0=np.array([0.]), ph1=array([np_loss])}) # 跑一趟前向+反向
缺点:要多跑一次前向传递,很 2B
我不知道有没有更好的方案,求教各位,谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.