tf.pad函数功能介绍

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

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

其中:

tensor是待填充的张量
paddings指出要给tensor的哪个维度进行填充,以及填充方式,要注意的是paddings的rank必须和tensor的rank相同
mode指出用什么进行填充,’CONSTANT’表示用0进行填充(总共有三种填充方式,本文用CONSTANT予以说明pad函数功能)
name就是这个节点的名字了

二维张量(向量)

测试代码如下:

# 创建一个二维变量,默认执行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))

运行结果如下:

tf.pad函数功能介绍

上图是 print(sess.run(vct))的执行结果,创建了一个3行4列的二维矩阵

tf.pad函数功能介绍

上图是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列.
修改一下pad中的数字,再看一下效果,体会一下.

张量(三维)

    测试代码如下:

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))

运行结果如下

tf.pad函数功能介绍

上图所示的是print(sess.run(tsr))的运行结果,我定义了一个张量维度是[2,3,4],从结果直观理解是,输出讲这个张量处理成了2个向量(3行4列).

tf.pad函数功能介绍

上图所示是print(sess.run(tsr_pad2))的运行结果,[0,0]表示tensor的第一个维度不填充,后面的跟二维张量填充一样.*

接下来只对tensor的第一维进行填充,看下效果,仍旧是上面的代码,只是吧pad2那一行改为:

pad2 = np.array([[1, 1], [0, 0], [0, 0]])

运行结果如下:

tf.pad函数功能介绍

很明显,在原来基础上上下各填充了一个全零二维数组,此时tsr的维度变成[4,3,4].

 

参考博客‘:https://blog.csdn.net/yy_diego/article/details/81563160

上一篇:给深度学习模型构建数据迭代器


下一篇:C++基于armadillo im2col的实现