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]])
(因此形状是完全已知的)我正在寻找一种方法使它对部分已知的形状起作用。实际上,这比我的解决方案要好得多。非常感谢。