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)

说明一下输入输出的形状关系:
image

# 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)>]
posted @ 2022-06-29 10:31  Vandaci  阅读(47)  评论(0)    收藏  举报