tensorflow笔记(一)之基础知识

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/1jIzeRxc 密码: 6pbf

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏蘑菇先生的技术笔记

探索c#之一致性Hash详解

26850
来自专栏数据结构与算法

单调队列优化多重背包

\(f[i][j] = max(f[i - 1][j - k * w[i]] + k * v[i])\)

34110
来自专栏CNN

Tensorflow将模型导出为一个文件及接口设置

在上一篇文章中《Tensorflow加载预训练模型和保存模型》,我们学习到如何使用预训练的模型。但注意到,在上一篇文章中使用预训练模型,必须至少的要4个文件:

25420
来自专栏MixLab科技+设计实验室

自己动手做一个识别手写数字的web应用01

最近在深入地学习keras,发现网上各种教程都是教你怎么训练模型的,很少有问题提到如何把训练好的模型部署为后端服务,为web及app提供服务。 于是,我决定把学...

50780
来自专栏Small Code

【Python】Numpy 中的 shuffle VS permutation

有时候我们会有随机打乱一个数组的需求,例如训练时随机打乱样本,我们可以使用 numpy.random.shuffle() 或者 numpy.random.per...

501110
来自专栏量子位

TensorFlow 1.2正式发布,新增Python 3.6支持

王小新 编译整理 量子位 出品 | 公众号 QbitAI TensorFlow 1.2.0今日正式发布。 主要功能和改进点: 在Windows系统下新增对Pyt...

36540
来自专栏debugeeker的专栏

《coredump问题原理探究》windows版3.1节函数桢

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

8120
来自专栏流柯技术学院

jmeter参数化随机取值实现

jmeter能用来做参数化的组件有几个,但是都没有随机取值的功能,遇到随机取值的需求怎么办呢?

31920
来自专栏杨熹的专栏

TensorFlow-6-TensorBoard 可视化学习

学习资料: https://www.tensorflow.org/get_started/summaries_and_tensorboard 中文翻译: h...

35750
来自专栏aCloudDeveloper

Mobility Model and Routing Model about the ONE

ONE主要的功能是节点的移动,节点间的相遇情况,路由情况以及消息的处理机制。下面简要介绍下目前ONE自带的六种移动模型和六种路由模型。 Mobility Mod...

20290

扫码关注云+社区

领取腾讯云代金券