w*****r 发帖数: 197 | 1 两个神经网络是用不同的framework写的,想把一个网络的中间结构作为输出,接到另
一个网络作为输入。然后,对于这个嫁接后的网络,做end-to-end的训练。也就是说梯
度需要从一个framework,如caffe,propagate到另一个framwork,如tensorflow。
google search了一下午,还没有什么头绪,谢谢指路! |
w***g 发帖数: 5958 | 2 - TF获得gradient
V = tf.Variable(...) # 这个是tf部分输入
Loss = some_function_of(V, Label)
DV = tf.gradient(Loss, V)[0]
然后计算就是
dv = sess.run(DV, feed_dict = {...})
- 传入gradient到tf
假设从tf最后一层是F, F被拷贝到caffe的第一层作为输入。
caffe back-propagate后得到的gradient为 df
定义
W = tf.Variable(...), 和F形状一样。
DummyLoss = tf.tensordot(F, W, axes=[所有axes]) (就是向量内积)
然后优化minimize DummyLoss,feed_dict加入{W: df}.
DummyLoss对F求导,正好就是W.
Caffe 应该也类似。
等我起个github project演示一下看能不能搞出来。我觉得最大的问题是如何让caffe
和TF都跑起来。
【在 w*****r 的大作中提到】 : 两个神经网络是用不同的framework写的,想把一个网络的中间结构作为输出,接到另 : 一个网络作为输入。然后,对于这个嫁接后的网络,做end-to-end的训练。也就是说梯 : 度需要从一个framework,如caffe,propagate到另一个framwork,如tensorflow。 : google search了一下午,还没有什么头绪,谢谢指路!
|
w***g 发帖数: 5958 | 3 我给你搞粗来了 https://github.com/aaalgo/nngraft
caffe嫁接到tf上,tf嫁接上caffe上,花式训练。
【在 w*****r 的大作中提到】 : 两个神经网络是用不同的framework写的,想把一个网络的中间结构作为输出,接到另 : 一个网络作为输入。然后,对于这个嫁接后的网络,做end-to-end的训练。也就是说梯 : 度需要从一个framework,如caffe,propagate到另一个framwork,如tensorflow。 : google search了一下午,还没有什么头绪,谢谢指路!
|
j*******h 发帖数: 1 | 4 还不如重新用tf实现caffe部分。
【在 w***g 的大作中提到】 : 我给你搞粗来了 https://github.com/aaalgo/nngraft : caffe嫁接到tf上,tf嫁接上caffe上,花式训练。
|
m****o 发帖数: 182 | 5 我觉得最快的办法是把两个结构用tf或者pytorch再实现一遍,然后再传入参数训练。
【在 w*****r 的大作中提到】 : 两个神经网络是用不同的framework写的,想把一个网络的中间结构作为输出,接到另 : 一个网络作为输入。然后,对于这个嫁接后的网络,做end-to-end的训练。也就是说梯 : 度需要从一个framework,如caffe,propagate到另一个framwork,如tensorflow。 : google search了一下午,还没有什么头绪,谢谢指路!
|
w***g 发帖数: 5958 | 6 同意。不过这个想法太星宿派了,我忍不住要实现一下。
【在 m****o 的大作中提到】 : 我觉得最快的办法是把两个结构用tf或者pytorch再实现一遍,然后再传入参数训练。
|
w*****r 发帖数: 197 | 7 此法属黑暗技能,专用于从github上caffe的野鸡fork中吸取内力。。。
【在 m****o 的大作中提到】 : 我觉得最快的办法是把两个结构用tf或者pytorch再实现一遍,然后再传入参数训练。
|
w*****r 发帖数: 197 | 8 学习了你的的代码,牛逼。。。
# tensorflow part, like caffe_tf.py, forward pass is wasted
_, dx = sess.run([tf_net.optimizer, tf_net.dX],
feed_dict = {tf_net.X: x, # 如过不feed新的x,tf能跑吗?会只做backforward运算
吗?
tf_net.dL1: dl1})
【在 w***g 的大作中提到】 : 我给你搞粗来了 https://github.com/aaalgo/nngraft : caffe嫁接到tf上,tf嫁接上caffe上,花式训练。
|
w*****r 发帖数: 197 | 9 这可是集深学之大成的招式啊~~~
你现在不用拿大量数据做训练,就可以用到原版的大网络了,横扫个把tier 2的
leaderboard估计是没问题了
【在 w***g 的大作中提到】 : 同意。不过这个想法太星宿派了,我忍不住要实现一下。
|
w***g 发帖数: 5958 | 10 应该不能这么搞。
拆开后第一次forward需要浪费掉,tf和caffe是一样的。
原因是不知道forward产生的结果哪些在backward里会用,不知道这些结果里面哪些
是保存在session状态里的,哪些需要人为导出。
我对这两个轮子的理解没到能重用第一次forward结果的地步。
【在 w*****r 的大作中提到】 : 学习了你的的代码,牛逼。。。 : # tensorflow part, like caffe_tf.py, forward pass is wasted : _, dx = sess.run([tf_net.optimizer, tf_net.dX], : feed_dict = {tf_net.X: x, # 如过不feed新的x,tf能跑吗?会只做backforward运算 : 吗? : tf_net.dL1: dl1})
|
g****t 发帖数: 31659 | 11 一次嫁接成功后,你打开了多次嫁接的黑暗之门。
T网络,G网络
可以画图:
T1-G2-T2-。。。
【在 w***g 的大作中提到】 : 同意。不过这个想法太星宿派了,我忍不住要实现一下。
|
m****o 发帖数: 182 | 12 onnx/onnx就是干这个事的吧?
【在 w***g 的大作中提到】 : 同意。不过这个想法太星宿派了,我忍不住要实现一下。
|