tf.pad函数功能详细介绍(易懂)

tf.pad()函数主要是对张量在各个维度上进行填充,该函数的参数如下所示:

pad(
    tensor,
    paddings,
    mode='CONSTANT',
    name=None
)

其中:

  1. tensor:是待填充的张量

  2. paddings:指出要给tensor的哪个维度进行填充,以及填充方式,要注意的是paddings的rank必须和tensor的rank相同

  3. mode:(总共有三种填充方式,本文用CONSTANT予以说明pad函数功能)
    可以取三个值,分别是"CONSTANT" ,“REFLECT”,“SYMMETRIC”

    mode=“CONSTANT” 填充0

    mode="REFLECT"映射填充,上下(1维)填充顺序和paddings是相反的,左右(零维)顺序补齐

    mode="SYMMETRIC"对称填充,上下(1维)填充顺序是和paddings相同的,左右(零维)对称补齐

  4. name:就是这个节点的名字了

1、mode=“CONSTANT” 填充0

二维张量

# 创建一个二维变量,默认执行CONSTANT填充
vct = tf.Variable(tf.ones([3, 4]), name="vct")
# 指定填充方式,
pad1 = np.array([[1, 2], [3, 4]])
# tf.pad进行填充
vct_pad1 = tf.pad(vct, pad1, name='pad_1')
# 创建会话
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(vct))
    print(sess.run(vct_pad1))

运行结果如下:
在这里插入图片描述
上图是 print(sess.run(vct))的执行结果,创建了一个3行4列的二维矩阵
在这里插入图片描述
上图是print(sess.run(vct_pad1)的执行结果,由图可得:
(1) tensor的维度是n,则pad就有n行,因为pad的每一行负责对tensor的某一个维度进行填充.
(2) 在二维中,pad的第一行对tensor的行进行填充,[1, 2]中的第一个元素表示在tensor上面填充1行,第二个元素表示在tensor下面填充2行.
(3) 在二维中,pad的第二行对tensor的列进行填充,[3, 4]中的第一个元素表示在tensor左边填充3列,第二个元素表示在tensor右边填充4列.

**

三维张量

tsr = tf.Variable(tf.ones([2, 3, 4]), name="tsr")
pad2 = np.array([[0, 0], [1, 2], [3, 4]])
tsr_pad2 = tf.pad(tsr, pad2, name='pad_2')

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(tsr))
    print(sess.run(tsr_pad2))

运行结果如下:
在这里插入图片描述
上图所示的是print(sess.run(tsr))的运行结果,我定义了一个张量维度是[2,3,4],从结果直观理解是,输出讲这个张量处理成了2个向量(3行4列).
在这里插入图片描述
上图所示是print(sess.run(tsr_pad2))的运行结果,[0,0]表示tensor的第一个维度不填充,后面的跟二维张量填充一样.*

接下来只对tensor的第一维进行填充,看下效果,仍旧是上面的代码,只是吧pad2那一行改为:
pad2 = np.array([[1, 1], [0, 0], [0, 0]])
运行结果如下:
在这里插入图片描述
很明显,在原来基础上上下各填充了一个全零二维数组,此时tsr的维度变成[4,3,4].

2、mode="REFLECT"映射填充

  t=[[2,3,4],[5,6,7]]
        print(tf.pad(t,[[1,1],[2,2]],"REFLECT"))

输出:

[[7, 6, 5, 6, 7, 6, 5],
[4, 3, 2, 3, 4, 3, 2],
[7, 6, 5, 6, 7, 6, 5],
[4, 3, 2, 3, 4, 3, 2]]

1,2代表上方一行0,下方2行0;2,3代表列坐标放2列0,右边放3列0

3、mode="SYMMETRIC"对称填充

t=[[2,3,4],[5,6,7]]
    print(tf.pad(t,[[1,1],[2,2]],"SYMMETRIC"))

输出:
[[3, 2, 2, 3, 4, 4, 3],
[3, 2, 2, 3, 4, 4, 3],
[6, 5, 5, 6, 7, 7, 6],
[6, 5, 5, 6, 7, 7, 6]]

参考如下:
https://blog.csdn.net/yy_diego/article/details/81563160
https://blog.csdn.net/qq_40994943/article/details/85331327

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值