网上看到很多tf.pad的文章,很多都语焉不详,需自己动手操作才能真正理解,
pad,一言以蔽之,就是在矩阵的周围补0。
1. 对于二维矩阵,就是在 上 ,下,左,右补0
#pad1 = np.array([[‘上’,‘下’], [‘左’,‘右’ ]])
import numpy as np
import tensorflow as tf
# 创建一个二维变量,默认执行CONSTANT填充
vct = tf.Variable(tf.ones([3, 4]), name="vct")
# 指定填充方式,
#pad1 = np.array([['上','下'], ['左','右' ]])
pad_上边补1行= np.array([[1,0], [0, 0]])
pad_下边补2行= np.array([[0,2], [0, 0]])
pad_左边补3行= np.array([[0,0], [3, 0]])
pad_右边补4行= np.array([[0,0], [0, 4]])
# tf.pad进行填充
vct_上边补1行 = tf.pad(vct, pad_上边补1行)
vct_下边补2行 = tf.pad(vct, pad_下边补2行)
vct_左边补3行 = tf.pad(vct, pad_左边补3行)
vct_右边补4行 = tf.pad(vct, pad_右边补4行)
#vct_pad1 = tf.pad(vct, pad1, name='pad_1')
# 创建会话
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print('原始矩阵')
print(sess.run(vct))
print('上边补1行')
print(sess.run(vct_上边补1行))
print('下边补2行')
print(sess.run(vct_下边补2行))
print('左边补3行')
print(sess.run(vct_左边补3行))
print('vct_右边补4行')
print(sess.run(vct_右边补4行))
原始矩阵
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
上边补1行
[[ 0. 0. 0. 0.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
下边补2行
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
左边补3行
[[ 0. 0. 0. 1. 1. 1. 1.]
[ 0. 0. 0. 1. 1. 1. 1.]
[ 0. 0. 0. 1. 1. 1. 1.]]
vct_右边补4行
[[ 1. 1. 1. 1. 0. 0. 0. 0.]
[ 1. 1. 1. 1. 0. 0. 0. 0.]
[ 1. 1. 1. 1. 0. 0. 0. 0.]]
对于三维矩阵你可以理解为那是一幢楼,三维矩阵的由二维矩阵构成,每个二维矩阵相当于一个楼层。
1. 对于三维矩阵的pad,就是在 顶楼,底楼 ,每层楼的上 ,下,左,右补0
#pad1 = np.array([[‘顶’,‘底’],[‘上’,‘下’], [‘左’,‘右’ ]])
import numpy as np
import tensorflow as tf
tsr = tf.Variable(tf.ones([2, 3, 4]), name="tsr")
pad_top = np.array([[1, 0], [0, 0], [0, 0]])
pad_left = np.array([[0, 0], [0, 0], [3, 0]])
tsr_pad_top = tf.pad(tsr, pad_top, name='pad_top')
tsr_pad_left = tf.pad(tsr, pad_left, name='pad_left')
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print('original tensor')
print(sess.run(tsr))
print(' pad top')
print(sess.run(tsr_pad_top))
print('pad left')
print(sess.run(tsr_pad_left))
original tensor
[[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]]
pad top
[[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]]
pad left
[[[ 0. 0. 0. 1. 1. 1. 1.]
[ 0. 0. 0. 1. 1. 1. 1.]
[ 0. 0. 0. 1. 1. 1. 1.]]
[[ 0. 0. 0. 1. 1. 1. 1.]
[ 0. 0. 0. 1. 1. 1. 1.]
[ 0. 0. 0. 1. 1. 1. 1.]]]