如何访问张量的内部维度?

时间:2018-04-30 06:00:20

标签: python tensorflow

我的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")

2 个答案:

答案 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]作为数组的访问器,您将返回一个没有第一个和最后一个元素的数组,从而有效地访问中间值