如何拼接[None,192]与[1,128]张量以得到[None,328]的神经网络输出
问题原因
Concatenate层的拼接规则是:所有输入张量除了拼接轴之外的其他维度必须完全相等。你当前的两个输入张量形状分别为(None, 192)和(1, 128),第一维一个是动态batch维度、一个是固定值1,不符合拼接要求,因此触发报错。
解决方案
你需要先把形状为(1,128)的常量张量b,沿着第一维复制和输入a的batch大小相等的次数,得到形状为(None, 128)的张量后再做拼接。以下是TensorFlow/Keras环境下的实现代码:
import tensorflow as tf from tensorflow.keras.layers import Concatenate, Lambda # 你已定义的常量张量b,形状为(1,128) b = tf.constant(value=..., shape=(1, 128)) # 自定义Lambda层实现b的动态复制,匹配a的batch维度 def expand_b(inputs): input_a, input_b = inputs batch_size = tf.shape(input_a)[0] # 沿第一维复制batch_size次,第二维保持不变 return tf.tile(input_b, [batch_size, 1]) b_expanded = Lambda(expand_b)([a, b]) # 执行拼接,输出形状为(None, 320) c = Concatenate(axis=-1, name='DQN_Input')([a, b_expanded])
注:如果需要输出形状为(None,328),请检查你的张量维度是否书写错误:192+128=320,若要得到320以外的结果,需要对应调整a或b的特征维度长度。
内容的提问来源于stack exchange,提问作者prakash gawas
相关产品推荐
相关产品推荐

