【深度学习-2】TensorFlow基础(一): tensor and operation

尽管有一定的Python基础,但当我第一次接触TensorFlow(TF)的时候还是感觉很不习惯。所以,学习TF的第一步是用简单的例子(不涉及机器学习)搞清楚TF中的基本概念。

我在学习TensorFlow基础的时候,总结了以下2个目标:

  1. 能够熟练的使用Tensors,Graphs,Operations,Variables,placeholders,Sessions和name scopes来构建运行简单的TensorFlow graphs
  2. 能够在TensorBoard中查看构建好的graphs

简介

TensorFlow,顾名思义就是流动着的Tensor。首先,我们要搞清楚什么是tensor,它在哪里以何种方式流动?用最简单的话来说,Tensor实际上就是一个多维数组(multidimensional array),是TF的主要数据结构。它们在一个或多个由节点(nodes)和边(edges)组成的图(graphs)中流动。边代表的是tensors,节点代表的是对tensors的操作(operations,or Ops for short)。tensors在图中从一个节点流向另一个节点,每次经过一个节点都会接受一次操作。

Tensor

我在用R编程的时候,大多数情况下处理的都是2维的表格,而学习TF的时候就要接触更高维的数据结构,所以最好能在头脑中想象出数据的形状,例如:


【深度学习-2】TensorFlow基础(一): tensor and operation_第1张图片
tensors.png

举个简单的例子,彩色图像文件(RGB)一般都会处理成3-d tensor,每个2d array中的element表示一个像素,R代表Red,G代表Green,B代表Blue:


【深度学习-2】TensorFlow基础(一): tensor and operation_第2张图片
rgb_tensor.png

创建tensor的方法可以分为2种,一种是用TF自带的一些函数直接创建,例如:

import tensorflow as tf

# create a zero filled tensor
tf.zeros([row_dim, col_dim])

# create a one filled tensor
tf.ones([row_dim, col_dim])

# create a constant filled tensor
tf.fill([row_dim, col_dim], 42)

# create a tensor out of an existing constant
tf.constant([1, 2, 3])

# generate random numbers from a uniform distribution
tf.random_uniform([row_dim, col_dim], minval=0, maxval=1)

# generate random numbers from a normal distribution
tf.random_normal([row_dim, col_dim], mean=0.0, stddev=1.0)

另一种是将Python对象(Numpy arrays, Python lists,Python scalars)转成tensor,例如:

import numpy as np
x_data = np.array([[1., 2., 3.], [3., 2., 6.]])
tf.convert_to_tensor(x_data, dtype=tf.float32)

Tensor对象有3个属性:

  1. rank:number of dimensions
  2. shape: number of rows and columns
  3. type: data type of tensor's elements

Operation

下面举一个简单的例子来说明tensor是如何在graph中流动的:


【深度学习-2】TensorFlow基础(一): tensor and operation_第3张图片
example1.png

节点a接收了一个1-D tensor,该tensor从节点a流出后,分别流向了节点b和c,节点b执行的是prod操作(5*3),节点c执行的是sum操作(5+3)。当tensor从节点b流出时变成了15,从节点c流出时变成了8。此时,2个tensor又同时流入节点d,接受的是add操作(15+8),最后从节点d流出的tensor就是23。

用TF代码来创建上面的graph:

import tensorflow as tf
a = tf.constant([5, 3], name='input_a')
b = tf.reduce_prod(a, name='prod_b')
c = tf.reduce_sum(a, name='sum_c')
d = tf.add(b, c, name='add_d')

在上面的代码中,我们用不同的构造函数(constructor)定义了四个操作(对应图上4个节点)。例如,tf.constant()创建的操作实际上就是一个“二传手”:接受一个tensor(或者一个list对象,自动将其转换成tensor对象),然后传给与它直接相连的下一个node。tf.reduce_prod()tf.reduce_sum()操作可以把input tensor对象中的所有值相乘或相加,然后传递给下一个直接相连的node。

未完待续......

你可能感兴趣的:(【深度学习-2】TensorFlow基础(一): tensor and operation)