TensorFlow基础入门(六)--基础总结(TensorFlow框架基础)

本节课目标:搭建神经网络,总结搭建八股

一、基本概念

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

张量:张量就是多维数组(列表),用阶表示张量的维度。

0阶称为标量,表示一个单独的数                        举例S=123

1阶张量称作向量,表示一个一维数组              举例 V=[1,2,3]

2阶张量称作矩阵,表示一个二维数组,它可以有i行j列个元素,每个元素可以用行号和列号共同索引到:

举例 m=[[1,2,3],[4,5,6],[7,8,9]]

判断张量是几阶的,就通过张量右边的方括号数,0 个是 0 阶,n 个是 n 阶,张量可以表示 0 阶到 n 阶数组(列表);

举例 t=[ [ [… ] ] ]为 3 阶。

数据类型:Tensorflow 的数据类型有 tf.float32、tf.int32 等。

举例

我们实现 Tensorflow 的加法:

import tensorflow as tf #引入模块

a = tf.constant([1.0, 2.0]) #定义一个张量等于[1.0,2.0]

b = tf.constant([3.0, 4.0]) #定义一个张量等于[3.0,4.0]

result = a+b #实现 a 加 b 的加法

print result #打印出结果

可以打印出这样一句话:Tensor(“add:0”, shape=(2, ), dtype=float32),意思为 result 是一个名称为 add:0 的张量,shape=(2,)表示一维数组长度为 2,

dtype=float32 表示数据类型为浮点型。

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

张图,只搭建网络,不运算。

举例

在第一讲中我们曾提到过,神经网络的基本模型是神经元,神经元的基本模型其

实就是数学中的乘、加运算。我们搭建如下的计算图:

x1、x2 表示输入,w1、w2 分别是 x1 到 y 和 x2 到 y 的权重,y=x1*w1+x2*w2。

我们实现上述计算图:

import tensorflow as tf #引入模块

x = tf.constant([[1.0, 2.0]]) #定义一个 2 阶张量等于[[1.0,2.0]]

w = tf.constant([[3.0], [4.0]]) #定义一个 2 阶张量等于[[3.0],[4.0]]

y = tf.matmul(x, w) #实现 xw 矩阵乘法

print y #打印出结果

可以打印出这样一句话:Tensor(“matmul:0”, shape(1,1), dtype=float32),

从这里我们可以看出,print 的结果显示 y 是一个张量,只搭建承载计算过程的

计算图,并没有运算,如果我们想得到运算结果就要用到“会话 Session()”了。

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

我们用 with 结构实现,语法如下:

with tf.Session() as sess:

print sess.run(y)

举例对于刚刚所述计算图,我们执行 Session()会话可得到矩阵相乘结果:

import tensorflow as tf #引入模块

x = tf.constant([[1.0, 2.0]]) #定义一个 2 阶张量等于[[1.0,2.0]]

w = tf.constant([[3.0], [4.0]]) #定义一个 2 阶张量等于[[3.0],[4.0]]

y = tf.matmul(x, w) #实现 xw 矩阵乘法

print y #打印出结果

with tf.Session() as sess:

print sess.run(y) #执行会话并打印出执行后的结果

可以打印出这样的结果:

Tensor(“matmul:0”, shape(1,1), dtype=float32)

[[11.]]

我们可以看到,运行Session()会话前只打印出y是个张量的提示,运行Session()

会话后打印出了 y 的结果 1.0*3.0 + 2.0*4.0 = 11.0。

注①:我们以后会常用到 vim 编辑器,为了使用方便,我们可以更改 vim 的配置

文件,使 vim 的使用更加便捷。我们在 vim ~/.vimrc 写入:

set ts=4 表示使 Tab 键等效为 4 个空格

set nu 表示使 vim 显示行号 nu 是 number 缩写

注②:在 vim 编辑器中运行 Session()会话时,有时会出现“提示 warning”,是

因为有的电脑可以支持加速指令,但是运行代码时并没有启动这些指令。可以把

这些“提示 warning”暂时屏蔽掉。屏蔽方法为进入主目录下的 bashrc 文件,在

bashrc 文件中加入这样一句 export TF_CPP_MIN_LOG_LEVEL=2,从而把“提示

warning”等级降低。

这个命令可以控制 python 程序显示提示信息的等级,在 Tensorflow 里面一般设

置成是"0"(显示所有信息)或者"1"(不显示 info),"2"代表不显示 warning,

"3"代表不显示 error。一般不建议设置成 3。

source 命令用于重新执行修改的初始化文件,使之立即生效,而不必注销并重

新登录。

神经网络的参数:

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

这些参数。生成参数的方法是让w等于tf.Variable,把生成的方式写在括号里。

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

                    tf.random_normal()                            生成正态分布随机数

                    tf.truncated_normal()                         生成去掉过大偏离点的正态分布随机数

                   tf.random_uniform()                            生成均匀分布随机数

                   tf.zeros                                                 表示生成全 0 数组

                   tf.ones                                                  表示生成全 1 数组

                  tf.fill                                                       表示生成全定值数组

                  tf.constant                                            表示生成直接给定值的数组

举例

w=tf.Variable(tf.random_normal([2,3],stddev=2, mean=0, seed=1)),表

示生成正态分布随机数,形状两行三列,标准差是 2,均值是 0,随机种子是 1。

w=tf.Variable(tf.Truncated_normal([2,3],stddev=2, mean=0, seed=1))

表示去掉偏离过大的正态分布,也就是如果随机出来的数据偏离平均值超过两个

标准差,这个数据将重新生成。

w=random_uniform(shape=7,minval=0,maxval=1,dtype=tf.int32,seed=1),

表示从一个均匀分布[minval maxval)中随机采样,注意定义域是左闭右开,即

包含 minval,不包含 maxval。

④ 除了生成随机数,还可以生成常量。tf.zeros([3,2],int32)表示生成

[[0,0],[0,0],[0,0]];tf.ones([3,2],int32)表示生成[[1,1],[1,1],[1,1];

tf.fill([3,2],6)表示生成[[6,6],[6,6],[6,6]];tf.constant([3,2,1])表示

生成[3,2,1]。

注意:①随机种子如果去掉每次生成的随机数将不一致。

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

神经网络的搭建:

神经网络的实现过程:

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

2、搭建 NN 结构,从输入到输出(先搭建计算图,再用会话执行)( NN 前向传播算法 计算输出)

3、大量特征数据喂给 NN,迭代优化 NN 参数( NN 反向传播算法 优化参数训练模型)

4、使用训练好的模型预测和分类

由此可见,基于神经网络的机器学习主要分为两个过程,即训练过程和使用过程。

训练过程是第一步、第二步、第三步的循环迭代,使用过程是第四步,一旦参数

优化完成就可以固定这些参数,实现特定应用了。

很多实际应用中,我们会先使用现有的成熟网络结构,喂入新的数据,训练相应

模型,判断是否能对喂入的从未见过的新数据作出正确响应,再适当更改网络结

构,反复迭代,让机器自动训练参数找出最优结构和参数,以固定专用模型。

前向传播:

前向传播就是搭建模型的计算过程,让模型具有推理能力,可以针对一组输入

给出相应的输出。

反向传播:

反向传播:训练模型参数,在所有参数上用梯度下降,使 NN 模型在训练数据

上的损失函数最小。

√损失函数(loss):计算得到的预测值 y 与已知答案 y_的差距。

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

均方误差 MSE:求前向传播计算结果与已知答案之差的平方再求平均。

用 tensorflow 函数表示为:

loss_mse = tf.reduce_mean(tf.square(y_ - y))

√反向传播训练方法:以减小 loss 值为优化目标,有梯度下降、momentum 优化

器、adam 优化器等优化方法。

这三种优化方法用 tensorflow 的函数可以表示为:

train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

train_step=tf.train.MomentumOptimizer(learning_rate, momentum).minimize(loss)

train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss)

三种优化方法区别如下:

①tf.train.GradientDescentOptimizer()使用随机梯度下降算法,使参数沿着

梯度的反方向,即总损失减小的方向移动,实现更新参数。

②tf.train.MomentumOptimizer()在更新参数时,利用了超参数。

③tf.train.AdamOptimizer()是利用自适应学习率的优化算法,Adam 算法和随

机梯度下降算法不同。随机梯度下降算法保持单一的学习率更新所有的参数,学

习率在训练过程中并不会改变。而 Adam 算法通过计算梯度的一阶矩估计和二

阶矩估计而为不同的参数设计独立的自适应性学习率

原文地址:https://www.cnblogs.com/byczyz/p/12103850.html

时间: 2024-07-31 11:27:25

TensorFlow基础入门(六)--基础总结(TensorFlow框架基础)的相关文章

前端基础入门第一阶段-Web前端开发基础环境配置

Web前端和全栈的定义: A.什么是传统传统web前端:需要把设计师的设计稿,切完图,写标签和样式,实现JS的效果,简而言之即只需要掌握HTML的页面结构,CSS的页面样式,javaScript页面的行为(包括页面的效果和整合): B.HTML5时代的大前端:要处理各种端的兼容开发(PC,移动端,各种浏览器).移动APP开发和移动站点开发,Ajax+服务器端技术开发,异步开发和后台的交互.高级设计模式和框架(MVC,AngularJS...).运用自动化工作流(Grunt).网站安全.SEO.测

2015年最新Android基础入门教程目录(完结版)

2015年最新Android基础入门教程目录(完结版) 标签(空格分隔): Android基础入门教程 前言: 关于<2015年最新Android基础入门教程目录>终于在今天落下了帷幕,全套教程 共148节已编写完毕,附上目录,关于教程的由来,笔者的情况和自学心得,资源分享 以及一些疑问等可戳:<2015最新Android基础入门教程>完结散花~ 下面是本系列教程的完整目录: 第一章:环境搭建与开发相关(已完结 10/10) Android基础入门教程--1.1 背景相关与系统架构

2015年最新Android基础入门教程目录(临时版)

2015年最新Android基础入门教程目录(临时版) 标签(空格分隔): Android基础入门教程 前言: 嗯,昨晚又给人盗号了,博客上被发表了十几篇黄贴-然后目录给管理误删了,再发一次 后来协商后发现实被设密保问题了,建议各位用csdn的朋友密保自己设置一波~ 密保问题已修改回来了,应该不会再被盗号了-人怕出名猪怕壮哈~下次如果发现博客被封 告知下小猪,如何很急的话可以先到w3c鸟巢菜鸟教程上看Android基础入门教程 经过站长FK进行排版的,可能阅读体验会比csdn好很多!内容基本是同

WebSocket.之.基础入门-前端发送消息

WebSocket.之.基础入门-前端发送消息 在<WebSocket.之.基础入门-建立连接>的代码基础之上,进行添加代码.代码只改动了:TestSocket.java 和 index.jsp 两个文件. 项目结构如下图: TestSocket.java 1 package com.charles.socket; 2 3 import javax.websocket.OnMessage; 4 import javax.websocket.OnOpen; 5 import javax.webs

[Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习. 一, AspectJ的概述: AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件. Spring为了简化自身的AOP的开发,将AspectJ拿过来作为Spring自身一个AOP的开发.

[Spring框架]Spring AOP基础入门总结一.

前言:前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务

零基础入门 实战mpvue2.0多端小程序框架

第1章 课程快速预览(必看!!!)在这一章节中,老师讲带领你快速预览课程整体.其中,涉及到为什么要做这么一门实战课程.制作一个小程序的完整流程是怎么样的,以及如何做项目的技术选型. 第2章 30 分钟快速入门微信小程序(已掌握,可略过)在这一章节中,老师讲带领你从如何注册微信小程序开发者账号.工具的下载开始,到完成第一个小程序,再到组件与 API 的使用整个过程,最后来总结微信原生小程序的缺点. 第3章 30 分钟快速入门 Vue.js 框架(已掌握,可略过)在这一章节中,老师将带领你从第一个

TensorFlow 从入门到精通(六):tensorflow.nn 详解

看过前面的例子,会发现实现深度神经网络需要使用 tensorflow.nn 这个核心模块.我们通过源码来一探究竟. # Copyright 2015 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. #

大数据系统学习零基础入门到精通加项目实战2017最新全套视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv