Skip to content

Latest commit

 

History

History
93 lines (82 loc) · 2.41 KB

Reshape.md

File metadata and controls

93 lines (82 loc) · 2.41 KB

Reshape

layer {
    name: "reshape"
    type: "Reshape"
    bottom: "data"
    top: "reshape"
    reshape_param {
	shape{
	    dim: 1
	    ...
	}
	axis: 0
	num_axes: -1
    }
}
paddle.fluid.layers.reshape(
    x, 
    shape, 
    actual_shape=None, 
    act=None, 
    inplace=False, 
    name=None
)

功能差异

reshape机制的差异

Caffe:使用0和-1分别代表复制的维度数和推断的维度数,但使用了axisnum_axes定义了其他的使用方法。当单独使用axis时,表示输出数据的前axis个维度由原始输入数据的前axis个维度复制而来,而shape里的维度信息则添加在这几个维度之后;当同时使用axisnum_axes两个参数时,表示shape中的第1个维度至第1+num_axes维度定义为输出中的第axis+1axis+num_axes+1个维度,其余维度的维度数由原始输入数据的维度数代替,直至输出数据和输入数据摊平成一维时大小相同。
PaddlePaddle:使用0和1分别代表复制的维度数和推断的维度数。

输出的差异

Caffe:Reshape层在不改变数据的情况下改变输入blob的维度,处理过程只在输入blob上进行,没有进行数据的拷贝。
PaddlePaddle:可以通过设置inplace表示是否对数据进行拷贝。

其他差异

Caffe:激活函数需要由另外一层完成。
PaddlePaddle:可以通过设置act对reshpe后的tensor变量执行非线性激活。

代码示例

# Caffe示例:  
# 输入shape:(2,4,6)
layer {
    name: "reshape"
    type: "Reshape"
    bottom: "data"
    top: "reshape"
    reshape_param {
	shape {
	    dim: 3
	    dim: 2
	}
	axis: 2
	num_axes: 1
    }
}
# 输出shape:(2,4,3,2)
layer {
    name: "reshape"
    type: "Reshape"
    bottom: "data"
    top: "reshape"
    reshape_param {
	shape {
	    dim: 3
	    dim: 2
	    dim: 4
	}
	axis: 1
    }
}
# 输出shape:(2,3,2,4)

# PaddlePaddle示例:  
# 输入shape:(2,4,6)
output1 = paddle.fluid.layers.reshape(x = inputs , shape = [2,4,-1,3])
# 输出shape:(2,4,2,3)
output2 = paddle.fluid.layers.reshape(x = inputs , axis = [0,2,2,6])
# 输出shape:(2,2,2,6)