Python Keras层中np.newaxis的操作:乘法与级联

Python Keras层中np.newaxis的操作:乘法与级联,python,keras,concatenation,Python,Keras,Concatenation,我有一个关于Keras中np.newaxis的问题。我有一个维数为[None,64]的x_6,我可以用它扩展到4维 temp = Lambda(lambda x: x[:,np.newaxis,np.newaxis,:])(x_6) 与大小为(None,None,None,64)的层x_1相乘有效 但是,由于形状不匹配,将两者连接起来是不起作用的 x_1 = Concatenate(axis=-1)([x_1,temp]) 有人知道问题出在哪里吗? 错误消息是 ValueError: A '

我有一个关于Keras中np.newaxis的问题。我有一个维数为[None,64]的x_6,我可以用它扩展到4维

temp = Lambda(lambda x: x[:,np.newaxis,np.newaxis,:])(x_6)
与大小为(None,None,None,64)的层x_1相乘有效

但是,由于形状不匹配,将两者连接起来是不起作用的

x_1 = Concatenate(axis=-1)([x_1,temp])
有人知道问题出在哪里吗? 错误消息是

ValueError: A 'Concatenate' layer requires inputs with matching shapes excpet for the concat axis. Got input shapes: [(None,None,None,64),(None,1,1,64)]
将np.newaxis更改为None会产生相同的问题

另一个没用的把戏

temp = Lambda(lambda x: K.expand_dims(x,axis=1))(x_6)
temp = Lambda(lambda x: K.expand_dims(x,axis=1))(temp)

如果批处理旁边的
None
都是1,那么
Input
中的特定形状如何?输入具有形状(None,None,3),因为输入图像的尺寸未知。等等,如果形状不相等,则无法进行压缩,就像回溯所说的。为什么我可以乘法呢?这可以归结为乘法,它可以进行广播,而串联则不能。因此,您只需要一种方法来将temp广播到所需的形状,即[x_1.shape[0],x_1.shape[1],x_1.shape[2],temp.shape[3]],以便沿轴-1(=3)连接。这在某种程度上可能与tf.broadcast_to有关。否则,您可以使用乘法和所有1以一种丑陋的方式进行广播。
temp = Lambda(lambda x: K.expand_dims(x,axis=1))(x_6)
temp = Lambda(lambda x: K.expand_dims(x,axis=1))(temp)