在本节学习之前先学习一下python 的几个库:
numpy:来存储和处理大型矩阵(比python内部的列表结构高效)
python 中数据的表示:
1.一维数据:(列表与集合)
[3.12, 3.13,3.14]
{3.13, 3.12.3.14}
2. 二维数据:(列表类型)
[[3.12, 3.13],[3.2, 3.3]]
3. 多维数据: 列表类型
4.高维数据:字典类型
dict={
"firstName":"Tian",
"lastName": "Song",
}
numpy 的数据对象为ndarray
ndarray 是N维数组对象: 由两个部分构成:(实际数据和描述数据的元数据如数据维度、数据类型等)
#ndarray实例 #ndarray在程序中的别名是:array import numpy as np a = np.array([[0,1,2,3,4], [9,8,7,6,5]]) print(a) #np.array()输出成[]形式,元素由空格分割
ndarray 对象的属性:
.ndim 秩,维度的数量
.shape adarray 对象的尺度,n行m列
.size ndarray 对象元素的个数,.shape 中的n*m
.dtype ndarray 对象的元素类型
.itemsize ndarray 对象中每个元素的大小
创建ndarray 数组:
x = np.array(list/tuple)
np.arange(n) 类似range()函数,返回ndarray类型,元素从0到n‐1
np.ones(shape) 根据shape生成一个全1数组,shape是元组类型
np.zeros(shape) 根据shape生成一个全0数组,shape是元组类型
np.full(shape,val) 根据shape生成一个数组,每个元素值都是val
np.eye(n) 创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.ones_like(a) 根据数组a的形状生成一个全1数组
np.zeros_like(a) 根据数组a的形状生成一个全0数组
np.full_like(a,val) 根据数组a的形状生成一个数组,每个元素值都是val
np.linspace() 根据起止数据等间距地填充数据,形成数组
np.concatenate() 将两个或多个数组合并成一个新的数组
对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换
.reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape) 与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2) 将数组n个维度中两个维度进行调换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变
Matplotlib:
python中的绘图系统,
scipy:
统计,优化,整合,线性代数模块,傅里叶变换,信号和图像处理,常微分方程求解器
scikit-learn:
机器学习工具, 如svm等方法都包含其中:
首先创建所需算法的对象,然后在训练和测试集上构建一个模型获得预测:
clf=svm.SVC(gamma=0.001,C=100) # train clf.fit(x,y) # test clf.predict(X_test)
正式开始
tensorflow 和 numpy相似
tensorflow 的操作基本都是对session的操作,首先构建所有操作的Graph,然后调用session运行操作。tensorflow将内部数据表示转换的张量(Tensor,多维数组),整个Graph就是“张量流”,可以轻松地可视每个图中的每个部分, data flow graphs。graph 中的节点为数学操作,图中的边为节点间相互联系的多维数据数组(tensor)。变量保持自己的状态信息。
在tensorflow 中运行程序的通常工作流程为:
- 建立一个计算图 (构建节点和边)
- 初始化变量 (预选定义参数)
- 创建session
- 在session 中运行图
- 关闭session
需要主要的地方:
1. 既然先创建结构,在session创建之后才run,数据输入是怎么进行的?
首先使用placeholder 定义输入的数据的类型,大小,作为graph的输入
在真正run的时候使用feed_dict 将数值传递到计算图的字典中feed_dict={a: 2, b: 3}