Machine learning caffe能重塑层做转置吗

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的数据 让我们看一个简单的例子。 假设您有一个

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,其中包含值

[[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实现