Machine learning caffe能重塑层做转置吗
Caffe已经实现了重塑层,但假设我想首先重塑一个1,n,k,p到1,a,b,k,p的blob,其中n=a*b,然后将其转置到形状1,b,a,k,p,如何实现这个操作,我知道我可以编写一个单独的python层,并使用numpy.reforme和numpy.transpose执行所有这些操作,但这并不高效,是吗?转置和重塑是两种根本不同的操作: 虽然“重塑”仅更改水滴的形状,但它不会影响其内部结构,因此可以非常高效地执行。另一方面,转置重新排列blob的数据 让我们看一个简单的例子。 假设您有一个2x2的blob,其中包含值Machine learning caffe能重塑层做转置吗,machine-learning,neural-network,computer-vision,deep-learning,caffe,Machine Learning,Neural Network,Computer Vision,Deep Learning,Caffe,Caffe已经实现了重塑层,但假设我想首先重塑一个1,n,k,p到1,a,b,k,p的blob,其中n=a*b,然后将其转置到形状1,b,a,k,p,如何实现这个操作,我知道我可以编写一个单独的python层,并使用numpy.reforme和numpy.transpose执行所有这些操作,但这并不高效,是吗?转置和重塑是两种根本不同的操作: 虽然“重塑”仅更改水滴的形状,但它不会影响其内部结构,因此可以非常高效地执行。另一方面,转置重新排列blob的数据 让我们看一个简单的例子。 假设您有一个
[[0, 1], [2, 3]]
在内存中,这些值以1D连续方式存储,行主键:
[0, 1, 2, 3]
如果将水滴重塑为4x1
[[0], [1], [2], [3]]
内存中元素的基本排列没有改变。
但是,如果您将blob转换为
[[0, 2], [1, 3]]
基本安排也更改为
[0, 2, 1, 3]
因此,不能使用“重塑层”来转置blob
Caffe SSD分支有一层,相当于转置
关于性能的说明:
虽然重塑只会更改blob的头O1运行时和空间,但transpose需要重新安排内存中的元素,从而占用时间和空间。
更糟糕的是,如果使用numpy.transpose执行任务,则意味着您在CPU主机内存中进行了转置,从而在CPU和GPU内存之间添加了两个同步操作同步GPU->CPU,转置CPU,同步CPU->GPU。
因此,如果您别无选择,只能转置aka Permute,请确保您有一个GPU实现。转置和重塑是两个根本不同的操作:
虽然“重塑”仅更改水滴的形状,但它不会影响其内部结构,因此可以非常高效地执行。另一方面,转置重新排列blob的数据
让我们看一个简单的例子。
假设您有一个2x2的blob,其中包含值
[[0, 1], [2, 3]]
在内存中,这些值以1D连续方式存储,行主键:
[0, 1, 2, 3]
如果将水滴重塑为4x1
[[0], [1], [2], [3]]
内存中元素的基本排列没有改变。
但是,如果您将blob转换为
[[0, 2], [1, 3]]
基本安排也更改为
[0, 2, 1, 3]
因此,不能使用“重塑层”来转置blob
Caffe SSD分支有一层,相当于转置
关于性能的说明:
虽然重塑只会更改blob的头O1运行时和空间,但transpose需要重新安排内存中的元素,从而占用时间和空间。
更糟糕的是,如果使用numpy.transpose执行任务,则意味着您在CPU主机内存中进行了转置,从而在CPU和GPU内存之间添加了两个同步操作同步GPU->CPU,转置CPU,同步CPU->GPU。
因此,如果您除了转置aka Permute之外别无选择,请确保您有一个GPU实现