对于dot(),它采用点积,数学上定义为:ab = sum(a_i * b_i),但是如何在keras中为a * b = product(a_i * b_i)编写lambda函数,并且将此输入转发到下一层
您可以执行以下操作。本质上,我们对(None, 10)
大小的输入和(10,20)
大小的输入乘以点积。这将产生(None, 20)
大小的输出。
import numpy as np
import tensorflow as tf
import tensorflow.keras.backend as K
inp1 = tf.keras.layers.Input(shape=(10,))
inp2 = tf.keras.layers.Input(batch_shape=(10,20))
prod_out = tf.keras.layers.Lambda(lambda x: K.dot(K.prod(x[0],axis=1, keepdims=True), K.prod(x[1],axis=0, keepdims=True)))([inp1, inp2])
model = tf.keras.models.Model([inp1,inp2], prod_out)
model.summary()