tensorflow 的玩家,我要用 Optimizer,但想自己搞定 loss 计算,然后 BP。正确的方式是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
northisland
V2EX    机器学习

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

  •  1
     
  •   northisland 2018-04-03 21:36:01 +08:00 4327 次点
    这是一个创建于 2752 天前的主题,其中的信息可能已经有所发展或是发生改变。

    普通青年的流程:

    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

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

    5 条回复    2018-04-04 00:25:35 +08:00
    linthieda
        1
    linthieda  
       2018-04-03 22:22:39 +08:00   1
    普通青年和文艺青年的版本有什么区别吗

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


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

    最后你的二笔方式确实很二笔,不过有机会应该去了解一下 TF 的 eager execution 模式,不知道比你高到哪里去了
    Xs0ul
        3
    Xs0ul  
       2018-04-03 23:01:07 +08:00 via Android
    换 Pytorch (
    meilaoban945
        4
    meilaoban945  
       2018-04-04 00:16:17 +08:00 via Android
    import torch as tf
    lance6716276
        5
    lance6716276  
       2018-04-04 00:25:35 +08:00 via Android   1
    keras 简单的一笔
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5133 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 09:25 PVG 17:25 LAX 02:25 JFK 05:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86