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官方文档学习|TensorFlow运作方式入门

TensorFlow官方文档学习|TensorFlow运作方式入门   目的 data_sets.train 55000个图像和标签(labels),作为主要训练集。 data_...
  • darlingwood2013
  • darlingwood2013
  • 2017年03月12日 19:53
  • 818

TensorFlow学习笔记之三——适合入门的一些资源

Github上除了有TensorFlow的源码库之外,还有一些很不错的适合入门的资源。现在将目前已经解除到的资源整理出来,和大家分享。1、TensorFlow源码库https://github.com...
  • snsn1984
  • snsn1984
  • 2016年05月11日 10:16
  • 18670

TensorFlow (一) 从入门到实践

一、TnesorFlow 计算模型————计算图1、 计算图概念1.1 Tensor Tensor就是张量, 可以简单理解为多维数组,表明了数据结构 1.2 FlowFlow 表达了张量之间通过计算...
  • qq_21046135
  • qq_21046135
  • 2017年07月27日 21:43
  • 1330

TensorFlow学习笔记(一)入门

TensorFlow是什么? 是谷歌开源的机器学习实现框架,本文从Python语言来理解学习Tensorflow以及机器学习的知识。 TensorFlow的API主要分两个层次,核心层和基于核心层的高...
  • WuyZhen_CSDN
  • WuyZhen_CSDN
  • 2017年03月21日 21:32
  • 6508

对于小白机器学习的入门图解 tensorflow 简单入门图解

作者:地球的外星人君 链接:https://www.zhihu.com/question/49909565/answer/207609620 来源:知乎 著作权归作者所有。商业转载请联系作者获得...
  • lwl8881081
  • lwl8881081
  • 2017年08月27日 20:48
  • 376

【tensorflow】tensorflow入门小例子

最近学习了下tensorflow,感觉这玩意有点类似matlab拟合曲线。给你一堆数据,然后进行数学建模,然后求出合适的模型中的各个参数来看看下面这个例子,我们构造一些离散的点,这些点我们暂且从 y ...
  • u012819339
  • u012819339
  • 2017年07月13日 18:01
  • 1688

TensorFlow入门(一)基本用法

TensorFlow入门(一)基本用法refer to: http://wiki.jikexueyuan.com/project/tensorflow-zh/get_started/basic_usa...
  • Jerr__y
  • Jerr__y
  • 2017年02月25日 16:37
  • 18187

TensorFlow学习笔记(四)——TensorFlow运作方式入门、可视化

一、TensorFlow运作方式入门 fully_connected_feed.py # Copyright 2015 Google Inc. All Rights Reserved. #...
  • Katherine_java
  • Katherine_java
  • 2016年10月21日 19:12
  • 2247

TensorFlow 从入门到精通

http://blog.csdn.net/column/details/tf-starter-to-hacker.html
  • dddxxxx
  • dddxxxx
  • 2017年12月19日 12:48
  • 56

TensorFlow入门(基础语法,小程序)

本文参考自:莫烦Python - Tensorflow 教程系列TensorFlow入门: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context)...
  • login_sonata
  • login_sonata
  • 2017年08月27日 15:17
  • 1163
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:tensorflow 入门
举报原因:
原因补充:

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