Tensorflow 在tf.keras.Sequential()中添加()函数

Tensorflow 在tf.keras.Sequential()中添加()函数,tensorflow,keras,tf.keras,Tensorflow,Keras,Tf.keras,当定义如下时,是否可以在tf.keras.Sequential()模型中合并Add()函数: 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_

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

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\u var
中对应的元素中

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

如果它不清楚,
keras.layers.Add()(一些变量)
只是我希望它如何工作的猜测。这会产生错误:
ValueError:应该在输入列表上调用合并层。


我的问题具体到我定义顺序模型的风格。

功能性和顺序性API之间的主要区别之一是,
顺序性
使用单输入和单输出,而as
功能性
API使用单输入和单输出或单输入和单输出多输出,或多输入多输出。因此,使用
Functional
API,您可以通过`keras.layers.add()添加两层多输入

另外,这个
keras.layers.Add()
可以用于添加两个输入张量,这实际上不是我们所做的。我们可以使用like d=tf.add(a,b)。
c
d
都相等

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网站。您可以看到它是如何在
Functional
API中使用的

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 comment(然后是一个删除的答案?!),我使用
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')

这是不可能的,因为根据定义,顺序模型是一个模型,其中每个层直接连接到前一层;然而,
Add
是一个对多个输入张量进行操作的合并层。但是,如果
some_var
是一个外部常量/变量,您可以使用
Lambda
层和顺序API进行加法。是的,在顺序模型上使用Add没有意义。谢谢,这样做了。谢谢您的回复。我知道我可以很容易地用函数式API来实现。我的问题是,是否可以在顺序API中执行此操作。同意,您可以使用
Lambda
层添加
op
作为层。出于某种原因,我认为你的问题是关于添加层的。