Python深度学习与机器视觉(一)

Python深度学习与机器视觉(一),第1张

  • 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.1 深度学习与机器学习区别

机器学习:中间需要做很多过程
深度学习:不需要再做过多的特征处理

特征提取方面:

机器学习:需要手动完成,需要大量专业知识
深度学习:不需要人工设计特征提取环节

数据量:

机器学习:时间少
深度学习:时间长,数量多,需要网络参数

算法代表:

机器学习:朴素贝叶斯、决策树等
深度学习:神经网络;
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.

1.4.2 TensorFlow结构分析

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模块我们可以看到以下图结构

1.4.5 op

常见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

    指令名称
  1. tf.Graph对象为其包含的tf.Operation对象定义的一个命名空间。


  2. TensorFlow 会自动为图中的每个指令选择一个唯一名称,用户也可以指定描述性名称,使程序阅读起来更轻松。


  3. 我们可以以以下方式改写指令名称·

     每个创建新的 tf.Operation或
            返回新的tf.Tensor的API函数可以接受可选的name 参数。


例如,

tf.constant(42.0, name="answer")创建了一个名为"answer”的新tf.Operation并返回一个名为"answer:O”的 tf.Tensor。



如果默认图已包含名为"answer"的指令,则TensorFlow会在名称上附加"1 "、“2”等字符,以便让名称具有唯一性。



·当修改好之后,我们在Tensorboard显示的名字也会被修改

1.4.6 会话

一个运行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实现创建占位符

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/577988.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)