1.1.1特征提取方面
机器学习的特征工程步骤是要靠手动完成的,而且需要大量领域专业知识
深度学习通常由多个层组成,它们通常将更简单的模型组合在一起,将数据从一层传递到另一层来构建更复杂的模型。通过训练大量数据自动得出模型,不需要人工特征提取环节。
深度学习算法试图从数据中学习高级功能,这是深度学习的一个非常独特的部分。因此,减少了为每个问题开发新特征提取器的任务。
适合用在难提取特征的图像、语音、自然语言处理领域。
1.1.2 数据量和计算性能要求
机器学习需要的执行时间远少于深度学习,深度学习参数往往很庞大,需要通过大量数据的多次优化来训练参数。
第一、深度学习需要大量的训练数据集
第二、训练深度神经网络需要大量的算力
可能要花费数天、甚至数周的时间,才能使用数百万张图像的数据集训练出一个深度网络。所以深度学习通常
需要强大的GPU服务器来进行计算
全面管理的分布式训练与预测服务――比如谷歌TensorFlow云机器学习平台
1.1.3 算法代表
机器学习
朴素贝叶斯
决策树等
深度学习
神经网络
Tensorflow结构分析
TensorFlow程序通常被组织成一个构建图阶段和一个执行图阶段。
在构建阶段,数据与操作的执行步骤被描述成一个图。
在执行阶段,使用会话执行构建好的图中的操作。
图和会话︰
图:这是TensorFlow将计算表示为指令之间的依赖关系的一种表示法。
会话: TensorFlow跨一个或多个本地或远程设备运行数据流图的机制
张量:TensorFlow中的基本数据对象
节点:提供图当中执行的操作
import tensorflow.compat.v1 as tf #2.0版本不兼容
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
tf.compat.v1.disable_eager_execution() #2.0版本不兼容
def tensorflow_demo():
"""
TensorFlow的基本结构
:return:
"""
# 原生python加法运算
a = 2
b = 3
c = a + b
print("普通加法运算的结果:\n", c)
# TensorFlow实现加法运算,构建阶段,数据和操作的执行步骤被描述成一个图
a_t = tf.constant(2)
b_t = tf.constant(3)
c_t = a_t + b_t
print("TensorFlow加法运算的结果:\n", c_t)
# 开启会话,在执行阶段,使用会话执行构建好的图中的操作。
with tf.Session() as sess:
c_t_value = sess.run(c_t)
print("c_t_value:\n", c_t_value)
return None
if __name__ == "__main__":
tensorflow_demo()
TensorFlow: Tensor - 张量 - 数据 Flow - 流动
TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源框架。 节点(Operation)在图中表示数学操作,线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor) 。
2.2.1 什么是图结构
图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代赛的计算单元之间流动的数据。
图结构:数据(Tensor) + 操作(Operation)
2.2.2 图相关操作
1 默认图
通常TensorFlow会默认帮我们创建一张图。
查看默认图的两种方法:
①通过调用tf.get_default_graph()访问,要将操作添加到默认图形中,直接创建OP即可。
②op、sess都含有graph属性,默认都在一张图中
上面我们的代码有了一个加法运算,明明已经有了数据和对应的操作,但是图在哪里呢?
代码
def graph_demo():
"""
图的演示
:return:
"""
# TensorFlow实现加法运算
a_t = tf.constant(2, name="a_t")
b_t = tf.constant(3, name="a_t")
c_t = tf.add(a_t, b_t, name="c_t")
# 方法1: 调用方法
default_g = tf.get_default_graph()
print(default_g)
# 方法2 : 查看属性
print('a_t的图属性:\n', a_t.graph)
print('b_t的图属性:\n', b_t.graph)
print('c_t的图属性:\n', c_t.graph)
with tf.Session() as sess:
c_t_value = sess.run(c_t)
print('c_t_value\n', c_t_value)
print('sess的图属性:\n', sess.graph)
graph_demo()
2 创建图
可以通过tf.Graph()自定义创建图
如果要在这张图中创建OP,典型用法是使用tf.Graph.as_default()上下文管理器
代码
def graph_demo():
"""
图的演示
:return:
"""
# TensorFlow实现加法运算
a_t = tf.constant(2, name="a_t")
b_t = tf.constant(3, name="b_t")
c_t = tf.add(a_t, b_t, name="c_t")
# 方法1: 调用方法
default_g = tf.get_default_graph()
print(default_g)
# 方法2 : 查看属性
print('a_t的图属性:\n', a_t.graph)
print('b_t的图属性:\n', b_t.graph)
print('c_t的图属性:\n', c_t.graph)
with tf.Session() as sess:
c_t_value = sess.run(c_t)
print('c_t_value:\n', c_t_value)
print('sess的图属性:\n', sess.graph)
new_g = tf.Graph()
# 在自几的途中定义数据和操作
with new_g.as_default():
a_new = tf.constant(20)
b_new = tf.constant(30)
c_new = tf.add(a_new,b_new)
print("c_new:\n",c_new,c_new.graph)
graph_demo()
2.2.3 可视化
实现程序可视化过程
1、 把图写入本地生成events 文件
tf.summary.FileWriter("./tmp/summary", graph=sess.graph)
2、这将在指定目录中生成一个event文件
3、到文件目录,终端输入tensorboard --logdir=“tmp/summary” (也可以自己修改端口号)
4、在浏览器中打开TensorBoard的图页面127.0.0.1:6006
2.2.4op(operation对象)
类型 | 实例 |
---|---|
标量运算 | 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,Nextlteration |
操作函数和操作对象:
eg
操作函数:tf.constant(Tensor对象)
操作对象:const
例如: **c = tf.matmul(a, b)**创建了一个Operation对象,类型为 MatMul类型,它将张量a, b作为输入,c作为输出,并且输出数据,打印的时候也是打印的数据。其中tf.matmul)是函数,在执行matmul函数的过程中会通过MatMul类创建一个与之对应的对象
所以在上面的加法运算中,打印的是张量值,可以理解成op中包含了这个值,并且每一个op指令都对应一个唯一的名称
2指令名称
一张图 —— 一个命名空间
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显示的名字也会被修改
a = tf.constant(1)
b = tf.constant(2, name='b')
print('a=', a)
print('b=', b)
a= Tensor("Const:0", shape=(), dtype=int32) # 这个我们没有指定指令名称,他是通过contant函数创建的,就叫const:0
b= Tensor("b:0", shape=(), dtype=int32) # 这个叫b:0