tensorflow版本2.x
tf.pad()函数用来对tensor某个维度进行填充或者复制,有3种用法:
t = tf.constant([[1, 2, 3], [4, 5, 6]])
paddings = tf.constant([[1, 2], [5, 2]])
print(t)
t2 = tf.pad(t, paddings, "CONSTANT")
print(t2)
运行结果:
tf.Tensor(
[[1 2 3]
[4 5 6]], shape=(2, 3), dtype=int32)
.Tensor: shape=(5, 10), dtype=int32, numpy=
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 2, 3, 0, 0],
[0, 0, 0, 0, 0, 4, 5, 6, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)>
此处paddings 中的[1, 2]代表第一个维度前面填充1行,后面填充2行;
[5,2]代表第二个维度前面填充5列,后面填充2列;
如果要填充其他常数,可以使用tf.pad(t, paddings, "CONSTANT", 1)
t = tf.constant([[1, 2, 3], [4, 5, 6]])
paddings = tf.constant([[1, 1], [2, 2]])
print(t)
t2 = tf.pad(t, paddings, "REFLECT")
t2
运行结果
tf.Tensor(
[[1 2 3]
[4 5 6]], shape=(2, 3), dtype=int32)
.Tensor: shape=(4, 7), dtype=int32, numpy=
array([[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]], dtype=int32)>
此处[1, 1]代表第一个维度前面镜像复制一行(以原来的第一行作为对称轴,如下图),后面复制一行,其他类似
此方法与REFLECT类似,区别在于没有对称轴
t = tf.constant([[1, 2, 3], [4, 5, 6]])
paddings = tf.constant([[1, 1], [2, 2]])
print(t)
t2 = tf.pad(t, paddings, "SYMMETRIC")
t2
运行结果
tf.Tensor(
[[1 2 3]
[4 5 6]], shape=(2, 3), dtype=int32)
.Tensor: shape=(4, 7), dtype=int32, numpy=
array([[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]], dtype=int32)>