tensorflow 的玩家,我要用 Optimizer,但想自己搞定 loss 计算,然后 BP。正确的方式是什么?

2018-04-03 21:36:01 +08:00
 northisland

普通青年的流程:

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

我不知道有没有更好的方案,求教各位,谢谢

3952 次点击
所在节点    机器学习
5 条回复
linthieda
2018-04-03 22:22:39 +08:00
普通青年和文艺青年的版本有什么区别吗

而且 tf 并非没有 C++ 的 api,


抛开以上问题,我猜想你的训练模型可能和 RL 有关,
我进而猜想你用 np 可能是为了对 loss 进行某些 scale (比如 A2C 算法)
你在做 inference 的时候可以一并求出 gradient, 然后再用 numpy 进行 scale, 当然这些其实都可以在 tf 内完成。
然后再喂进 train_op.
cjx5813
2018-04-03 22:38:30 +08:00
首先,文艺青年版本一点都不文艺,没啥区别。
其次你的文艺青年版本有 typo,第三行应该是 apply_gradients
告诉你啥叫文艺青年:
`import tensorflow.contrib.keras as tf`

最后你的二笔方式确实很二笔,不过有机会应该去了解一下 TF 的 eager execution 模式,不知道比你高到哪里去了
Xs0ul
2018-04-03 23:01:07 +08:00
换 Pytorch (
meilaoban945
2018-04-04 00:16:17 +08:00
import torch as tf
lance6716276
2018-04-04 00:25:35 +08:00
keras 简单的一笔

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/444089

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX