(1)二维,我们可以这样理解,原始的t的大小为2x3,paddings必须是二维矩阵,并且它的行数和t的维度相同
(2)因为t的大小为2x3,是二维,因此paddings的行数是2
(3)对于i=0,1,paddings[i][0]表示对t在此维度的前面进行填充,paddings[i][1]表示对t在此维度的后面进行填充
(4)比如 i=0,paddings[0][0]=1,paddings[0][1]=1,那么对于t的第一个维度,原来的个数是2
(5)填充后的个数变为paddings[0][0]+2+paddings[0][1]=4
(6)则对于i=1,paddings[1][0]=2,paddings[1][1]=2,对于t的第二个维度,原来的个数是3
(7)填充后的个数变为paddings[1][0]+2+paddings[1][1]=6
t = tf.constant([[1, 2, 3], [4, 5, 6]])
paddings = tf.constant([[1, 1,], [2, 2]])
# 'constant_values' is 0.
# rank of 't' is 2.
tf.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]]
tf.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]]
tf.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]]
(8)三维至高维,经过前面的说明,此时应该很好理解了
t = tf.ones([2,2,3]) # [bs,len,hs]
paddings = tf.constant([[1,2],[1,1],[2, 2]])
a = tf.pad(t, paddings, "CONSTANT")
print(a)
"""
输出如下:
tf.Tensor(
[[[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]]
[[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 1. 1. 0. 0.]
[0. 0. 1. 1. 1. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]]
[[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 1. 1. 0. 0.]
[0. 0. 1. 1. 1. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]]
[[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]]
[[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]]], shape=(5, 4, 7), dtype=float32)
"""
(9)很明显,每个维度上的个数变化很清楚~