• 神经网络 04(神经网络的搭建)


    一、神经网络的搭建

    tf.Keras 中构建模有两种方式,一种是通过 Sequential 构建,一种是通过 Model 类构建。前者是按一定的顺序对层进行堆叠,而后者可以用来构建较复杂的网络模型。首先我们介绍下用来构建网络的全连接层

    1. tf.keras.layers.Dense(
    2. units, activation=None, use_bias=True, kernel_initializer='glorot_uniform',
    3. bias_initializer='zeros')

    units: 当前层中包含的神经元个数
    Activation: 激活函数,relu,sigmoid等
    use_bias: 是否使用偏置,默认使用偏置
    Kernel_initializer: 权重的初始化方式,默认是Xavier初始化
    bias_initializer: 偏置的初始化方式,默认为0

    1.1 通过Sequential构建

    Sequential() 提供一个层的列表,就能快速地建立一个神经网络模型,实现方法如下所示:

    1. # 导入相关的工具包
    2. import tensorflow as tf
    3. from tensorflow import keras
    4. from tensorflow.keras import layers
    5. # 定义一个Sequential模型,包含3层
    6. model = keras.Sequential(
    7. [
    8. # 第一层(隐藏层):激活函数为relu,权重初始化为he_normal
    9. layers.Dense(3, activation="relu",
    10. kernel_initializer="he_normal", name="layer1",input_shape=(3,)),
    11. # 第二层(隐藏层):激活函数为relu,权重初始化为he_normal
    12. layers.Dense(2, activation="relu",
    13. kernel_initializer="he_normal", name="layer2"),
    14. # 第三层(输出层):激活函数为sigmoid,权重初始化为he_normal
    15. layers.Dense(2, activation="sigmoid",
    16. kernel_initializer="he_normal", name="layer3"),
    17. ],
    18. name="my_Sequential" # 定义该模型的名字
    19. )
    20. # 展示模型结果
    21. model.summary()

    通过这种 sequential 的方式只能构建简单的序列模型,较复杂的模型没有办法实现。

     

    1.2 利用function API构建

    tf.keras 提供了 Functional API,建立更为复杂的模型,使用方法是将层作为可调用的对象并返回张量,并将输入向量和输出向量提供给 tf.keras.Model 的 inputs 和 outputs 参数,实现方法如下:

    1. # 导入工具包
    2. import tensorflow as tf
    3. # 定义模型的输入
    4. inputs = tf.keras.Input(shape=(3,),name = "input")
    5. # 第一层:激活函数为relu,其他默认
    6. x = tf.keras.layers.Dense(3, activation="relu",name = "layer1")(inputs)
    7. # 第二层:激活函数为relu,其他默认
    8. x = tf.keras.layers.Dense(2, activation="relu",name = "layer2")(x)
    9. # 第三层(输出层):激活函数为sigmoid
    10. outputs = tf.keras.layers.Dense(2, activation="sigmoid",name = "layer3")(x)
    11. # 使用Model来创建模型,指明输入和输出
    12. model = tf.keras.Model(inputs=inputs, outputs=outputs,name="my_model")

    1.3 通过model的子类构建

    通过 model 的子类构建模型,此时需要在 __init__ 中定义神经网络的层,在 call 方法中定义网络的前向传播过程,实现方法如下:

    1. # 导入工具包
    2. import tensorflow as tf
    3. # 定义model的子类
    4. class MyModel(tf.keras.Model):
    5. # 在init方法中定义网络的层结构
    6. def __init__(self):
    7. super(MyModel, self).__init__()
    8. # 第一层:激活函数为relu,权重初始化为he_normal
    9. self.layer1 = tf.keras.layers.Dense(3, activation="relu",
    10. kernel_initializer="he_normal", name="layer1",input_shape=(3,))
    11. # 第二层:激活函数为relu,权重初始化为he_normal
    12. self.layer2 =tf.keras.layers.Dense(2, activation="relu",
    13. kernel_initializer="he_normal", name="layer2")
    14. # 第三层(输出层):激活函数为sigmoid,权重初始化为he_normal
    15. self.layer3 =tf.keras.layers.Dense(2, activation="sigmoid",
    16. kernel_initializer="he_normal", name="layer3")
    17. # 在call方法中完成前向传播
    18. def call(self, inputs):
    19. x = self.layer1(inputs)
    20. x = self.layer2(x)
    21. return self.layer3(x)
    22. # 实例化模型
    23. model = MyModel()
    24. # 设置一个输入,调用模型(否则无法使用summay())
    25. x = tf.ones((1, 3))
    26. y = model(x)

  • 相关阅读:
    windows平台编译OpenCV以支持CUDA
    数据分析:数据分析篇
    1055 The World‘s Richest
    刚关上灯准备睡时 女朋友抱着我说那个不明白 怎么办?
    网页的用户注册功能
    java实现图书管理系统
    Java#9(文字格斗游戏和对象数组练习)
    [架构之路-234]:目标系统 - 纵向分层 - 操作系统 - 混成/混合嵌入式系统(复杂嵌入式系统)
    HCIP笔记(12)
    2024北京眼健康展览会,北京眼睛光学展,北京眼康品牌加盟展
  • 原文地址:https://blog.csdn.net/peng_258/article/details/132834288