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.
.
我的问题特定于我定义顺序模型的样式。
Functional
和 Sequential
API 之间的主要区别之一是 Sequential
使用单输入和单输出,而 Functional
API 适用于单输入和单输出或单输入和多输出,或多输入和多输出。所以使用Functional
API,可以通过`keras.layers.Add().
添加两层多输入
另外,这个 keras.layers.Add()
可以用来添加两个输入张量,这不是我们真正做的。我们宁愿使用 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 评论(然后删除了答案?!),我使用 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() 函数合并到 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.
.
我的问题特定于我定义顺序模型的样式。
Functional
和 Sequential
API 之间的主要区别之一是 Sequential
使用单输入和单输出,而 Functional
API 适用于单输入和单输出或单输入和多输出,或多输入和多输出。所以使用Functional
API,可以通过`keras.layers.Add().
另外,这个 keras.layers.Add()
可以用来添加两个输入张量,这不是我们真正做的。我们宁愿使用 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 评论(然后删除了答案?!),我使用 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')