Tensorflow笔记—3—神经网络搭建之前向传播

一.概念回顾及补充

  • 基于TensorFlow的NN(神经网络):用张量表示数据,用计算图搭建神经网络,用会话session执行计算图,优化线上的权重(参数),得到模型,最后进行测试
  • 张量(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.constant([3,2,1]) 生成[3,2,1]

二.神经网络的搭建

2.1 神经网络的实现过程:

  • 1.准备数据,提取特征,作为输入喂给神经网络 (Neural Network,NN,神经网络简称NN)的训练集
  • 2.搭建NN结构,从输入到输出(先搭建计算图,再用会话执行)
    (NN前向传播算法 ===> 计算输出)
  • 3.大量特征数据喂给NN,迭代优化NN参数
    (NN反向传播算法 ===> 优化参数训练模型)
  • 4.使用训练好的模型,预测和分类

由此可见,基于神经网络的机器学习主要分两个过程,即训练过程和使用过程,训练过程是第一步(数据集准备),第二步(搭建神经网络框架),第三步的循环迭代(优化线上参数),一旦参数优化完成就可以固定这些参数,模型确定就可以测试。

2.2 前向传播:

前向传播就是搭建模型计算过程,让模型具有推理能力(以全连接网络为例),可以针对一组输入给出相应的输出

举个例子:

生产一批零件将体积设 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实现:

在实际代码中喂入训练集需要提前在神经网络框架中占位,所以需要:

x = tf.placeholder(tf.float32, shape=(1, 2))    #输入值x,1*2,占位符,喂入一组数据
x = tf.placeholder(tf.float32, shape=(None, 2))    #输入值x,N*2,占位符,喂入多组数据

喂入一组数据:

import tensorflow as tf
#定义输入和参数
x = tf.placeholder(tf.float32, shape=(1, 2))    #输入值x,1*2,占位符
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))    #线上权重w1,2*3
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))    #线上权重w2,3*1
#定义前向传播
a = tf.matmul(x, w1)    #1*2和2*3得到1*3
y = tf.matmul(a, w2)    #1*3和3*1得到1*1
#用会话session计算节点结果
with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)   #会话变量初始化
    print("y:", sess.run(y, feed_dict={x: [[0.7, 0.5]]}))    #喂一组数据
    print("w1:", sess.run(w1))
    print("w2:", sess.run(w2))

运行结果:

喂入多组数据:

import tensorflow as tf
#定义输入和参数
x = tf.placeholder(tf.float32, shape=(None, 2))    #输入值x,N*2,占位符
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))    #线上权重w1,2*3
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))    #线上权重w2,3*1
#定义前向传播
a = tf.matmul(x, w1)    #N*2和2*3得到N*3
y = tf.matmul(a, w2)    #N*3和3*1得到N*1
#用会话session计算节点结果
with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)   #会话变量初始化
    print("y:", 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))

运行结果:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值