我的conv2d
函数的输出是4-D张量[64, 32, 32, 64] = [batch_size, output_height, output_width, number of filters]
。我想在两侧做3行,并且在两侧也有3列到输出矩阵的零。所以,这就是为什么我想要创建一个大小为[64, 26+3(zero_pad), 26+3 (zero_pad), 64]
的类似张量(mask_tensor)并与原始矩阵相乘。我想到访问[26, 26]
并在其上添加零填充...
如何访问张量的内部维度?
import tensorflow as tf
drop_matrix = tf.constant(1, shape=[64, 26, 26, 64], dtype=tf.float32)
paddings = tf.constant([leave this dimension ,pick this dimension, pick this dimension, leave this dimension] )
t = tf.pad(drop_matrix_one_full, paddings, "CONSTANT")
答案 0 :(得分:1)
您不必访问内部尺寸,但可以通过提供张量的每个尺寸的填充尺寸列表来填充每个尺寸:
>>> drop_matrix = tf.constant(1, shape=[64, 26, 26, 64], dtype=tf.float32)
>>> drop_matrix
<tf.Tensor 'Const:0' shape=(64, 26, 26, 64) dtype=float32>
>>> x = tf.pad(drop_matrix, [[0,0], [3,3], [3,3], [0,0]])
>>> x
<tf.Tensor 'Pad:0' shape=(64, 32, 32, 64) dtype=float32>
您可以使用constant_values参数将值设置为pad,但默认值为0,因此不需要。为了澄清,每个列表中的2个元素在该维度的任一侧填充,因此对于该维度,只能在[0,3]的一侧填充。
编辑示例以适应情况
答案 1 :(得分:0)
尝试此操作以从数组中删除第一个和最后一个值:
import tensorflow as tf
drop_matrix = tf.constant(1, shape=[64, 26, 26, 64], dtype=tf.float32)
paddings = tf.constant([leave this dimension ,pick this dimension, pick this dimension, leave this dimension][1:-1] )
t = tf.pad(drop_matrix_one_full, paddings, "CONSTANT")
通过添加[1:-1]
作为数组的访问器,您将返回一个没有第一个和最后一个元素的数组,从而有效地访问中间值。