最近实现tensorflow模型转换为caffe前向计算的时候存在一个数据维度的问题,即tf的数据格式一般习惯把channel放在最后一维,caffe一般放在第一维;即将一个dxc的二维矩阵转置成为cxd;如何不需要额外内存的情况下,完成这一操作;
具体如图所示:
![c57f6b6af9d765a0c3a6f16e366e31c6.png](https://i-blog.csdnimg.cn/blog_migrate/43d2cf0c6e8d1b38282ad97bed5d33aa.png)
可以按照上图找一下规律,发现:
![6b54f832f96d089c4cdf84cdbbf22c82.png](https://i-blog.csdnimg.cn/blog_migrate/0775e704525724dcd0e7667c7017d534.png)
可以发现,数据的移动可以演变为一个循坏;遍历完每个“环”,那么任务就完成了;
循环过程需要找到后继节点;
int getNext(int i, int m, int n) //m为转置后的行数,n为转置后的列数
{
return (i%n)*m + i/n;
}
填补的时候需要找到前驱节点;
int getPre(int