TensorFlow (1) --- 从入门到放弃

一. 什么是Tensor?

TensorFlow,是由Tensors组成的Data Flow Graphs。所以首先,需要明确的一点是,什么是Tensor? 如下图所示:

《TensorFlow (1) --- 从入门到放弃》
《TensorFlow (1) --- 从入门到放弃》

Multi-dimensional array就是所谓的Tensors。举个例子:

《TensorFlow (1) --- 从入门到放弃》
《TensorFlow (1) --- 从入门到放弃》

color image = 3rd-order tensor; 而Tensor的Rank指的就是Tensor的维度:

《TensorFlow (1) --- 从入门到放弃》

上图就是3D tensor of rank 3, 以下是程序表示:

3 # rank = 0;指的是标量
[1. ,2., 3.] # rank = 1;指的是向量vector
[[1., 2., 3.], [4., 5., 6.]] # rank = 2;指的是矩阵matrix
[[[1., 2., 3.]], [[7., 8., 9.]]] # rank >= 2 就没有自己的名称了
#### 总的来说,Tensor是Vector和Matrix等的泛化,只是用Rank来表示。
#### 反过来说,Vetcor和Matrix是Tensor中的特例

The central unit of data in TensorFlow is the
tensor. A tensor consists of a set of primitive values shaped into an array of any number of dimensions. A tensor’s
rank is its number of dimensions.

What makes a tensor a tensor is that when the basic vectors change, the components of the tensor would change in the same manner as they would in one of these objects.

一. 什么是TensorFlow:

TensorFlow是一个采用数据流图(Data Flow Graphs),用于数值计算的开源软件库。Tensors(张量)表示多维数据数组;Nodes(节点)在图中表示数学操作,数据的输入输出和读写操作;而edges(有向图的边),则表示节点之间的联系,主要负责传输多维数据数组Tensors。

从程序运行的角度来说,TensorFlow是一种将计算表示为图的编程系统。图中的Nodes称为ops(operations的简称),一个ops使用(>=0)个的Tensors,一个Tensors是一个多维数组。一个ops通过执行某些运算,产生0或以上个Tensors。

如下图所示:

《TensorFlow (1) --- 从入门到放弃》
《TensorFlow (1) --- 从入门到放弃》

上图表示的是Tensors从图中流过的直观图像。TensorFlow中的图描述了计算的过程。图中的edges可以输运“size可以动态调整” 的多维数组,即Tensors。一旦输入端的所有Tensors准备好,ops将被分配到各种计算设备中完成异步并行的运算。

二. TensorFlow的特征

  • 高度的灵活性: 并不是一个严格的“神经网络”库。将计算表示为数据流图,就可以使用TensorFlow;
  • 可移植性:CPU / GPU / Android / RasPi / Cloud;
  • 将科研与产品联系:可以让应用型研究者将想法迅速运用到产品中;
  • 自动求微分:基于梯度的机器学习算法会受益于TensorFlow。通过预定义预测模型,将结构和Objective function 结合在一起,并添加数据,TensorFlow就可以自动为你计算相关的微分导数;
  • 多语言支持: C++/Python;
  • 性能最优化:支持线程、队列、异步操作等。

三. 运行TensorFlow

  • 使用graph来表示计算任务
  • Sessioncontext中执行图
  • 使用Tensor表示数据
  • 通过Variable维护状态
  • 使用feedfetch可以为人协议操作赋值或者获取数据

TensorFlow 程序通常被组织成一个构建阶段和一个执行阶段. 在构建阶段, op 的执行步骤被描述成一个图。在执行阶段,使用会话执行执行图中的 op。

接下来,我们基于tensorflow实现一个简单的linear regression的例子,代码如下:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf
W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=tf.float32)
x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)

linear_model = W * x + b
squared_deltas = tf.square(linear_model - y)
loss = tf.reduce_sum(squared_deltas)

init = tf.global_variables_initializer()
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
sess = tf.Session()
sess.run(init)
for i in range(1000):
    sess.run(train, {x:[1,2,3,4], y:[0,-1,-2,-3]})
curr_W, curr_b, curr_loss = sess.run([W, b, loss], {x:[1,2,3,4], y:[0,-1,-2,-3]})
print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))

程序输出如下:

《TensorFlow (1) --- 从入门到放弃》

    原文作者:Yohanna
    原文地址: https://zhuanlan.zhihu.com/p/28162050
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞