赞
踩
算法
掌握神经网络的数学原理
手动实现简单的神经网络结构
应用
熟练掌握TensorFlow框架使用
目标
知道深度学习与机器学习的区别
应用
无
深度学习算法试图从数据中学习高级功能,这是深度学习的一个非常独特的部分。因此,减少了为每个问题开发新特征提取器的任务。适合用在难提取特征的图像、语音、自然语言领域
机器学习需要的执行时间远少于深度学习,深度学习参数往往很庞大,需要通过大量数据的多次优化来训练参数。
第一、它们需要大量的训练数据集
第二、是训练深度神经网络需要大量的算力
可能要花费数天、甚至数周的时间,才能使用数百万张图像的数据集训练出一个深度网络。所以以后
机器学习
朴素贝叶斯、决策树等
深度学习
神经网络
目标
知道深度学习的主要应用场景
应用
无
图像识别
物体识别
人脸身份认证
自然语言处理技术
机器翻译
聊天对话
语音技术
语音识别
目标
了解常见的深度学习框架
了解TensorFlow框架
应用
无
tensorflow的github:
官网:[
语言多样(Language Options)
TensorFlow使用C++实现的,然后用Python封装。谷歌号召社区通过SWIG开发更多的语言接口来支持TensorFlow
使用分发策略进行分发训练
对于大型 ML 训练任务,分发策略 API使在不更改模型定义的情况下,可以轻松地在不同的硬件配置上分发和训练模型。由于 TensorFlow 支持一系列硬件加速器,如 CPU、GPU 和 TPU
Tensorboard可视化
TensorBoard是TensorFlow的一组Web应用,用来监控TensorFlow运行过程
在任何平台上的生产中进行强大的模型部署
一旦您训练并保存了模型,就可以直接在应用程序中执行它,或者使用部署库为其提供服务:
安装 TensorFlow在64 位系统上测试这些系统支持 TensorFlow:
进入虚拟环境当中再安装。刚开始的环境比较简单,只要下载tensorflow即可
安装较慢,指定镜像源,请在带有numpy等库的虚拟环境中安装
python pip install tensorflow==1.12 -i
python pip install tensorflow==1.12 -i
注:如果需要下载GPU版本的(TensorFlow只提供windows和linux版本的,没有Macos版本的)参考官网[
1、虚拟机下linux也是用不了GPU版本TensorFlow
2、本机单独的windows和本机单独的unbuntu可以使用GPU版本TensorFlow,需要安装相关驱动
python 说明TensorFlow的数据流图结构 应用TensorFlow操作图 说明会话在TensorFlow程序中的作用 应用TensorFlow实现张量的创建、形状类型修改操作 应用Variable实现变量op的创建 应用Tensorboard实现图结构以及张量值的显示 应用tf.train.saver实现TensorFlow的模型保存以及加载 应用tf.app.flags实现命令行参数添加和使用 应用TensorFlow实现线性回归
目标
说明TensorFlow的数据流图结构
应用
无
内容预览
2.1.1 案例:TensorFlow实现一个加法运算
2.1.2 数据流图介绍
```python def tensorflow_demo(): """ 通过简单案例来了解tensorflow的基础结构 :return: None """ # 一、原生python实现加法运算 a = 10 b = 20 c = a + b print("原生Python实现加法运算方法1:\n", c) def add(a, b): return a + b sum = add(a, b) print("原生python实现加法运算方法2:\n", sum)
# 二、tensorflow实现加法运算
a_t = tf.constant(10)
b_t = tf.constant(20)
# 不提倡直接运用这种符号运算符进行计算
# 更常用tensorflow提供的函数进行计算
# c_t = a_t + b_t
c_t = tf.add(a_t, b_t)
print("tensorflow实现加法运算:\n", c_t)
# 如何让计算结果出现?
# 开启会话
with tf.Session() as sess:
sum_t = sess.run(c_t)
print("在sess当中的sum_t:\n", sum_t)
return None
```
注意问题:警告指出你的CPU支持AVX运算加速了线性代数计算,即点积,矩阵乘法,卷积等。可以从源代码安装TensorFlow来编译,当然也可以选择关闭
python import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
TensorFlow 程序通常被组织成一个构建图阶段和一个执行图阶段。
在构建阶段,数据与操作的执行步骤被描述成一个图。
在执行阶段,使用会话执行构建好的图中的操作。
图和会话 :
图:这是 TensorFlow 将计算表示为指令之间的依赖关系的一种表示法
会话:TensorFlow 跨一个或多个本地或远程设备运行数据流图的机制
张量:TensorFlow 中的基本数据对象
TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源框架。
节点(Operation)在图中表示数学操作,线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。
python 说明TensorFlow的数据流图结构 应用TensorFlow操作图 说明会话在TensorFlow程序中的作用 应用TensorFlow实现张量的创建、形状类型修改操作 应用Variable实现变量op的创建 应用Tensorboard实现图结构以及张量值的显示 应用tf.train.saver实现TensorFlow的模型保存以及加载 应用tf.app.flags实现命令行参数添加和使用 应用TensorFlow实现线性回归
目标
说明图的基本使用
知道图当中op的名字以及命名空间
应用
无
内容预览
2.2.1 什么是图结构
2.2.2 图相关操作
2.2.3 TensorBoard:可视化学习
2.2.4 OP
图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代表的计算单元之间流动的数据。
通常TensorFlow会默认帮我们创建一张图。
查看默认图的两种方法:
```python def graph_demo(): # 图的演示 a_t = tf.constant(10) b_t = tf.constant(20) # 不提倡直接运用这种符号运算符进行计算 # 更常用tensorflow提供的函数进行计算 # c_t = a_t + b_t c_t = tf.add(a_t, b_t) print("tensorflow实现加法运算:\n", c_t)
# 获取默认图 default_g = tf.get_default_graph() print("获取默认图:\n", default_g) # 数据的图属性 print("a_t的graph:\n", a_t.graph) print("b_t的graph:\n", b_t.graph) # 操作的图属性 print("c_t的graph:\n", c_t.graph) # 开启会话 with tf.Session() as sess: sum_t = sess.run(c_t) print("在sess当中的sum_t:\n", sum_t) # 会话的图属性 print("会话的图属性:\n", sess.graph) return None
```
可以通过tf.Graph()自定义创建图
如果要在这张图中创建OP,典型用法是使用tf.Graph.as_default()上下文管理器
```python def graph_demo(): # 图的演示 a_t = tf.constant(10) b_t = tf.constant(20) # 不提倡直接运用这种符号运算符进行计算 # 更常用tensorflow提供的函数进行计算 # c_t = a_t + b_t c_t = tf.add(a_t, b_t) print("tensorflow实现加法运算:\n", c_t)
# 获取默认图 default_g = tf.get_default_graph() print("获取默认图:\n", default_g) # 数据的图属性 print("a_t的graph:\n", a_t.graph) print("b_t的graph:\n", b_t.graph) # 操作的图属性 print("c_t的graph:\n", c_t.graph) # 自定义图 new_g = tf.Graph() print("自定义图:\n", new_g) # 在自定义图中去定义数据和操作 with new_g.as_default(): new_a = tf.constant(30) new_b = tf.constant(40) new_c = tf.add(new_a, new_b) # 数据的图属性 print("new_a的graph:\n", new_a.graph) print("new_b的graph:\n", new_b.graph) # 操作的图属性 print("new_c的graph:\n", new_c.graph) # 开启会话 with tf.Session() as sess: sum_t = sess.run(c_t) print("在sess当中的sum_t:\n", sum_t) # 会话的图属性 print("会话的图属性:\n", sess.graph) # 不同的图之间不能互相访问 # sum_new = sess.run(new_c) # print("在sess当中的sum_new:\n", sum_new) with tf.Session(graph=new_g) as sess2: sum_new = sess2.run(new_c) print("在sess2当中的sum_new:\n", sum_new) print("会话的图属性:\n", sess2.graph) # 很少会同时开启不同的图,一般用默认的图就够了 return None
```
TensorFlow有一个亮点就是,我们能看到自己写的程序的可视化效果,这个功能就是Tensorboard。在这里我们先简单介绍一下其基本功能。
TensorFlow 可用于训练大规模深度神经网络所需的计算,使用该工具涉及的计算往往复杂而深奥。为了更方便 TensorFlow 程序的理解、调试与优化,TensorFlow提供了TensorBoard 可视化工具。
实现程序可视化过程:
TensorBoard 通过读取 TensorFlow 的事件文件来运行,需要将数据生成一个序列化的 Summary protobuf 对象。
```python
tf.summary.FileWriter('./tmp/summary/test/', graph=sess.graph) ```
这将在指定目录中生成一个 event 文件,其名称格式如下:
python events.out.tfevents.{timestamp}.{hostname}
python tensorboard --logdir="./tmp/tensorflow/summary/test/"
在浏览器中打开 TensorBoard 的图页面 [127.0.0.1:6006](
哪些是OP?
|类型|实例| |---|---| |标量运算|add, sub, mul, div, exp, log, greater, less, equal| |向量运算|concat, slice, splot, constant, rank, shape, shuffle| |矩阵运算|matmul, matrixinverse, matrixdateminant| |带状态的运算|Variable, assgin, assginadd| |神经网络组件|softmax, sigmoid, relu,convolution,max_pool| |存储, 恢复|Save, Restroe| |队列及同步运算|Enqueue, Dequeue, MutexAcquire, MutexRelease| |控制流|Merge, Switch, Enter, Leave, NextIteration|
一个操作对象(Operation)是TensorFlow图中的一个节点, 可以接收0个或者多个输入Tensor, 并且可以输出0个或者多个Tensor,Operation对象是通过op构造函数(如tf.matmul())创建的。
例如: c = tf.matmul(a, b) 创建了一个Operation对象,类型为 MatMul类型, 它将张量a, b作为输入,c作为输出,,并且输出数据,打印的时候也是打印的数据。其中tf.matmul()是函数,在执行matmul函数的过程中会通过MatMul类创建一个与之对应的对象
```python
con_a = tf.constant(3.0) con_b = tf.constant(4.0)
sum_c = tf.add(con_a, con_b)
print("打印con_a:\n", con_a) print("打印con_b:\n", con_b) print("打印sum_c:\n", sum_c) ```
打印语句会生成:
python 打印con_a: Tensor("Const:0", shape=(), dtype=float32) 打印con_b: Tensor("Const_1:0", shape=(), dtype=float32) 打印sum_c: Tensor("Add:0", shape=(), dtype=float32)
注意,打印出来的是张量值,可以理解成OP当中包含了这个值。并且每一个OP指令都对应一个唯一的名称,如上面的Const:0,这个在TensorBoard上面也可以显示
请注意,tf.Tensor 对象以输出该张量的 tf.Operation 明确命名。张量名称的形式为 " : ",其中:
tf.Graph对象为其包含的 tf.Operation对象定义的一个命名空间。TensorFlow 会自动为图中的每个指令选择一个唯一名称,用户也可以指定描述性名称,使程序阅读起来更轻松。我们可以以以下方式改写指令名称
例如,tf.constant(42.0, name="answer") 创建了一个名为 "answer" 的新 tf.Operation 并返回一个名为 "answer:0" 的 tf.Tensor。如果默认图已包含名为 "answer" 的指令,则 TensorFlow 会在名称上附加 "1"、"2" 等字符,以便让名称具有唯一性。
python a = tf.constant(3.0, name="a") b = tf.constant(4.0, name="b" )
目标
应用sess.run或者eval运行图程序并获取张量值
应用placeholder实现创建占位符
应用
无
内容预览
2.3.1 会话
一个运行TensorFlow operation的类。会话包含以下两种开启方式
1 TensorFlow 使用 tf.Session 类来表示客户端程序(通常为 Python 程序,但也提供了使用其他语言的类似接口)与 C++ 运行时之间的连接
2 tf.Session 对象使用分布式 TensorFlow 运行时提供对本地计算机中的设备和远程设备的访问权限。
会话可能拥有的资源,如 tf.Variable,tf.QueueBase和tf.ReaderBase。当这些资源不再需要时,释放这些资源非常重要。因此,需要调用tf.Session.close会话中的方法,或将会话用作上下文管理器。以下两个例子作用是一样的:
```python def session_demo(): """ 会话演示 :return: """
a_t = tf.constant(10) b_t = tf.constant(20) # 不提倡直接运用这种符号运算符进行计算 # 更常用tensorflow提供的函数进行计算 # c_t = a_t + b_t c_t = tf.add(a_t, b_t) print("tensorflow实现加法运算:\n", c_t) # 开启会话 # 传统的会话定义 # sess = tf.Session() # sum_t = sess.run(c_t) # print("sum_t:\n", sum_t) # sess.close() # 开启会话 with tf.Session() as sess: # sum_t = sess.run(c_t) # 想同时执行多个tensor print(sess.run([a_t, b_t, c_t])) # 方便获取张量值的方法 # print("在sess当中的sum_t:\n", c_t.eval()) # 会话的图属性 print("会话的图属性:\n", sess.graph) return None
```
```python
sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)) ```
会话可以分配不同的资源在不同的设备上运行。
python /job:worker/replica:0/task:0/device:CPU:0
device_type:类型设备(例如CPU,GPU,TPU)
feed_dict:参数允许调用者覆盖图中张量的值,运行时赋值
使用tf.operation.eval()也可运行operation,但需要在会话中运行
```python
a = tf.constant(5.0) b = tf.constant(6.0) c = a * b
sess = tf.Session()
print(sess.run(c)) print(c.eval(session=sess)) ```
python def session_run_demo(): """ 会话的run方法 :return: """ # 定义占位符 a = tf.placeholder(tf.float32) b = tf.placeholder(tf.float32) sum_ab = tf.add(a, b) print("sum_ab:\n", sum_ab) # 开启会话 with tf.Session() as sess: print("占位符的结果:\n", sess.run(sum_ab, feed_dict={a: 3.0, b: 4.0})) return None
请注意运行时候报的错误error:
python RuntimeError:如果这Session是无效状态(例如已关闭)。 TypeError:如果fetches或者feed_dict键的类型不合适。 ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在的键。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。