关于用另外一种框架重写模型

之前有几次尝试过用另外一种框架重写模型,包括caffe->tf,pytorch<-->tf

如果作者有release code和pretrained model weight,那其实很简单,就是用新框架重写一下模型结构,然后转化一下权重,重新load就完事了,需要注意几点:

1. 不同框架可能同一种op的实现方式略有差异,但是基本上不会影响最后的整体结果(细微的差异肯定是有的):比如当input feature map的size是偶数,stride=2的时候,总有一行边界无法计算,这事tf和pytorch的CONV的处理方式会略有差异,tf是用左上角部分,pytorch是用右下角部分(当然一开始为了简单起见,可以挑选一个合适的input image size,让中间层的feature map size都是奇数,这样就会不会有这个问题了)

2. 重写模型的时候,最好按照原始code中模型的构建顺序来写,这样load参数的时候,就不需要考虑2个不同框架之间variable的mapping,

3. 当然对于TF-Pytorch转换,TF中的ckpt文件用saver.restore读出来的权重是乱序的,这时候可以先跑下tf的inference model,然后tf.global_variables()得到的就是和Pytorch一样的variable顺序了,就可以构造权重的mapping关系了

4. 重写的目的就是要:每层的输出尽可能一致。所以如果最终inference的结果与原始code不一致,就要单独的考察每层的输出。(甚至有时候需要把出错层的权重拿出来,单独构造一层做对比)

5. 一开始可以构造简单的输入case,比如全0的矩阵

6. 注意BN层4个变量的对应关系(tf计算bn的时候,注释variance虽然没有写根号,但是实际运算会开根号)

 

如果能转换正确,后面只需要写下loss function和dataloader就能自己train起来了。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值