Python 从无形状的向量生成零矩阵
我得到了一个形状张量Python 从无形状的向量生成零矩阵,python,tensorflow,Python,Tensorflow,我得到了一个形状张量[None,1,None](第一个None是批量大小,对应于例如[1,1,28]),我想生成一个[None,1,None,None]形式的矩阵[None,1,None,None],其中最后两个None是相同的(因此在示例中是[1,1,28,28]) 假设d是形状的向量[None,1,None] 我尝试的是: z = tf.zeros_like(tf.broadcast_to(d, tf.concat([d.shape, d.shape[-1:]], axis=0)), tf.
[None,1,None]
(第一个None是批量大小,对应于例如[1,1,28]
),我想生成一个[None,1,None,None]
形式的矩阵[None,1,None,None]
,其中最后两个None是相同的(因此在示例中是[1,1,28,28]
)
假设d是形状的向量[None,1,None]
我尝试的是:
z = tf.zeros_like(tf.broadcast_to(d, tf.concat([d.shape, d.shape[-1:]], axis=0)), tf.int32)
其思想是:我将d的形状与最后一个形状d合并,以保持大小正确,然后将d广播到这些形状,使用广播的结果生成类似于
的零。我知道在这种情况下,仅仅tf.zeros
不起作用,因为它不适用于None
形状。
但此方法失败,导致以下错误:
传递给'ConcatV2'Op的'values'的列表中的张量具有不完全匹配的类型[,]。
如果您有一个三维张量a
,并且希望用零填充一个四维张量b
,如果b
的前三个维度与a
相同,第四个维度与a
的第三个维度相同,您可以执行以下操作:
s = tf.shape(a)
s = tf.concat([s, s[-1:]], axis=0)
b = tf.zeros(s, a.dtype)
请为您的问题添加一个工作代码示例。您是指初始化?如前所述,它只有在我使用:
d=tf.convert_to_tensor([[1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0]])
(因此形状是完全已知的)我正在寻找一种方法使它对部分已知的形状起作用。实际上,这比我的解决方案要好得多。非常感谢。