tensorflow 入门

原创 2017年08月13日 23:23:05

介绍

TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。它是谷歌基于DistBelief进行研发的第二代人工智能学习系统。2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源。

TensorFlow名字的来源

其命名来源于本身的原理,Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算。Tensorflow运行过程就是张量从图的一端流动到另一端的计算过程。张量从图中流过的直观图像是这个工具取名为“TensorFlow”的原因。

什么是数据流图(Data Flow Graph)?

数据流图用“节点”(nodes)和“线”(edges)的有向图来描述数学计算。“节点”一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以运输“size可动态调整”的多维数组,即“张量”(tensor)。一旦输入端所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行计算。
这里写图片描述

Tensorflow的特性

高度的灵活性: TensorFlow不是一个严格的“神经网络”库。只要你可以将你的计算表示为一个数据流图,你就可以使用TensorFlow。

可移植性(Portability):Tensorflow可以运行在台式机、服务器、手机移动等等设备上。而且它可以充分使用计算资源,在多CPU和多GPU上运行。

多语言支持:Tensorflow提供了一套易用的Python使用接口来构建和执行graphs,也同样提供了一套易于C++使用的接口(目前训练神经网络只支持python,C++接口只能使用已经训练好的模型)。未来还会支持Go、Java、Lua、JavaScript、R等等。

性能最优化:TensorFlow给予了线程、队列、异步操作等最佳的支持,TensorFlow可以把你手边硬件的计算潜能全部发挥出来,它可以充分利用多CPU和多GPU。

Basic Concepts

图(Graph)

图描述了计算的过程,TensorFlow使用图来表示计算任务。

张量(Tensor)

名字就是TensorFlow,直观来看,就是张量的流动。张量(tensor),即任意维度的数据,一维、二维、三维、四维等数据统称为张量,一个 tensor 包含一个静态类型 rank, 和 一个 shape. 。而张量的流动则是指保持计算节点不变,让数据进行流动。这样的设计是针对连接式的机器学习算法,比如逻辑斯底回归,神经网络等。连接式的机器学习算法可以把算法表达成一张图,张量从图中从前到后走一遍就完成了前向运算;而残差从后往前走一遍,就完成了后向传播。

算子(operation/操作)

在TF的实现中,机器学习算法被表达成图,图中的节点是算子(operation),节点会有0到多个输出。

每个算子都会有属性,所有的属性都在建立图的时候被确定下来,比如,最常用的属性是为了支持多态,比如加法算子既能支持float32,又能支持int32计算。

核(kernel)

TF中还有一个概念是kernel,kernel是operation在某种设备上的具体实现。TF的库通过注册机制来定义op和kernel,所以可以通过链接一个其他的库来进行kernel和op的扩展。

边(edge)

TF的图中的边分为两种:

  • 正常边,正常边上可以流动数据,即正常边就是tensor
  • 特殊边,又称作控制依赖,(control dependencies)
    • 没有数据从特殊边上流动,但是特殊边却可以控制节点之间的依赖关系,在特殊边的起始节点完成运算之前,特殊边的结束节点不会被执行。
    • 也不仅仅非得有依赖关系才可以用特殊边,还可以有其他用法,比如为了控制内存的时候,可以让两个实际上并没有前后依赖关系的运算分开执行。
    • 特殊边可以在client端被直接使用

会话(Session)

客户端使用会话来和TF系统交互,一般的模式是,建立会话,此时会生成一张空图;在会话中添加节点和边,形成一张图,然后执行。

Session 是 Tensorflow 为了控制,和输出文件的执行的语句. 运行 session.run() 可以获得你要得知的运算结果, 或者是你所要运算的部分.
创建一个Session对象启动图的第一步。

sess = tf.Session()
 # 执行 product 计算 结构
result = sess.run(product)
print(result)
sess.close()

变量(Variables)

机器学习算法都会有参数,而参数的状态是需要保存的。而参数是在图中有其固定的位置的,不能像普通数据那样正常流动。因而,TF中将Variables实现为一个特殊的算子,该算子会返回它所保存的可变tensor的句柄。

state = tf.Variable(0,name='counter')
print(state.name)

传参 placeholder

Tensorflow 如果想要从外部传入data, 那就需要用到 tf.placeholder(), 然后以这种形式传输数据 sess.run(***, feed_dict={input: **}).

#在 Tensorflow 中需要定义 placeholder 的 type ,一般为 float32 形式
# tf.placeholder(tf.float32,[2,2]) 规定数据结构
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)

# mul = multiply 是将input1和input2 做乘法运算,并输出为 output 
ouput = tf.multiply(input1, input2)

with tf.Session() as sess:
    # 以feed_dict 传入参数,python 字典的格式   
    # 需要传入的值放在了feed_dict={} 并一一对应每一个 input. placeholder 与 feed_dict={} 是绑定在一起出现的。
    print(sess.run(ouput,feed_dict={input1: [7.], input2: [2.]}))

激励函数 activation function

激励函数运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经系统。激励函数的实质是非线性方程。 Tensorflow 的神经网络 里面处理较为复杂的问题时都会需要运用激励函数 activation function 。

A small example

# -*- coding: utf-8 -*-
# 预测一个线性的直线 ,预测 y = 0.1*x+0.3
import tensorflow as tf
# 导入科学计算模块  
import numpy as np

#自己编一些数据,因为在tensorflow 中,他的大部分数据格式是 float 32 的形式 
x_data = np.random.rand(100).astype(np.float32) 
# 这就是我们预测的 y=Weights * x + biases   Weights 接近0.1  激励 接近0.3 然后神经网络也就是学着把 Weights 变成 0.1, biases 变成 0.3
y_data = x_data*0.1 + 0.3

# 开始创建 tensorflow 的结构  
#  Weights可能是个矩阵,此处定义 Weights 变量是一个一维的 参数范围为 -1.0 到 1.0的变量
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
# biases 是一个一维变量,初始值是 0 
biases  = tf.Variable(tf.zeros([1]))
# 上边两步是生成两个初始值,Weights 和 biases ,然后 Weights 和 biases 经过学习会越来越趋近于 0.1 和 0.3


# 预测的y 
y = Weights*x_data + biases
# 接着就是计算 y预测值 和 y_data真实值 的误差:
loss = tf.reduce_mean(tf.square(y-y_data))

# 建立一个优化器, 减少神将网络的误差  GradientDescentOptimizer 是最基础的优化器, 0.5 为学习效率(0-1),
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

# 初始化变量 ,神经网络就是一个图,上边就是建立结构,这里是初始化变量,激活图
# init = tf.initialize_all_variables() # tf 马上就要废弃这种写法
init = tf.global_variables_initializer()  # 替换成这样就好


sess = tf.Session()
# 从init 开始 跑我们的图片,init 就是神经网络的入口
sess.run(init) 

       # 训练201次
for step in range(201):
    # 开始训练
    sess.run(train)
    if step % 20 == 0:
     # 每隔20 次训练 输出一下当前我的 Weights参数  和 biases参数 , run(Weights) 就是像指针一样指向我图中的 Weights
        print(step, sess.run(Weights), sess.run(biases))

本文源码:https://github.com/527515025/pythonLean
参考:http://www.cnblogs.com/x_wukong/p/5579438.html
http://blog.csdn.net/toormi/article/details/53609245
https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/2-3-session/

版权声明:本文为博主编写文章,未经博主允许转载,转载请注明出处。

相关文章推荐

tensorflow入门程序

  • 2017年11月23日 09:44
  • 22.16MB
  • 下载

TensorFlow——DL重要框架的入门PPT

  • 2017年10月28日 16:45
  • 55.71MB
  • 下载

tensorflow学习入门

深度学习框架tensorflow安装,基本概念,入门学习

TensorFlow入门(六) 双端 LSTM 实现序列标注(分词)

@author: huangyongye @creat_date: 2017-04-19 reference: - [1] 【中文分词系列】 4. 基于双向LSTM的seq2seq字标注 ...
  • Jerr__y
  • Jerr__y
  • 2017年04月22日 20:00
  • 9311

TensorFlow 教程 - MNIST机器学习入门完整代码

这个是TensorFlow官方文档中“MNIST机器学习入门”这部分的完整代码,并加入了部分注释。 原教程中详细地讲解了一下如何使用TensorFlow做一个最简单的模型来对MNIST数据集进行训练...
  • Toormi
  • Toormi
  • 2016年12月20日 17:41
  • 7924

Tensorflow快速入门1--实现K-Means聚类算法

Tensorflow快速入门1–实现K-Means聚类算法 环境: 虚拟机ubuntun16.0.4 Tensorflow版本:0.12.0(仅使用cpu下,pip命令安装)目录1.环境搭建1.1...

tensorflow入门2 几个函数的总结和手写数字识别

tensorflow中很多函数是对神经网络中用到的一些功能的封装 tf.nn.softmax_cross_entropy_with_logits(logits,labels,name=None)函数,...

TensorFlow人工智能引擎入门教程所有目录

http://my.oschina.net/yilian/blog/664632 目录[-] TensorFlow 人工智能引擎 入门教程之一 基本概念以及理解 Tensor...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:tensorflow 入门
举报原因:
原因补充:

(最多只允许输入30个字)