-
1.1 深度学习与机器学习区别
-
1.2深度学习应用领域
-
1.3深度学习学习框架
-
1.4TensorFlow结构
1.4.1案例:TensorFlow实现一个加法运算
1.4.2TensorFlow结构分析
1.4.3图
1.4.4TensorBoard:可视化学习
1.4.5 op
1.4.6 会话
机器学习:中间需要做很多过程
深度学习:不需要再做过多的特征处理
特征提取方面:
机器学习:需要手动完成,需要大量专业知识
深度学习:不需要人工设计特征提取环节
数据量:
机器学习:时间少
深度学习:时间长,数量多,需要网络参数
算法代表:
机器学习:朴素贝叶斯、决策树等
深度学习:神经网络;
1.2深度学习应用领域
图相识别:物体识别,场景识别,车型识别,人脸检测跟踪,人脸关键点定位,人脸身份认证
自然语言处理技术
1.3深度学习学习框架
TensorFlow框架
使用tf.keras构建、训练和验证您的模型,tf相关API用于损失计算修改等
tensorflow提供模型训练模型部署
TensorFlow优点:
语言多样(Language Options)
TensorFlow使用C++实现的,然后用Python封装。
谷歌号召社区通过SWIG开发更多的语言接口来
支持TensorFlow
使用分发策略进行分发训练。
对于大型ML训练任务,分发策略API使在不更改模型定义的情况下,可以轻松地在不同的硬件配置上分发和训练模型。
由于TensorFlow支持一系列硬件加速,如 CPU、GPU和TPU
Tenisorboard可视化
TensorBoard是TensorFlow的一组Web应用,用来监控TensorFlow运行过程
TensorFlow的安装
终端->pip list->如图所示:
1.4TensorFlow结构
1.4.1案例:TensorFlow实现一个加法运算
# --coding:utf-8--
import os
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
a = tf.constant(10.0)
b = tf.constant(20.0)
c = tf.add(a, b)
#指定一个会话进行TensorFlow程序
with tf.compat.v1.Session() as sess:
print(sess.run(c))
出现bug
①Could not load dynamic library ‘cusolver64_11.dll‘; dlerror: cusolver64_11.dll not found ~内有安装包+方法
②Could not load dynamic library cublas64_10.dll ~ 内有安装包~
③module ‘tensorflow’ has no attribute 'Session’的解决办法
④This TensorFlow binary is optimized with oneAPI Deep Neural Network Library…
⑤Ignore above cudart dlerror if you do not have a GPU set up on your machine.
TensorFlow程序通常被组织成一个构建图阶段和一个执行图阶段。
在构建阶段,数据与 *** 作的执行步骤被描述成一个图。
在执行阶段,使用会话执行构建好的图中的 *** 作。
图和会话∶
图:这是TensorFlow将计算表示为指令之间的依赖关系的一种表示法。
会话:TensorFlow跨一个或多个本地或远程设备运行数据流图的机制
张量: TensorFlow中的基本数据对象
节点: 提供图当中执行的 *** 作
1.4.3图
什么是图结构?
图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代表的计算单元之间流动的数据。
默认图
通常TensorFlow会默认帮我们创建—张图。
查看默认图的两种方法:
·
- 通过调用tf.get_default_graph(访问,要将 *** 作添加到默认图形中,直接创建OP即可。
-p.tensor.session :所在的都是默认的这个程序的图
获取tf程序的默认图:
g = tf.compat.v1.get_default_graph()
可以在一个程序里创建两个不一样的graph
但是有一点:
# 开启新的会话
with tf.compat.v1.Session()as sess:
newc_res = sess.run(new_c)
print(newc_res)
= =》 会话只运行默认的一张图 ,如果想要运行多张图,就必须开启多个会话开始
with tf.compat.v1.Session(graph = new_g)as sess:
=== 》结论: 一个会话只能运行一张图
很少会同时开启不同的图,一般用默认的图就够了
修改:
with tf.compat.v1.Session(graph = new_g)as sess:
newc_res = sess.run(new_c)
print(newc_res)
1.4.4 TensorBoard:可视化学习
1. 数据序列化-evehts文件
TensorBoard通过读取TensorFlow的事件文件来运行,需要将数据生成一个序列化的Summary protobut对象。
#返回filewriter,写入事件文件到脂定日录(最好用绝对路径),以据供给tensorboard使用
tf.sunnary.FileMriter(' ./tmp/sumnary/test/ ' , graph=sess.graph) #指出路径 要写入的图
这将在指定目录中生成一个event文件,其名称格式如下:
events.out-tfewents.{timestamp}{.ihostname} # timestamp 时间戳 #hostname 主机名
2 启动TensorBoard
tensorboard --logdir=“” , /tmp/tensorflows/ summary/test/“”
在浏览器中打开TensorBoard的图页面127.0.0.1:6006,会看到与以下图形类似的图,在GRAPHS模块我们可以看到以下图结构
常见op
一个 *** 作对象(Operation)是TensorFlow图中的一个节点,可以接收0个或者多个输入Tensor, 并且可以输出0个或者多个Tensor,(operation是 *** 作 tensor就是里面的数值)Operation对象是通过op构造函数(如tf.matmul0))创建的。
例如:
c = tf.matmul(a, b)创建了一个Operation对象
,类型为MatMul类型,
它将张量a, b作为输入,c作为输出,,
并且输出数据,打印的时候也是打印的数据。
其中tf.matmul)是函数,在执行matmul函数的过程中会通过MatMul类创建一个与之对应的对象
注意:
打印出来的是张量值,可以理解成OP当中包含了这个值。
并且每一个oP指令都对应一个唯一的名称,如上面的Const:0,这个在TensorBoard上面也可以显示
请注意
tf.Tensor对象以输出该张量的tf.Operation明确命名。
张量名称的形式为":",其中:
- "
”是生成该张量的指令的名称 - "”是一个整数,它表示该张量在指令的输出中的索引,都是0
指令名称
-
tf.Graph对象为其包含的tf.Operation对象定义的一个命名空间。
-
TensorFlow 会自动为图中的每个指令选择一个唯一名称,用户也可以指定描述性名称,使程序阅读起来更轻松。
-
我们可以以以下方式改写指令名称·
每个创建新的 tf.Operation或 返回新的tf.Tensor的API函数可以接受可选的name 参数。
例如,
tf.constant(42.0, name="answer")
创建了一个名为"answer”的新tf.Operation并返回一个名为"answer:O”的 tf.Tensor。
如果默认图已包含名为"answer"的指令,则TensorFlow会在名称上附加"1 "、“2”等字符,以便让名称具有唯一性。
·当修改好之后,我们在Tensorboard显示的名字也会被修改
一个运行TensorFlow operation的类。
会话包含以下两种开启方式
-
tf.Session:用于完整的程序当中
-
tf.InteractiveSession:用于交互式上下文中的TensorFlow ,例如shell
1 TensorFlow使用tf.Session类来表示客户端程序(通常为Python程序,但也提供了使用其他语言类似接口)与C++运行时之间的连接 2 tf.Session对象使用分布式 TensorFlow运行时提供对本地计算机中的设备和远程设备的访问权限。
例子 : tf.Session.close会话中的方法
原来:
现在:
tf.Session:用于完整的程序当中
-
__ init__(target=", graph=None,conig=None)
target:如果将此参数留空(默认设置),会话将仅使用本地计算机中的设备。
可以指定 grpc:/l网圩以便指定TensorFlow服务器的地址,这使得会话可以访问该服务器控制的计算机上的所有设备。
graph:默认情况下,新的tf.Session将绑定到当前的默认图。
config:此参数允许您指定一个tf.ConfigProto 以便***控制会话***的行为。
例如,ConfigProto协议用于打印设备使用信息
#运行会话并打印设备信息
sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
log_device_placement=True ) )
# --coding:utf-8--
import os
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
#实现一个加法 *** 作
con_a = tf.constant(28.0)
con_b = tf.constant(9.0)
sum_c =tf.add(con_a, con_b)
with tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(allow_soft_placement=True,
log_device_placement=True) ) as sess:
print(sess.graph)
c_res = sess.run(sum_c)
print(c_res)
- 会话的run0
run(fetches,feed_dict=None, options=None, run_metadata=None)。
通过使用sess.run0来运行operation
fetches:单一的operation,或者列表、元组(其它不属于tensorflow的类型不行)
feed_dict:参数允许调用者覆盖图中张量的值,运行时赋值
与tf.placeholder搭配使用,则会检查值的形状是否与占位符兼容。
使用tf.operation.eval()也可运行operation,但需要在会话中运行
应用sess.run或者eval运行图程序并获取张量值
应用feed_dict机制实现运行时填充数据
应用placeholder实现创建占位符
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)