The Sequential Model
The Sequential Model
线性堆叠模型
01 设置
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
02 什么时候使用线性堆叠模型
单只有一个输入和一个输出的时候,典型的添加方式可以如下所示:
# 只含一个Dense,为了说明维度
model=keras.Sequential([layers.Dense(2,activation='relu',name='layer1')])
x=tf.ones([3,3])
y=model(x)
print(y)
tf.Tensor(
[[0. 0.]
[0. 0.]
[0. 0.]], shape=(3, 2), dtype=float32)
说明一下输入输出的形状关系:

# Create 3 layers
layer1 = layers.Dense(2, activation="relu", name="layer1")
layer2 = layers.Dense(3, activation="relu", name="layer2")
layer3 = layers.Dense(4, name="layer3")
# Call layers on a test input
x = tf.ones((3, 3))
y = layer3(layer2(layer1(x)))
以下情况不适用于Sequential模型:
- 有多个输入或多个输出
- 层有多个输入或多个输出
- 层共享
- 非线性拓扑网络(如:残差网络、多分支网络)
03 创建一个线性堆叠网络
# 传递一个layers列表构建
model = keras.Sequential(
[
layers.Dense(2, activation="relu"),
layers.Dense(3, activation="relu"),
layers.Dense(4),
]
)
# 可以通过model.layers访问
model.layers
[<keras.layers.core.dense.Dense at 0x28f9dbce7c0>,
<keras.layers.core.dense.Dense at 0x28f9dbce3a0>,
<keras.layers.core.dense.Dense at 0x28f9dbce970>]
# 通过add方法,逐个添加层
model = keras.Sequential()
model.add(layers.Dense(2, activation="relu"))
model.add(layers.Dense(3, activation="relu"))
model.add(layers.Dense(4))
# 通过pop方法删除层
model.pop()
print(len(model.layers))
2
# Sequential() 接受输入参数'name',在tensorboard很有用
model = keras.Sequential(name="my_sequential")
model.add(layers.Dense(2, activation="relu", name="layer1"))
model.add(layers.Dense(3, activation="relu", name="layer2"))
model.add(layers.Dense(4, name="layer3"))
04 可以事先指定模型输入形状
layer = layers.Dense(3)
layer.weights
# 因为没指定输入形状,所以也不知道权重(参数)有多少个
[]
x=tf.ones([1,4])
y=layer(x)
layer.weights
[<tf.Variable 'dense_7/kernel:0' shape=(4, 3) dtype=float32, numpy=
array([[-0.21379423, -0.24007618, -0.35851455],
[ 0.3631029 , -0.6891039 , 0.63587666],
[-0.3662386 , 0.18915188, 0.66558635],
[ 0.88581955, 0.18579733, -0.22770852]], dtype=float32)>,
<tf.Variable 'dense_7/bias:0' shape=(3,) dtype=float32, numpy=array([0., 0., 0.], dtype=float32)>]

浙公网安备 33010602011771号