tensorflow中的pad详解

tf.pad 函数
pad ( 
    tensor , 
    paddings , 
    mode = 'CONSTANT' , 
    name = None , 
    constant_values = 0 
)

定义在:tensorflow/python/ops/array_ops.py

参见指南:张量变换>分割和连接

填充张量。 

此操作根据您指定的 paddings 来填充一个 tensor。paddings 是一个具有形状 [n, 2] 的整数张量,其中 n 是 tensor 的秩。对于每个输入维度 D,paddings [D, 0] 表示在该维度的 tensor 内容之前要添加多少个值,而 paddings[D, 1] 表示在该维度中的 tensor 内容之后要添加多少值。如果 mode 是 “REFLECT”,那么这两个paddings[D, 0] 和 paddings[D, 1] 不得大于 tensor.dim_size(D) - 1。如果 mode 是 “SYMMETRIC”,那么这两个 paddings[D, 0] 和 paddings[D, 1] 不得大于tensor.dim_size(D)。

输出的每个维度 D 的填充大小是:

paddings[D, 0] + tensor.dim_size(D) + paddings[D, 1]

例如:

# '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]]

参数:

  • tensor:张量。
  • paddings:int32 类型的张量。
  • mode:取值为 "CONSTANT"、"REFLECT" 或 "SYMMETRIC"(不区分大小写)
  • name:操作的名称(可选)。
  • constant_values:在 “CONSTANT” 模式下,要使用的标量填充值,必须与 tensor 具有相同类型。

返回:

该函数返回一个张量,与 tensor 具有相同的类型。

可能引发的异常:

  • ValueError:模式不是 "CONSTANT"、"REFLECT" 或 "SYMMETRIC" 中的一种时
 tf.pad(tensor, paddings, mode="CONSTANT", name=None, constant_values=0): 

tensor:就是输入,paddings,就是需要扩张的维度,后面其他的参数的可以不管

tf.pad()就是扩充维度,比如:t=tf.constant([1,2,3])


 

'''
这是一个一维向量,可以通过print(t.get_shape())看维度
先介绍一个概念,paddings=[a,b,c,d],分别从不同维度加0,
因为是一维向量,所以tf.pad(t,[[1,1]])只能从左右加0输出结果为[[0 1 2 3 0]],

当t=tf.constant([[1,2,3]])时,则是一个二维矩阵,就加了一个[],shape=(1,3)
如果a=[1,1],b=[2,2],则上下加一排0,左右加2排0,结果为
[[0 0 0 0 0 0 0]
 [0 0 1 2 3 0 0]
 [0 0 0 0 0 0 0]]

在二维上面加0,当c=[1,1],t=tf.constant([[[1,2,3], [2,3,4],[2,1,4]],
                                        [[1,2,3], [2,3,4],[2,1,4]],
                                        [[1,2,3],  [2,3,4],[2,1,4]]])

时,即paddings=[[1,1],[2,2],[1,1]]输出为下面所示,shape=(3,3,3)变成了(5,7,5)
'''

import tensorflow as tf

t = tf.constant([[[1, 2, 3], [2, 3, 4], [2, 1, 4]],
                 [[1, 2, 3], [2, 3, 4], [2, 1, 4]],
                 [[1, 2, 3], [2, 3, 4], [2, 1, 4]]])
t2 = tf.constant([[1, 2, 3]])
print(t.get_shape)
print(t2.get_shape())

a = tf.pad(t, [[1, 1], [2, 2], [1, 1]])
c = tf.pad(t2, [[1, 1], [2, 2]])

with tf.Session() as sess:
    a, c = sess.run([a, c])
    print(a)
    print(a.shape)
    print(c)

猜你喜欢

转载自blog.csdn.net/qq_30638831/article/details/81407363