人工智能实践:Tensorflow笔记(二):TensorFlow框架

1、使用Tensorflow搭建神经网络时,通常用张量表示数据,用计算图搭建神经网络,用会话执行计算图,再优化神经网络的参数(权重),获得更准确的模型

2、张量与计算图

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

      阶:张量的维数
      0阶张量就是标量

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第1张图片

判断张量是几阶的,就可以看方括号有几个,n个就是n阶

张量可以表示0阶到n阶数组(列表)

 

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第2张图片

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第3张图片

        表示result是一个名叫add:0的张量,是一个长度为2的一维数组,数据类型是浮点型的

 

        这段代码所描述的就是一段计算过程,就是一张计算图  
        输出内容只显示出结果是个张量,并没有运算张量具体的值

        计算图只描述了计算过程,不计算运算结果

 

3、计算图的定义

      计算图(Graph):搭建神经网络的计算过程,只搭建,不运算(是承载一个或多个计算节点的一张图)

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第4张图片

       神经网络的基本单元是神经元,上图就是神经元的基本模型,其实就是数学里的乘加运算,x1、x2是输入,w1、w2是权重

实现:

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第5张图片

即:人工智能实践:Tensorflow笔记(二):TensorFlow框架_第6张图片

输出的结果显示y是个张量,只搭建了承载计算过程的计算图,并没有运算。如果想得到运算结果,就要用到会话了

import tensorflow as tf
x = tf.constant([[1.0, 2.0]])  #1行2列的张量
w = tf.constant([[3.0], [4.0]])  #2行1列的张量
y = tf.matmul(x,w)
y

4、会话

     会话(session):执行计算图中的节点运算

用with结构实现:

                              with tf.Session() as sess:

                                          print sess.run(y)

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第7张图片

 

import tensorflow as tf
x = tf.constant([[1.0, 2.0]])  #1行2列的张量
w = tf.constant([[3.0], [4.0]])  #2行1列的张量
y = tf.matmul(x,w)
y
with tf.Session() as sess:
    print(sess.run(y))

5、神经网络的参数是指神经元线上的权重W,用变量表示,一般会先随机生成这些参数

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第8张图片

随机种子如果去掉,每次生成的随机数将不一致。

标准差、均值、随机种子如果没有特殊要求,是可以不写的

 

tf.random_normal也可以用生成常量的函数来替换

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第9张图片

6、神经网络的实现过程

     ①准备数据集,提取特征,作为输入喂给神经网络(Neural Network,NN)

     ②搭建神经网络结构,从输入到输出(先搭建计算图,再用会话执行)

       (NN前向传播算法——>计算输出)

     ③大量特征喂给神经网络,得到大量输出,将每一次输出与标准答案的差反向传回神经网络,调整神经网络的参数,直到模型达到要求,即迭代优化神经网络参数

       (NN反向传播算法——>优化参数训练模型)

     ④使用训练好的模型预测和分类(将新数据送入前向传播网络便可以实现预测和分类了)

 

前向传播搭建网络结构,反向传播构建网络参数

①②③是训练过程,④是使用过程

7、前向传播

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第10张图片人工智能实践:Tensorflow笔记(二):TensorFlow框架_第11张图片

用tensorflow描述

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第12张图片

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第13张图片

8、代码实现实例①

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第14张图片

#两层简单神经网络(全连接)

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(sess.run(y))

代码实现实例②

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第15张图片

#两层简单神经网络(全连接)

import tensorflow as tf
#定义输入和参数
#用placeholder实现输入定义   (sess.run中喂一组数据)
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(sess.run(y,feed_dict={x:[[0.7,0.5]]}))
    

代码实现实例③

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第16张图片

#两层简单神经网络(全连接)
import tensorflow as tf

#定义输入和参数
#用placeholder实现输入定义   (sess.run中喂多组数据)
x = tf.placeholder(tf.float32,shape=(None,2))  #注意None
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(sess.run(y,feed_dict={x:[[0.7,0.5],[0.2,0.3],[0.3,0.4],[0.4,0.5]]}))
    print(sess.run(w1))
    print(sess.run(w2))

9、反向传播

       反向传播的目的是为了优化模型参数,在所有参数上用梯度下降的方法,使神经网络模型在训练数据上的损失函数最小

损失函数(loss):预测值y与已知答案y_的差距

损失函数的计算有很多方法,均方误差(MSE)是比较常用的方法之一

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第17张图片

反向传播的训练方法:以减小loss值为优化目标

 

代码实现(这段代码要能背下来)

#导入模块,生成模拟数据集

import tensorflow as tf
import numpy as np
BATCH_SIZE = 8  #表示一次喂入神经网络多少组数据,这个数值不可以过大,
                #一次吃一大口,神经网络会被椰岛
seed = 23455  #为了教学方便

#基于seed产生随机数
rng = np.random.RandomState(seed)
#随机数返回32行2列的矩阵,表示32组 体积和重量 作为输入数据集
X = rng.rand(32,2)
#人为给出一个零件合格与否的评判标准
#从X这个32行2列的矩阵中,取出一行,判断如果和小于1,给Y赋值1(认为合格),和不小于1,给Y赋值0(认为不合格)
#作为输入数据集的标签(正确答案)
Y = [[int(x0 + x1 < 1)] for (x0,x1) in X]

print('X:\n',X)
print('Y:\n',Y)

#定义神经网络的输入、参数和输出,定义前向传播过程
#x,y是输入
x = tf.placeholder(tf.float32, shape = (None,2)) #输入特征是32位浮点型,每个x有2个元素,体积和重量
y_ = tf.placeholder(tf.float32, shape = (None,1)) #每个y有1个元素,合格与否

#w1,w2是参数
#参数要匹配输入和输出
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)


#定义损失函数及反向传播方法
loss = tf.reduce_mean(tf.square(y-y_))
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss)
#train_step = tf.train.MomentumOptimizer(0.001,0.9).minimize(loss)
#train_step = tf.train.AdamOptimizer(0.001).minimize(loss)


#生成会话,训练STEPS轮
with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    #输出目前(未经训练)的参数取值
    print('w1\n',sess.run(w1))
    print('w2\n',sess.run(w2))
    print('\n')
    
    #训练模型
    STEPS = 3000
    for i in range(STEPS):
        start = (i*BATCH_SIZE)%32
        end = start + BATCH_SIZE
        sess.run(train_step, feed_dict={x: X[start:end],y_:Y[start:end]})#每轮从X的
        #数据集和Y的标签中,抽取相应的从start到end个特征和标签,汇入神经网络,
        #用sess.run()执行训练过程
        if i%500 ==0:
            total_loss = sess.run(loss,feed_dict = {x:X,y_:Y})
            print('After %d training step(s),loss on all data is %g'%(i,total_loss))
        
    #输出训练后的参数取值
    print('\n')
    print('w1:\n',sess.run(w1))
    print('w2:\n',sess.run(w2))

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第18张图片

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第19张图片

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第20张图片

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第21张图片

10、梳理神经网络搭建的八股

搭建神经网络的八股:准备、前传、反传、迭代

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第22张图片

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第23张图片

人工智能实践:Tensorflow笔记(二):TensorFlow框架_第24张图片人工智能实践:Tensorflow笔记(二):TensorFlow框架_第25张图片

 

你可能感兴趣的:(机器学习,人工智能,tensorflow)