tf.pad()

网上看到很多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.]]]
posted @ 2018-10-23 10:50  luoganttcc  阅读(194)  评论(0编辑  收藏  举报