tensorflow笔记(一)之基础知识

版权声明:本文为博主原创文章,转载请指明转载地址

http://www.cnblogs.com/fydeblog/p/7399701.html

前言

这篇notebook将一步步构建一个tensorflow的线性回归的例子,并讲述其中的一些基础知识。我会把notebook文件放在结尾的百度云链接。

首先第一步,要安装tensorflow,这个网上的教程很多,我安装的版本是ubuntu下1.2.1的tensorflow,推荐用pip(一步就好)这里附上一个安装教程的链接https://www.leiphone.com/news/201606/ORlQ7uK3TIW8xVGF.html ,安装ubuntu系统的直接看必不可少的python-pip和python-dev的那部分,这篇博客的博主安装的是0.8版本的,所以你需要改一下版本,由于我的电脑不支持gpu加速,所以安装的是cpu,这两个还是很有区别的,建议有gpu的还是装gpu版本的,后面跑程序快一些,举个例子,我在跑cnn卷积神经网络的手写识别的程序,没有gpu加速,跑了40分钟,有估计会很快,上面链接是cpu版本的,gpu版本应该也差不错,只有自己去安装了。

1. tensorflow的基本结构

我们先从python中导入tensorflow

import tensorflow as tf

这样命名比较简单明了,如果运行这行出现错误,说明你没有安装成功

matrix1 = tf.constant([[3., 3.]])  #1 row by 2 column
matrix2 = tf.constant([[2.],[2.]]) # 2 row by 1 column

这里用tf.constant创建了两个矩阵matrix1和matrix2,想知道如何去使用tf的函数,请点击https://www.tensorflow.org/api_docs/python/这个网址,里面是tf的api文档,可以直接在上面的搜索框内搜任何一个函数,可以看函数功能,参数,返回值等等。
这里的tf.constant函数是创建一个常量,返回值等于函数的输入参数,之所以要用tf.constant,这是因为tensorflow有一个特别的地方,那就是用tensorflow的函数创建或返回一个数据,相当于一个源op,源op相当于tensorflow中最小的单元,每一个数据都是一个源op

创建完前面的两个常量后,我们开始矩阵相乘

product = tf.matmul(matrix1, matrix2)

tf.matmul函数是tensorflow里面的矩阵相乘函数。product也是一个源op,现在我们讲讲图(graph)的概念,tensorflow中图表示计算任务,上面几行代码似乎看不到图的生成过程哈,这是因为tensorflow有一个默认图,它已经能满足大部分需求,所以不需要构建图,目前笔记都会是默认图,多图操作我现在还不会,看以后有没有机会写吧。在这个默认图中,已经有三个源op了,分别是product,matrix1和matrix2,我们可以将三个源op看作默认图中的三个节点,但这三个节点是有关系的,product节点连接这matrix1和matrix2节点,有点像树的分叉,product相当于主干,matrix1和matrix2相当于两个分支。

然后我们要创建一个会话

sess = tf.Session()

tensorflow要求所有的任务必须在会话中运行,上面这个语句就是创建一个会话

然后我们在会话中运行product

sess.run(product)

返回结果1X1的矩阵,数据类型是float32(tensorflow的默认类型)

我们来自顶向下看,最顶的是会话(Session),然后会话中包括了各种任务,也是graph,任务又是由不同的源op组成。我用tensorboard画了图(tensorboard是tensorflow可视化的一个非常好的工具,这个后面会说),如图

2. tensorflow下的回归实例

好了,现在我们开始举一个回归例子来实践一下吧

import tensorflow as tf
import numpy as np ## prepare the original data
x_data = np.random.rand(100).astype(np.float32)
y_data = 0.3*x_data+0.1
##creat parameters
weight = tf.Variable(tf.random_uniform([1],-1.0,1.0))
bias = tf.Variable(tf.zeros([1]))
##get y_prediction
y_prediction = weight*x_data+bias
##compute the loss
loss = tf.reduce_mean(tf.square(y_data-y_prediction))
##creat optimizer
optimizer = tf.train.GradientDescentOptimizer(0.5)
#creat train ,minimize the loss
train = optimizer.minimize(loss)
#creat init
init = tf.global_variables_initializer() ##creat a Session
sess = tf.Session()
##initialize
sess.run(init)
## Loop
for step in range(101):
sess.run(train)
if step %10==0 :
print step ,'weight:',sess.run(weight),'bias:',sess.run(bias)

第一项是准备数据,使用了numpy的函数,随机生成100个float32型的数据,并生成相应的观测值y
第二项是生成训练参数,权重weight和偏差bias,这个是tf.Variable函数生成了,这个函数非常常用,变量都是用它来生成的
第三项是得到预测值,通过上面的参数与x_data运算得到
第四项计算损失,观测值与预测值相差平方取平均
第五项生成一个优化器,使用的是梯度下降优化器
第六项则是用优化器去最小化损失
第七项是生成初始化op,相当于所有变量初始化的开关,在sess里运行则所有变量进行初始化
第八项是生成会话session
第九项是初始化所有变量,只有用tf.Variable函数,都要用这个sess.run(init)初始化,不然参数没有进行初始化,无法迭代更新
第十项是循环训练,执行train,它会最小化损失,在这个过程中,参数也在不停地更新,我们用print打印出了步数和参数值

这个说一句,使用tf函数生成的源op,必须在会话中运行,上面一小节我们讲了自顶向下看,这里的顶是train,最下面是参数,sess.run(train)会带动它各个分支和分支下面的分支运行

上述程序输出结果如下

为了方便理解,我用tensorboard画了流动图,如图

结尾

基础知识到一段落了,希望这篇文章能对你学习tensorflow有帮助,由于博主能力有限,若有错误之处,还请不吝指教!谢谢!

百度云链接:https://pan.baidu.com/s/1eBDs0ey4K9-3rVnsJOorag

tensorflow笔记(一)之基础知识的更多相关文章

  1. iOS 阶段学习第11天笔记(OC基础知识)

    iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import  用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...

  2. ios开发学习笔记001-C语言基础知识

    先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...

  3. Spring笔记01(基础知识)

    1.基础知识 01.Spring:轻量级Java EE开源框架,它是由Rod Johnson为了解决企业应用程序开发的复杂性而创建. 02.目标:实现一个全方位的整合框架,实现“一站式”的企业应用开发 ...

  4. [terry笔记]data guard基础知识

    如下介绍了data guard的基础知识,整理自网络: Data Gurad 通过冗余数据来提供数据保护,Data Gurad 通过日志同步机制保证冗余数据和主数据之前的同步,这种同步可以是实时,延时 ...

  5. Java 8实战之读书笔记二:基础知识

    好记性不如烂笔头,整理一些个人觉得比较重要的东西. 一.基础知识 第1章 为什么要关心Java 8 Java 8提供了一个新的API(称为"流", Stream),它支持许多处理数 ...

  6. MySQL必知必会笔记——查询的基础知识

    查询基础知识 第七章 数据过滤 组合where子句 MySQL允许给出多个WHERE子句.这些子 句可以两种方式使用:以AND子句的方式或OR子句的方式使用. AND操作符 可使用AND操作符给WHE ...

  7. FreeRTOS学习笔记——FreeRTOS 任务基础知识

    RTOS 系统的核心就是任务管理,FreeRTOS 也不例外,而且大多数学习RTOS 系统的工程师或者学生主要就是为了使用RTOS 的多任务处理功能,初步上手RTOS 系统首先必须掌握的也是任务的创建 ...

  8. 《Python基础教程(第二版)》学习笔记 -> 第一章 基础知识

    写笔记的原因:书也看了一遍,视频也看了,但总是感觉效果不好,一段时间忘记了,再看又觉得有心无力,都是PDF的书籍,打开了就没有心情了,上班一天了,回家看这些东西,真的没多大精力了,所以,我觉得还是把p ...

  9. [Python笔记]第一篇:基础知识

    本篇主要内容有:什么是python.如何安装python.py解释器解释过程.字符集转换知识.传参.流程控制 初识Python 一.什么是Python Python是一种面向对象.解释型计算机程序设计 ...

  10. TCP/IP笔记(一)网络基础知识

    计算机与网络发展 计算机自诞生伊始,经历了一系列演变与发展.大型通用机计算机.超级计算机.小型机.个人电脑.工作站.便携式电以及现如今的智能手机终端都是这一过程的产物.它们性能逐年增强,价格却逐年下降 ...

随机推荐

  1. java程序员常见面试题目

      答:每当程序出现异常之后,如果程序没有进行相应的处理,则程序会出现中断现象.实际上,产生了异常之后,JVM会抛出一个异常类的实例化对象,如果此时使用了try语句捕获的话,则可以进行异常的处理,否则 ...

  2. spring +springmvc+mybatis组合总结

    springmvc+spring+mybatis整合:1. 拷贝所需jar2. 创建spring配置文件(beans.xml)3. 配置数据源 <bean id="dataSource ...

  3. tp框架-----Model模型层

    1.Model模型层是用来做什么的呢? 主要是用来做操作数据库访问的.也就说明TP框架自带了一种访问数据库的方式,使用的是Model模型. 2.Model模型怎样使用呢? 要使用Model模型层访问数 ...

  4. 读书共享 Primer Plus C-part 8

    第十三章 文件输入/输出 fopen--fclose fopen 是文件的操作的开始 fclose是文件操作的结束 getc--putc getchar--putchar getc对应文件的获取单个字 ...

  5. PhpStorm配置PHP解释器(wampServer版)

    PHPStorm(以下简称为PS)和wampServer集成环境安装简单,不再赘述. 本人使用PhpStrom版本为2017.1.4版本. PS刚开始使用会使用自带服务器,但是有几率不能自动匹配到PH ...

  6. SQLServer中的执行计划缓存由于长时间缓存对性能造成的干扰

    本文出处:http://www.cnblogs.com/wy123/p/7190785.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  7. 4,JPA-Hibernate

    一,什么是JPA JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA(Java Pers ...

  8. webstrom一键上传github及使用

    对于webstrom是我参加it修真园时就推荐使用的,其他编辑器我也没什么使用过.读大学的时候还是比较喜欢 Notepad++. 现在说一下webstrom主要的关键点吧! 一.实现一键上传githu ...

  9. Easyui+MVC+FullCalendar插件实现日程记录功能

    好久好久好久,,,没有写博客了,,久到账号都忘记了....分享一个干货.... 废话少说,先看看效果图. 要实现这样一个功能,先创建一个用于存储日程的记录表(不要问我为什么都是大写,因为初版在orac ...

  10. ABP从入门到精通(1):aspnet-zero-core项目启动及各项目源码说明

    一.ABP的简单介绍 ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NET Boilerplate是一个用最佳实践 ...