基本使用
使用 TensorFlow, 你必须明白 TensorFlow:
– 使用图 (graph) 来表示计算任务.
– 在被称之为 会话 (Session) 的上下文 (context) 中执行图.
– 使用 tensor 表示数据.
– 通过 变量 (Variable) 维护状态.
– 使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据.
使用过程
TensorFlow 是一个编程系统, 使用图来表示计算任务. 图中的节点被称之为 op (operation 的缩写). 一个 op 获得 0 个或多个 Tensor, 执行计算, 产生 0 个或多个 Tensor. 每个 Tensor 是一个类型化的多维数组. 例如, 你可以将一小组图像集表示为一个四维浮点数数组, 这四个维度分别是 [batch, height, width, channels].
一个 TensorFlow 图描述了计算的过程. 为了进行计算, 图必须在 会话 里被启动. 会话 将图的 op 分发到诸如 CPU 或 GPU 之类的 设备 上, 同时提供执行 op 的方法. 这些方法执行后, 将产生的 tensor 返回. 在 Python 语言中, 返回的 tensor 是 numpy ndarray 对象; 在 C 和 C++ 语言中, 返回的 tensor 是 tensorflow::Tensor 实例.
所以 在python中 要引入numpy 然后操作ndarray对象
numpy
numpy 是使用python进行数据分析不可或缺的第三方库,非常多的科学计算工具都是基于 numpy 进行开发的。
ndarray对象是用于存放同类型元素的多维数组,是numpy中的基本对象之一,另一个是func对象
数据生成
np.ndarray(shape=(2,3), dtype=int, buffer=np.array([1,2,3,4,5,6,7]), offset=0, order="C")
– shape 是形状 这个是两行三列
– dtype 数组中元素类型
– buffer 初始化这个ndarray的数据
– offset buffer中用于初始化数组的首个数据的偏移
– strides 每个轴的下标增加1时,数据指针在内存中增加的字节数
– order ‘C’:行优先;’F’:列优先
数据操作
T 转置:行列转化
size 数组中元素个数
itemsize 数组中单个元素的字节长度
dtype 数组元素的数据类型对象
ndim 数组的维度
shape 数组的形状
data 指向存放数组数据的python buffer对象
flat 返回数组的一维迭代器
imag 返回数组的虚部
real 返回数组的实部
nbytes 数组中所有元素的字节长度
arr=np.ndarray(shape=(2,3), dtype=int, buffer=np.array([1,2,3,4,5,6,7]), offset=0, order="C")
print(arr)
arr=arr.T
print(arr)
print(arr.size)
print(arr.itemsize)
print(arr.shape)
ndarray的创建
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
np.array([1, 2, 3])
np.array([[1, 2],[3, 4]])
np.array(np.mat('1 2; 3 4'))
- numpy内建的一些函数来创建ndarray;
函数ones创建一个全1的数组、函数zeros创建一个全0的数组、函数empty创建一个内容随机的数组.指定数据类型使用dtype参数即可
eye 生成对角线全1,其余位置全是0的二维数组
identity 生成单位矩阵
full 生成由固定值填充的数组
full_like 生成由固定值填充的、形状与给定数组相同的数组
ndarray元素访问
- 对于一维的ndarray可以使用python访问内置list的方式进行访问:整数索引、切片、迭代等方式
ndarray中的切片返回的数组中的元素是原数组元素的索引,对返回数组元素进行修改会影响原数组的值
- 多维数组
多维ndarray中,每一维都叫一个轴axis。在ndarray中轴axis是非常重要的,有很多对于ndarray对象的运算都是基于axis进行x = np.arange(0, 100,5).reshape(4, 5) print(x) print(x[1,2]) print(x[0:2,3]) print(x[0:2,:]) [[ 0 5 10 15 20] [25 30 35 40 45] [50 55 60 65 70] [75 80 85 90 95]] 35 [15 40] [[ 0 5 10 15 20] [25 30 35 40 45]]
- 当提供的索引比轴数少时,缺失的索引表示整个切片(只能缺失后边的轴)
- 当提供的索引为:时,也表示整个切片
- 可以使用…代替几个连续的:索引
- 多维数组迭代
for item in x.flat print(item)
tensor
TensorFlow 程序使用 tensor 数据结构来代表所有的数据, 计算图中, 操作间传递的数据都是 tensor. 你可以把 TensorFlow tensor 看作是一个 n 维的数组或列表. 一个 tensor 包含一个静态类型 rank, 和 一个 shape.
例子
https://github.com/tensorflow/models/tree/master/tutorials/image/cifar10/
发表回复