zoukankan      html  css  js  c++  java
  • Tensorflow 2.0 搭建神经网络(局部)

    前向传播 

     tensorflow.keras 搭建网络时,内部的网络可以直接完成所有层的前向计算。全连接Dense() 层,最后一层的神经元的个数需要和最后一层线性函数 w x + b 的维度对应上,中间的其他层的神经元的个数可以任意指定,只要损失函数能达到较优。

    # 导入常用网络层 layers
    from tensorflow.keras import layers,Sequential
    # 隐藏层 1
    fc1 = layers.Dense(256, activation=tf.nn.relu) 
    # 隐藏层 2
    fc2 = layers.Dense(128, activation=tf.nn.relu) 
    # 隐藏层 3
    fc3 = layers.Dense(64, activation=tf.nn.relu) 
    # 输出层
    fc4 = layers.Dense(10, activation=None) 
    
    
    x = tf.random.normal([4,28*28])
    # 通过隐藏层 1 得到输出
    h1 = fc1(x) 
    # 通过隐藏层 2 得到输出
    h2 = fc2(h1) 
    # 通过隐藏层 3 得到输出
    h3 = fc3(h2) 
    # 通过输出层得到网络输出
    h4 = fc4(h3) 
    # 导入 Sequential 容器
    from tensorflow.keras import layers,Sequential
    # 通过 Sequential 容器封装为一个网络类
    model = Sequential([
        layers.Dense(256, activation=tf.nn.relu) , # 创建隐藏层 1
        layers.Dense(128, activation=tf.nn.relu) , # 创建隐藏层 2
        layers.Dense(64, activation=tf.nn.relu) , # 创建隐藏层 3
        layers.Dense(10, activation=None) , # 创建输出层
    ])
    out = model(x) # 前向计算得到输出
    

    梯度计算

    with tf.GradientTape() as tape: # 梯度记录器
        # x: [b, 28*28]
        # 隐藏层 1 前向计算, [b, 28*28] => [b, 256]
        h1 = x@w1 + tf.broadcast_to(b1, [x.shape[0], 256])
        h1 = tf.nn.relu(h1)
        # 隐藏层 2 前向计算, [b, 256] => [b, 128]
        h2 = h1@w2 + b2
        h2 = tf.nn.relu(h2)
        # 隐藏层 3 前向计算, [b, 128] => [b, 64]
        h3 = h2@w3 + b3
        h3 = tf.nn.relu(h3)
        # 输出层前向计算, [b, 64] => [b, 10]
        h4 = h3@w4 + b4
  • 相关阅读:
    perl教程
    信号量(semaphore)——POSIX信号量和System V信号量
    (C#习题) 杂题1
    (C#) 操作XML之遍历
    (C# 基础) Solution and Project
    (C#)枚举 Enumerations
    (WPF) 窗口间传参数
    (C#) 操作XML之查找
    (C#习题) 字符串
    (C#) VS类视图和对象浏览器图标
  • 原文地址:https://www.cnblogs.com/qianyuesheng/p/14457072.html
Copyright © 2011-2022 走看看