TensorFlow中关于pad函数的详细理解

来源:互联网 发布:淘宝可以上闲鱼吗 编辑:程序博客网 时间:2024/05/29 16:22


今天用到pad函数,看文档看了老半天,后面终于弄懂了。
以下是本人的理解总结


文档的内容:
# 't' is [[1, 2, 3], [4, 5, 6]].
# 'paddings' is [[1, 1,], [2, 2]].
# 'constant_values' is 0.
# rank of 't' is 2.
pad(t, paddings, "CONSTANT") ==> [[0, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 2, 3, 0, 0],
 [0, 0, 4, 5, 6, 0, 0],
 [0, 0, 0, 0, 0, 0, 0]]


pad(t, paddings, "REFLECT") ==> [[6, 5, 4, 5, 6, 5, 4],
[3, 2, 1, 2, 3, 2, 1],
[6, 5, 4, 5, 6, 5, 4],
[3, 2, 1, 2, 3, 2, 1]]


pad(t, paddings, "SYMMETRIC") ==> [[2, 1, 1, 2, 3, 3, 2],
  [2, 1, 1, 2, 3, 3, 2],
  [5, 4, 4, 5, 6, 6, 5],
  [5, 4, 4, 5, 6, 6, 5]]
  
思路理解:
tf.pad的使用,第一个是填充0,后面两个是复制前几行或者列
[1,1],[2,2]
[1,1]指的是向上扩充一行,向下扩充一行
[2,2]指的是向左扩充2列,向右扩充2列
1.CONSTANT模式,按上下左右填充几行或者几列的0
paddings=[[1,1],[2,2]]的意思是向上填充一行0,向下填充一行0,向左填充二行0,向右填充两行0


向上填充一行0,变成
0,0,0
1,2,3
4,5,6


向下填充一行0
0,0,0
1,2,3
4,5,6
0,0,0


向左填充二行0
0,0,0,0,0
0,0,1,2,3
0,0,4,5,6
0,0,0,0,0


向右填充两行0
0,0,0,0,0,0,0
0,0,1,2,3,0,0
0,0,4,5,6,0,0
0,0,0,0,0,0,0






  
2.REFLECT模式,首先要定好边缘(可理解为对称轴),按边缘翻(边缘不复制)
比如刚开始
1, 2, 3
4, 5, 6   



向上翻一行,以123为对称轴
4,5,6
1,2,3
4,5,6


向下翻一行,以4,5,6为对称轴
4,5,6
1,2,3
4,5,6
1,2,3


以列4,1,4,1为对称轴,向左翻二行
6,5,4,5,6
3,2,1,2,3
6,5,4,5,6
3,2,1,2,3


以列6,3,6,3为对称轴,向右翻2行
6,5,4,5,6,5,4
3,2,1,2,3,2,1
6,5,4,5,6,5,4
3,2,1,2,3,2,1




3.SYMMETRIC类似的,唯一的区别是把边缘(也就是对称轴)也复制了,从对称轴开始复制


比如刚开始
1, 2, 3
4, 5, 6   



向上翻一行,以123为对称轴,从对称轴开始复制


1,2,3
1,2,3
4,5,6


向下翻一行,以4,5,6为对称轴
1,2,3
1,2,3
4,5,6
4,5,6


以列1,1,4,4为对称轴,向左翻二行
2,1,1,2,3
2,1,1,2,3
5,4,4,5,6
5,4,4,5,6


以列3,3,6,6为对称轴,向右翻2行
2,1,1,2,3,3,2
2,1,1,2,3,3,2
5,4,4,5,6,6,5
5,4,4,5,6,6,5





























  
   
原创粉丝点击