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. Gist - Fetch Usage

    Introduction Do you prefer the usage of "ES6 Promise"? If you do, you will like the usage ...

  2. 简单地总结几种常见web攻击手段及其防御方式

    web攻击手段有几种,本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scr ...

  3. VB6获取IE8的地址栏的URL信息

    这是个老梗了,也没什么技术含量.因为自从接触Linux之后,Windows上我所知道的那一点api基本上都忘光了.所以这样的博文可以当做是备忘,说不定有天还能用的到. Windows上想要获取浏览器的 ...

  4. orcle 索引的使用

    2.4.3.1. 索引的概念 数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速查找所需信息, 无须阅读整本书.在数据库中,索引使数据库程序无须对整个表进行扫描, 就可以在其中找到所需数据 ...

  5. 百度BAE环境搭建

    一.申请 1.http://bce.baidu.com/index.html 2.购买应用引擎BAE需要实名认证:http://console.bce.baidu.com/qualify/#/qual ...

  6. 安装Scala-2.11.7——集群学习日记

    前言 在安装Spark之前,我们需要安装Scala语言的支持.在此我选择的是scala-2.11.7版本. scala-2.11.7下载 为了方便,我现在我的SparkMaster主机上先安装,把目录 ...

  7. 在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)

    最近公司的大厅要重做,我协助主程一起制作新大厅和新框架,前面制作的编辑器也派上了用场.等全部功能做完后我会再写一个复盘,这两天主程在忙于写热更新的功能,所以把接入分享SDK功能的任务交给了我,Shar ...

  8. 回味Python2.7——笔记2

    一.模块 模块是包括 Python 定义和声明的文件.文件名就是模块名加上 .py 后缀.模块的模块名(做为一个字符串)可以由全局变量 __name__ 得到. 1. 模块可以导入其他的模块. 一个( ...

  9. Angular02 将数据添加到组件中

    准备:已经搭建好angular-cli环境.知道如何创建组件 一.将一个数据添加到组件中 1 创建一个新的组件 user-item 2 将组件添加到静态模板中 3 为组件添加属性,并利用构造器赋值 4 ...

  10. linux 在jetty中部署web工程

    背景:公司中原有的项目需要在jetty中进行部署,所以要掌握相关知识. 1 部署步骤 首先要保证jdk环境变量配置正常,然后去官网下载对应版本号的jetty,解压缩即可. 将需要部署的web应用,wa ...