tf.keras.Sequential() 中的 Add() 函数

Add() function in tf.keras.Sequential()

是否可以将 Add() 函数合并到 tf.keras.Sequential() 模型中,定义如下:

from tensorflow import keras

model = keras.Sequential([
    keras.Input(shape(input_shape,)),
    keras.layers.Dense(32),
    keras.layers.Dense(8),
    # I want to add here
    keras.layers.Add()(some_var)
], name='my_model')

some_var 是张量 ,与该点的网络大小相同。所以每个元素都需要添加到some_var.

中对应的元素

我知道我可以使用函数 API 很容易地做到这一点,但我更愿意使用顺序模型,因为它会匹配我网络中的其他分支。

如果不清楚 keras.layers.Add()(some_var) 只是我希望它如何工作的猜测。这给出了错误:ValueError: A merge layer should be called on a list of inputs..

我的问题特定于我定义顺序模型的样式。

FunctionalSequential API 之间的主要区别之一是 Sequential 使用单输入和单输出,而 Functional API 适用于单输入和单输出或单输入和多输出,或多输入和多输出。所以使用FunctionalAPI,可以通过`keras.layers.Add().

添加两层多输入

另外,这个 keras.layers.Add() 可以用来添加两个输入张量,这不是我们真正做的。我们宁愿使用 d = tf.add(a,b)。 cd 都相等

a = tf.constant(1.,dtype=tf.float32, shape=(1,3)).  
b = tf.constant(2.,dtype=tf.float32, shape=(1,3)). 
c = tf.keras.layers.Add()([a, b]). 

以下示例来自keras网站。你可以在FunctionalAPI

中看到它是如何使用的
import keras

input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# equivalent to added = keras.layers.add([x1, x2])
added = keras.layers.Add()([x1, x2])

out = keras.layers.Dense(4)(added)
model = keras.models.Model(inputs=[input1, input2], outputs=out)

感谢@today 评论(然后删除了答案?!),我使用 tf.keras.layer.Lambda 函数解决了它。

model = keras.Sequential([
    keras.Input(shape(input_shape,)),
    keras.layers.Dense(32),
    keras.layers.Dense(8),
    keras.layers.Lambda(lambda x : x + some_var)
], name='my_model')