• TensorFlow笔记-04-神经网络的实现过程,前向传播


    TensorFlow笔记-04-神经网络的实现过程,前向传播

    • 基于TensorFlow的NN:用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型

    • 张量(tensor):多维数组(列表)

    • 阶:张量的维数

    • 计算图(Graph):搭建神经网络的计算过程,只搭建,不运算

    • 会话(Session):执行计算图中的结点运算

    • 神经网络的参数:即计算图中的权重,也可以说是神经元(后面会提到)线上的权重,用变量表示,一般会随机生成这些参数。生成参数的方法是让 w(神经元上的线) 等于 tf.Variable,把生成的方式写在括号里

    • 神经网络中常用的生成随机数/数组的函数有:

    • 看不懂也没有关系

    • 其中Variable有4种:zeros,ones,fill,constant

    tf.zeros····全0数组··············tf.zeros([3,2],int32) 生成[[0,0],[0,0],[0,0]]
    tf.ones·····全1数组··············tf.ones([3,2],int32) 生成[[1,1],[1,1],[1,1]]
    tf.fill·······全定值数组··············tf.fill([3,2],6) 生成[[6,6],[6,6],[6,6]]
    tf.constant··直接给值··············tf.zeros([3,2,1]) 生成[3,2,1]

    神经网络的搭建

    神经网络的实现过程:

    • 1.准备数据,提取特征,作为输入喂给神经网络 (Neural Network,NN,神经网络简称NN)
    • 2.搭建NN结构,从输入到输出(先搭建计算图,再用会话执行)
      (NN前向传播算法 ===> 计算输出)
    • 3.大量特征数据喂给NN,迭代优化NN参数
      (NN反向传播算法 ===> 优化参数训练模型)
    • 4.使用训练好的模型,预测和分类
    • 由此可见,基于神经网络的机器学习主要分两个过程,即训练过程和使用过程,训练过程是第一步,第二步,第三步的循环迭代,使用的第四步,一旦参数优化完成就可以固定这些参数,实现特定应用了

    前向传播:

    • 前向传播就是搭建模型计算过程,让模型具有推理能力(以全连接网络为例),可以针对一组输入给出相应的输出
    • 举个例子:
      生产一批零件将体积想 x1 和重量 x2 为特征的输入 NN,通过 NN 后输出一个数值
    • 分析:
    • 体积和重量就是我们要选择的特征,把他们喂入神经网络,当体积和重量这组数据走过神经网络后,会得到一个输出,
    • 假设输入的特征是:体积:0.7,重量0.5
    • 我们搭建的神经网络:
    • 由神经网络可得,隐藏节点 a11 = x1w11 + x2w21 = 0.14 + 0.15 = 0.29
    • 同理算得节点 a12 = 32,a13 = 0.38,最终计算得到输出层 Y= 0.015
    • 这便实现了前向传播

    前向传播过程的 Tensorflow 描述:

    • 变量初始化,计算图节点都要用到会话

      with tf.Session() as sess:(前面提到的 with 结构)

    • 变量初始化:

      • 在 sess.run 函数中用 tf.global_variables_initializer() 汇总所有待优化变量:

      init_op = tf.global_variables_initializer()
      sess.run(init_op)

    • 代码前向传播文件:https://xpwi.github.io/py/TensorFlow/tf05forward.py

    # coding:utf-8
    # 前向传播
    # 两层简单神经网络(全连接)
    import tensorflow as tf
    
    # 定义输入和参数
    x = tf.constant([[0.7, 0.5]])
    w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
    w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
    
    # 定义前向传播的过程
    a = tf.matmul(x, w1)
    y = tf.matmul(a, w2)
    
    # 用会话计算结果
    with tf.Session() as sess:
        init_op = tf.global_variables_initializer()
        sess.run(init_op)
        print("y in tf05前向传播 is:
    ", sess.run(y))
       
    # 结果:
    # [[3.0904665]] 
    

    运行结果:

    这里写图片描述

    # coding:utf-8
    # 前向传播
    # 两层简单神经网络(全连接)
    import tensorflow as tf
    
    # 定义输入和参数
    # 用placeholder实现输入自定义(sess.run中喂1组数据)
    x = tf.placeholder(tf.float32, shape=(1, 2))
    w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
    w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
    
    # 定义前向传播的过程
    # 矩阵相乘,不运算
    a = tf.matmul(x, w1)
    y = tf.matmul(a, w2)
    
    # 用会话计算结果
    with tf.Session() as sess:
        init_op = tf.global_variables_initializer()
        sess.run(init_op)
        # 字典,喂入一组特征
        print("y in tf05forward2 is:
    ", sess.run(y, feed_dict={x:[[0.7,0.5]]}))
    
    # 结果:
    # [[3.0904665]]
    

    一次向神经网络喂入n组特征

    # coding:utf-8
    # 前向传播
    # 两层简单神经网络(全连接)
    # 向神经网络喂入n组特征
    import tensorflow as tf
    
    # 定义输入和参数
    # 用placeholder实现输入自定义(sess.run中喂多组数据)None表示未知
    x = tf.placeholder(tf.float32, shape=(None, 2))
    w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
    w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
    
    # 定义前向传播的过程
    # 矩阵相乘,不运算
    a = tf.matmul(x, w1)
    y = tf.matmul(a, w2)
    
    # 用会话计算结果
    with tf.Session() as sess:
        init_op = tf.global_variables_initializer()
        sess.run(init_op)
        # 字典,喂入多组特征
        print("y in tf05forward2 is:
    ", sess.run(y, feed_dict={x:[[0.7,0.5],[0.2,0.3],[0.3,0.4],[0.4,0.5]]}))
        print("w1:", sess.run(w1))
        print("w2:", sess.run(w2))
    

    运行结果

    这里写图片描述
    前向传播就到这里了

    更多文章:Tensorflow 笔记


    - 本笔记不允许任何个人和组织转载
  • 相关阅读:
    微信小程序之自定义模态弹窗(带动画)实例
    微信小程序之底部弹框预约插件
    Android WiFi直连 双向通信
    基于SpringBoot的项目管理后台
    Android WiFi热点7.1以上版本适配
    Android蓝牙——HID开发
    命令行视频(ts/m3u8)下载工具 —— youtube-dl(ffmpeg 解码)
    cool 软件 —— Carnac(实时桌面显示按键)
    认识 ARM、FPGA
    scikit-learn 学习笔记-- Generalized Linear Models (三)
  • 原文地址:https://www.cnblogs.com/xpwi/p/9609119.html
Copyright © 2020-2023  润新知