Keras Lambda层:将张量与常数矩阵相乘

时间:2018-12-23 19:45:51

标签: python machine-learning keras neural-network deep-learning

我正在Keras中编写Lambda层,以计算张量和常数矩阵的乘积。但是输出的大小出错了。

在代码中,jdes是张量为TensorShape([Dimension(None), Dimension(100)])的张量。此外,six_title_embedding是常数的矩阵,其形状为(6, 100)

def cosine_distance(input):
    jd = K.l2_normalize(input, axis=-1)
    jt_six = K.l2_normalize(six_title_embedding, axis=-1)
    return jd * jt_six
distance = Lambda(cosine_distance, output_shape=(None, 6,100))(jdes)
result = Dense(1, activation='sigmoid')(distance)

在输出中,我期望result的形状为(None, 6, 1),但是现在它的形状为(6, 1),因此batch_size的数量在lambda层的计算过程中会丢失。 distance的形状现在为TensorShape([Dimension(6), Dimension(100)])。应该是(None, 6, 100),以便结果可以有(None, 6, 1)吗?

1 个答案:

答案 0 :(得分:0)

您需要为jdes创建一个附加轴,以便在将它与恒定张量相乘时可以将它们广播为相同的形状:

def cosine_distance(input):
    jd = K.l2_normalize(input, axis=-1)
    jt_six = K.l2_normalize(six_title_embedding, axis=-1)
    jd = K.expand_dims(jd, axis=1)  # now it would have a shape of (None, 1, 100)
    return jd * jt_six  # the result would be (None, 6, 100)