普通青年的流程:
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
我不知道有没有更好的方案,求教各位,谢谢