当前位置: 首页 > news >正文

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

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

 

2、张量与计算图

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

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

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

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

 

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

 

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

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

 

3、计算图的定义

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

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

实现:

即:

输出的结果显示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

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

用with结构实现:

                              with tf.Session() as sess:

                                          print sess.run(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
with tf.Session() as sess:
    print(sess.run(y))

 

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

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

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

 

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

 

6、神经网络的实现过程

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

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

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

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

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

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

 

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

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

 

7、前向传播

用tensorflow描述

 

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

代码实现实例②

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

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]]}))
    

代码实现实例③

#两层简单神经网络(全连接)
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)是比较常用的方法之一

反向传播的训练方法:以减小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))

 

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

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

 

相关文章:

  • HTTPS 与 SSL
  • Windows的口令文件SAM
  • Windows组策略
  • Windows启动文件夹与设置开机自启动脚本/软件开机自启
  • Windows任务计划程序
  • WSH和FSO
  • Windows修改注册表实现开机自启动
  • ActiveX
  • 操作系统市场份额
  • desktop.ini和folder.htt
  • 人工智能实践:Tensorflow笔记(三):神经网络优化
  • Python网络爬虫与信息提取(一)(Wing Canopy)
  • Python网络爬虫与信息提取(二):网络爬虫之规则(Requests库 Robots规则)
  • Windows防火墙添加禁用规则——以禁用微信为例
  • IA-32处理器与8086 实模式,保护模式和虚拟8086模式
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [译]前端离线指南(上)
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【5+】跨webview多页面 触发事件(二)
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • AngularJS指令开发(1)——参数详解
  • Apache的80端口被占用以及访问时报错403
  • canvas 五子棋游戏
  • CAP 一致性协议及应用解析
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CSS 专业技巧
  • ES6--对象的扩展
  • java第三方包学习之lombok
  • mysql_config not found
  • React16时代,该用什么姿势写 React ?
  • Redash本地开发环境搭建
  • RxJS: 简单入门
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 阿里云Kubernetes容器服务上体验Knative
  • 基于遗传算法的优化问题求解
  • 浅谈web中前端模板引擎的使用
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 入手阿里云新服务器的部署NODE
  • 使用 QuickBI 搭建酷炫可视化分析
  • 听说你叫Java(二)–Servlet请求
  • zabbix3.2监控linux磁盘IO
  • ​iOS实时查看App运行日志
  • ​secrets --- 生成管理密码的安全随机数​
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (day6) 319. 灯泡开关
  • (第二周)效能测试
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (排序详解之 堆排序)