深度学习与机器学习的区别
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
1.1 深度学习与机器学习的区别
1.1.1.1 特征提取方面
-
机器学习
- 要靠手动完成的而且需要大量领域专业知识
-
深度学习不需要人工设计特征提取环节
-
数据量
第一、它们需要大量的训练数据集
第二、是训练深度神经网络需要大量的算力
1.1.2 算法代表
- 机器学习
- 朴素贝叶斯、决策树等
- 深度学习
- 神经网络
图像识别
自然语言处理技术
1.2 深度学习框架介绍
1.2.2 TensorFlow的特点
1.2.3 TensorFlow的安装
- ubuntu安装
pip install tensorflow==1.12 -i https://mirrors.aliyun.com/pypi/simple
- MacOS安装
pip install tensorflow==1.12 -i https://mirrors.aliyun.com/pypi/simple
tf.keras 构建、训练和验证您的模型
tf相关API用于损失计算修改,tensorflow提供模型训练模型部署
tensorflow + tf.keras , pytorch
2.1 TF数据流图
2.1.1.2 TensorFlow结构分析
一个构建图阶段和一个执行图阶段。
-
构件图数据与操作的执行步骤被描述成一个图
-
执行图使用会话执行构建好的图中的操作
-
图和会话
- 图这是 TensorFlow 将计算表示为指令之间的依赖关系的一种表示法
- 会话TensorFlow 跨一个或多个本地或远程设备运行数据流图的机制
-
张量TensorFlow 中的基本数据对象
-
节点提供图当中执行的操作
-
2.1.2 数据流图介绍
-
图(graph)与会话(session) 节点(operation)和张量(Tensor)
2.2 图与TensorBoard
- 图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代表的计算单元之间流动的数据。
2.2.2 图相关操作
- 获取tf程序的默认图tf.get_default_graph()
- op, tensor, session所在的都是默认的这个程序的图
2 创建图
-
tf.graph
-
会话只运行默认那张图如果有多个图需要多个会话开启
-
with tf.Session(graph=new_g)
2.2.3 TensorBoard:可视化学习
为了更方便 TensorFlow 程序的理解、调试与优化
-
1 数据序列化-events文件
-
2启动TensorBoard
2.2.4 OP
一个操作对象Operation是TensorFlow图中的一个节点,接收0个或者多个输入Tensor, 并且可以输出0个或者多个Tensor
-
打印出来的是张量值可以理解成OP当中包含了这个值
-
“Const_1:0”
- “<OP_NAME>” 是生成该张量的指令的名称
- “” 是一个整数它表示该张量在指令的输出中的索引,都是0
-
怎么修改op的名称
- name参数
- tf.constant(42.0, name=“answer”)
2.3 会话
2.3.1 会话
-
tf.Session用于完整的程序当中
-
config此参数允许您指定一个 tf.ConfigProto 以便控制会话的行为。例如ConfigProto协议用于打印设备使用信息
-
/job:worker/replica:0/task:0/device:CPU:0
-
-
2.3.1.2 会话的run()
- placeholder:在运行时候填充数据通过feed_dict
- 用处图定义好数据没有固定在运行时每次填充然后计算
- tf.InteractiveSession用于交互式上下文中的TensorFlow 例如shell
- eval()直接运行结果
2.4 张量
2.4.1 张量(Tensor)
TensorFlow 的张量就是一个 n 维数组 类型为tf.Tensor
2.4.2 创建张量的指令
2.4.3 张量的变换
-
类型变换
- tf.cast()
-
形状变换图像识别检测
- 静态形状
- 转换静态形状的时候1-D到1-D2-D到2-D不能跨阶数改变形状
- 对于已经固定的张量的静态形状的张量不能再次设置静态形状
- 动态形状
- tf.reshape()动态创建新张量时张量的元素个数必须匹配
- 静态形状
-
2.4.4 张量的数学运算
-
2.5 变量OP
-
存储持久化
-
可修改值
-
可指定被训练
-
特点手动初始化
- init_op = tf.global_variables_initializer()
-
2.5.2 使用tf.variable_scope()修改变量的命名空间
2.7 案例实现线性回归
2.7.1 线性回归原理复习
- 样本特征值目标值
- 随机生成100个点特征只有1个
- y = 0.8 * x + 0.7目标值100 1
- w, b x [w] + [b] = y_predict
- 1 准备好数据集y = 0.8x + 0.7 100个样本
- x, y
- 2 建立线性模型
- 随机初始化W1和b1
- y = W·X + b目标求出权重W和偏置b
- tf.Variable()权重和偏置需要被训练
- 3 确定损失函数预测值与真实值之间的误差-均方误差
- tf.square(), tf.reduce_mean()
- 4 梯度下降优化损失需要指定学习率超参数
- tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
- tf.Variable(initial_value=tf.random_normal([1, 1]), trainable=False)
- 迁移学习指定某些网络结构不被训练
2.7.3 增加其他功能
-
增加命名空间
- tf.variable_scope(“original_data”):
- 添加损失权重偏置的训练观察tensorfboard
- tf.summary.scalar(“error”, error)
- 收集零维度的值
- tf.summary.histogram(“weights”, weights)
- 收集高纬度的张量值结果
- summary = sess.run(merge)
- filewriter.add_summary(summary, i)
-
命令行参数设置
-
tf.app.flags.DEFINE_integer(“max_step”, 1000, “train step number”)
FLAGS = tf.app.flags.FLAGS
-
-
模型的保存与加载
- tf.train.Saver
- tf.train.latest_checkpoint(“./tmp/model/”)
- saver.save(sess, ‘/tmp/ckpt/test/myregression.ckpt’)
- saver.restore(sess, ‘/tmp/ckpt/test/myregression.ckpt’)
1.2 神经网络基础
1.2.1 Logistic回归
1.2.1.2 逻辑回归损失函数
- linear:均方误差
1.2.3 导数
1.2.3.1 导数
导数也可以理解成某一点处的斜率
- f(a) = 4a 斜率可以理解为当一个点偏移一个不可估量的小的值所增加的为4倍。
- f(a)=a^2 导数为2a
1.2.3.2 导数计算图
1.2.3.3 链式法则
1.2.3.4 逻辑回归的梯度下降
计算损失函数的某个点相对于w_1,w_2,bw1,w2,b的导数之后就可以更新这次优化后的结果
- w1, w2, b: 10 20 5—> dw1:2, dw2: 1, db: 3
- w1- (0.001)*(2)
- w2-(0.001)*(1)
- b - (0.001)*(3)
- w1’, w2’,b
1.2.4 向量化编程
每更新一次梯度时候在训练期间我们会拥有m个样本那么这样每个样本提供进去都可以做一个梯度下降计算。所以我们要去做在所有样本上的计算结果、梯度等操作
- 1000个样本都计算一次梯度得到1000个梯度
- 求出平均梯度
- 两步合而为1
1.2.4.2 向量化实现伪代码-逻辑回归的梯度下降实现
1.2.5 案例实现逻辑回归
def propagate(w, b, X, Y):
"""
参数w,b,X,Y网络参数和数据
Return:
损失cost、参数W的梯度dw、参数b的梯度db
"""
m = X.shape[1]
# 从前往后计算损失前向传播
A = basic_sigmoid(np.dot(w.T, X) + b)
# 计算损失
cost = -1 / m * np.sum(Y * np.log(A) + (1 - Y) * np.log(1 - A))
# 从后往前求出梯度反向传播
dZ = A - Y
dw = 1 / m * np.dot(X, dZ.T)
db = 1 / m * np.sum(dZ)
grads = {"dw": dw, "db": db}
return grads, cost