Python 如何获取张量的内部维数?

Python 如何获取张量的内部维数?,python,tensorflow,Python,Tensorflow,myconv2d函数的输出是一个4-D张量[64,32,32,64]=[批次大小、输出高度、输出宽度、过滤器数量]。我想在输出矩阵的两边各做3行,两边各做3列。所以,这就是为什么我想创建一个类似的张量(掩码张量),大小[64,26+3(零垫),26+3(零垫),64],并与原始矩阵相乘。我想访问[26,26]并在其上添加零填充。。。 如何获取张量的内部维数 import tensorflow as tf drop_matrix = tf.constant(1, shape=[64, 26, 2

my
conv2d
函数的输出是一个4-D张量
[64,32,32,64]=[批次大小、输出高度、输出宽度、过滤器数量]
。我想在输出矩阵的两边各做3行,两边各做3列。所以,这就是为什么我想创建一个类似的张量(掩码张量),大小
[64,26+3(零垫),26+3(零垫),64]
,并与原始矩阵相乘。我想访问
[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")

尝试此操作以从数组中删除第一个和最后一个值:

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

您不必访问内部维度,但可以通过提供张量的每个维度的填充大小列表来填充每个维度:

>>> 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>
drop_matrix=tf.constant(1,shape=[64,26,26,64],dtype=tf.float32) >>>降维矩阵 >>>x=tf.pad(drop_矩阵,[[0,0],[3,3],[3,3],[0,0]) >>>x 可以使用constant_values参数将要填充的值设置为某个值,但默认值为0,因此不需要这样做。为了澄清,每个列表中的2个元素都在该维度的任一侧填充,因此[0,3]可以为该维度在一侧填充


编辑的示例适合这种情况

因此,基本上您是在问如何在python中访问数组的中间值?是的,完全正确……但在您的解决方案中,我想我有一个问题,我可以在一段时间内用零或任何其他常量值填充所有维度。但我不想填充我的4D张量的第一个和最后一个维度。。。我只想填充内部维度,即[26,26]:(因此使用[[0,0],[3,3],[3,3],[0,0]。[3,3],[0,0]。这会填充中间的2个维度,每边3个,但填充第一个和最后一个维度,每边0个,因此没有填充。在我的示例中,第一个维度也不会更改。这是什么意思“但是在第一个维度和最后一个维度的每一侧都用0填充,所以没有填充”?“来自Tensorflow文档”对于输入的每个维度D,填充[D,0]表示在该维度的张量内容之前要添加多少值,填充[D,1]表示在该维度的张量内容之后要添加多少值“。我想你是这个意思???更改了示例以更适合你的情况。是的,我的意思是,但它们使用了一种相当复杂的方式来表示索引。每边0表示添加了0个额外索引,因此没有进行填充。我尝试了这种方式t=tf.pad(drop_matrix_one_full[1:-1],paddings,“CONSTANT”)……它不起作用:(