Python神经网络1之TensorFlow
深度学习介绍
深度学习与机器学习的区别
特征提取方面
- 机器学习的特征工程步骤是要靠手动完成的,需要大量领域的专业知识
- 深度学习通常用多个层组成,它们通常将更简单的模型组合在一起,将数据从一层传递到另一层来构建更复杂的模型,通过训练大量数据自动得出模型,不需要人工特征提取环节
数据量和计算性能方面要求
- 深度学习需要大量的训练数据集
- 训练深度神经网络需要大量的算力
算法代表
- 机器学习 -朴素贝叶斯、决策树
- 深度学习 -神经网络
深度学习框架介绍
框架名 | 主语言 | 从语言 | 灵活性 | 上手难易 | 开发者 |
---|---|---|---|---|---|
Tensorflow | C++ | cuda/python | 好 | 难 | |
PyTorch | python | C/C++ | 好 | 中等 | |
Caffee | C++ | cuda/python/Matlab | 一般 | 中等 | 贾杨清 |
MXNet | c++ | cyda/R/julia | 好 | 中等 | 李沐和陈天奇等 |
Torch | lua | c/cuda | 好 | 中等 | |
Theano | python | C++/cuda | 好 | 易 | 蒙特利尔理工学院 |
总结:
- 最常用的框架当数TensorFlow和Pytorch,而Caffee和Caffee2次之
- PyTorch和Torch更适用于学术研究,TensorFlow,Caffee,Caffee2更适用于工业界的生产环境部署
- Caffee适用于处理静态图像,Torch和PyTorch更适用于动态图像,TensorFlow在两种情况下都很实用
- TensorFlow和Caffee2可在移动端实用
TensorFlow的安装
- CPU与GPU的对比
CPU:核芯的数量更少,但是每一个核芯的速度更快,性能更强,更适用于处理连续性的任务
GPU:核芯的数量更多,但是每一个核芯的处理速度较慢,更适用于并行任务 - CPU版本
macOS安装
pip install tensorflow==1.8 -i https://mirrors.aliyun.com/pypi/simple
TensorFlow框架介绍
TensorFlow结构分析
TensorFlow程序通常被组织成一个构建图阶段和一个执行图阶段
在构建阶段,数据与操作的执行步骤被描述成一个图
在执行阶段,使用会话知心构建好的图中的操作
- 构建图----类似流程图,定义数据和操作
- 执行图----调用各方资源,将定义好的数据和操作运行起来
图和会话:
- 图:这是TensorFlow将计算表示为指令之间的依赖关系的一种表示法
- 会话:TensorFlow跨一个或多个本地或远程设备运行数据流图的机制
- 张量:TensorFlow中的基本数据对象
- 节点:提供图当中执行的操作
TensorFlow是一个采用数据流图,用于数值计算的开源框架
节点在图中表示数学操作,线则表示在节点间相互联系的多维数据数组,即张量
案例加法展示
pycharm上主流是2.x版本的,添加
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
这两行代码将2.x版本变成1.x版本来学习
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
def tensorflow_demo01():
# Tensorflow 实现加法运算
a=tf.constant(2);
b=tf.constant(3);
c=a+b;
print(c)
#开启会话
with tf.Session() as sess:
c_t=sess.run(c)
print("c_value:",c_t)
return None;
if __name__=='__main__':
tensorflow_demo01();
图与TensorBoard
简单来说,图结构 就是 图数据+操作
图相关操作
默认图
通常TensorFlow会默认帮我们创建一张图
查看默认图的两种方法:
- 调用tf.get_default_graph()访问,
- op,sess,都含有graph属性,默认都在一张图中
def graph_tensorflow_demo02():
a=tf.constant(2)
b=tf.constant(3)
c=a+b
print("c:",c)
#查看图属性
#方法一:调用方法
g_graph=tf.get_default_graph()
print("g的图属性:",g_graph)
with tf.Session() as sess:
c_t=sess.run(c)
print("c_t:",c_t)
#方法二:查看属性
print("session的图属性:",sess.graph)
print("a_g:",a.graph)
print("b_g:",b.graph)
return None;
创建图
- 通过tf.Graph()自定义创建图
- 如果要在这张图中创建OP,典型用法就是使用tf.Graph.as_default()上下文管理器
不能在自定义图中运行数据和操作
def diy_graph_tensorflow_demo03():
#自定义图
new_Graph=tf.Graph()
a=tf.constant(20)
b=tf.constant(30)
c=a+b
#在自己的图中定义数据和操作
with new_Graph.as_default():
a_new=tf.constant(20)
b_new=tf.constant(30)
c_new=a_new+b_new;
print("c_new:\n",c_new)
print("a_graph:\n",a_new.graph)
print("b_graph:\n",b_new.graph)
#开启会话
with tf.Session() as sess:
c_value=sess.run(c)
print("c_value:\n",c_value)
#开启new_Graph会话
with tf.Session(graph=new_Graph) as new_sess:
c_new_value=new_sess.run(c_new)
print("c_new_value:\n",c_new_value)
return None;
TensorBoard:可视化学习
实现程序可视化过程:
- 数据序列化-events文件
tf.summary.FileWriter(path,graph=sess.graph) - 启动TensorBoard
tensorboard --logdir=path
def demo03():
a=tf.constant(10)
b=tf.constant(20)
print("a\n", a)
print("b\n", b)
c=a+b
#开启会话
with tf.Session() as sess:
c_value=sess.run(c)
print("c_value:\n",c_value)
tf.summary.FileWriter("./tmp/summary",graph=sess.graph)
OP
数据:Tensor对象
操作:Oeration对象 -OP
- 常见OP
操作函数 | 操作对象 |
---|---|
tf.constant(Tensor对象) | 输入Tensor对象 —Constant -输出 Tensor对象 |
tf.add(Tensor对象1,Tensor对象2) | 输入Tensor对象1,Tensor对象2 —Add对象 -输出 Tensor对象3 |
- 指令名称
一张图对应一个命名空间
tf.Graph对象为其包含的tf.Operation对象定义的一个命名空间。用户可以指定描述性名称,使程序阅读起来更轻松
def demo04():
a=tf.constant(1,name="a")
b=tf.constant(2,name="b")
print("a\n",a)
print("b\n",b)
c=tf.add(a,b,name="c")
print("c:\n",c)
with tf.Session() as sess:
c_value=sess.run(c)
tf.summary.FileWriter("./tmp/summary",graph=sess.graph)
print("c_value:\n",c_value)