Keras-2-深度学习基础

news/2025/2/27 23:22:36/

说明:

1. Keras学习记录的参考书是:《Python深度学习》;
2. 本篇记录的是第一部分(1-2章)的知识点汇总,详情见书;

1. 深度学习之前的机器学习:

1.1 概率建模:基于统计学原理构建的机器学习模型 (比如:朴素贝叶斯算法、logistic回归);
1.2 早期神经网络:比如 LeNet (将神经网络的早期思想与反向传播算法相结合,应用于手写数字的分类问题);
1.3 核方法 (kernel method):它是一组分类算法,其中最有名的支持向量机 (SVM)。SVM的目标是通过在属于两个不同类别的两组数据点之间找到良好的决策边界 (可以看作是一条直线或一个平面,将训练数据划分为两块空间);核函数的作用就是在数据映射到高维空间后,计算高维空间中点对之间的距离 (将原始空间中的任意两点映射为这两点在高维空间中的距离)。核函数是一种计算距离的方法,是认为选择的;决策边界则是通过学习得到的。
1.4 决策树、随机森林、梯度提升机:随机森林是通过构建多个决策树,之后将这些决策树的输出整合到一起。**梯度提升机 (比如 XGBoost库)**也是将弱预测模型 (比如 决策树等) 进行整合的机器学习方法,它使用了梯度提升的方法,通过迭代训练新模型来专门解决之前模型的弱点。

2. 什么是深度学习:

  1. 机器学习是将输入映射到目标的过程,这个过程是通过观察许多输入和目标的示例实现的;
  2. 深度学习则通过一系列简单的数据变换 (层) 实现上述的输入到目标的映射 (深度学习神经网络的每一层对数输入数据的具体操作保存在该层的权重 weight中);
  3. 深度学习是机器学习的一个分支,用于从数据中学习表示,强调从连续的层 (layer) 中进行学习;
  4. 深度指的是模型中所包含的层,学习的意思指的是为神经网络的所有层找到一组权重值,使网络能够将每个输入与目标正确地对应;
  5. 可以将深度学习网络看成多级的信息蒸馏操作,信息通过连续的过滤器进行过滤,使得信息“纯度”越来越高,更有助于最终的任务;
  6. 损失函数 loss function(也称 目标函数 objective function) 通过神经网络的预测值与真实目标值之间的距离来衡量该模型在该示例上的效果好坏;
  7. 深度学习就是利用损失函数得到的距离值作为反馈信号对权重值进行微调,从而降低当前示例对应的损失值。这个过程由优化器 (optimizer)完成,它实现了反向传播算法 (backpropagation)

3. 深度学习与机器学习的区别:

深度学习将机器学习中的特征工程步骤实现了自动化,就是说深度学习可以一次性学习所有特征,不需要手动设计;
深度学习从数据中进行学习时有两个基本特征:1. 通过渐进的、逐层的方式形成越来越复杂的表示;2. 对中间这些渐进的表示共同进行学习,每一层的变化都要同时考虑到上下两层的需要;

4. 深度学习的数学基础:

4.1 基本概念:

1. 张量 (tensor):

张量是一个存储数值数据的容器,是矩阵向任意维度的推广【张量的维度(dimension)通常称为轴(axis)】。

2. 标量 (scalar):

也称为 标量张量、零维张量、0D张量【在 Numpy 中可以用 ndim 属性查看 Numpy 张量的维数】。

import numpy as npx1 = np.array(10)
print(x1.ndim)
## 0

3. 向量 (vector):

也称 一维张量(1D张量),只有一个 axis。

import numpy as npx1 = np.array([1,2,3])
print(x1.ndim)
## 1

4. 矩阵 (matrix):

也称 二维张量(2D张量),有两个axis(通常称为 行 和 列)。

import numpy as npx1 = np.array([[1,2,3],[4,5,6]])
print(x1.ndim)
## 2

5. 高维张量:

将多个2D张量组合成一个数组,即3D张量;同理,将多个3D张量组合成一个数组,即4D张量。
深度学习一般处理的是 0-4D 的张量,处理视频数据时可能会遇到 5D 张量。

import numpy as npx1 = np.array([[[1,2,3],[4,5,6],[7,8,9]]])
print(x1.ndim)
## 3

6. 张量维数的确定:

轴的个数称为阶,比如 3D 张量有 3 个轴,所以也称为 3 阶张量。
张量的数据类型指的是张量中所存储的数据的类型,大部分是数值型(比如 float32、uint8、float64等)。

  1. 利用 Numpy 对象的 ndim属性:
import numpy as npx1 = np.array([[[1,2,3],[4,5,6],[7,8,9]]])
print(x1.ndim)  ## 3
  1. 利用 shape 属性查看张量的形状,有几个数字就是几维:
import numpy as npx1 = np.array([[[1,2,3],[4,5,6],[7,8,9]]])
print(x1.shape)  ## (1,3,3) 一共有三个维度
  1. 直接数构成张量的 [ 的数目:
import numpy as npx1 = np.array([[[1,2,3],[4,5,6],[7,8,9]]])
print(x1) ## 结果:
[[[1 2 3][4 5 6][7 8 9]]]## 一共有 3 个 "[",所以x1的维数是三维

7. 数据批量 (batchsize):

通常而言,深度学习中所有数据的第0轴是样本轴,也称为批量轴
我的理解就是第0轴是样本的数目。
通常深度学习模型不会一次性处理整个数据集,而是将数据拆分成小批量(就是按照样本轴将数据集划分为多份)。

8. 广播 (broadcast):

当两个不同形状的张量(比如一个2D张量和一个向量)相加时,较小的那个张量会被广播,从而使二者形状一致。
具体过程分为两步:
1). 向较小的张量添加轴(广播轴),使其 ndim 与较大的张量相同;
2). 将较小的张量沿着新轴重复,使其形状与较大的张量相同;

9. 张量变形 (tensor reshaping):

改变张量的行和列,得到想要的形状。变形后的张量中元素的总个数和变形前的相同。

import numpy as npx1 = np.array([[1,2,3],[4,5,6]])
print(x1)x2 = x1.reshape(6,1)
print(x2)
x1 = 
[[1 2 3][4 5 6]]x2 = 
[[1][2][3][4][5][6]] 

10. 转置 (transposition):

将矩阵的行列进行互换。

import numpy as npx1 = np.array([[1,2,3],[4,5,6]])
print(x1)x2 = x1.T
print(x2)
x1 = 
[[1 2 3][4 5 6]]x2 = 
[[1 4][2 5][3 6]]
  1. 张量切片 (tensor slicing):

选择张量中特定元素的操作。

"""在所有图像的右下角选出 14像素 x 14像素 的区域"""
target_region = train_image[:, 14:, 14:]

11. 可微和梯度:

可微:可以被求导;
梯度:张量运算的导数,假设输入数据x和y不变,那么损失函数就可以看作是权重W与损失值之间的映射关系,那么梯度就是该损失函数在W0时的导数。

12. 基于梯度下降调节参数的过程可分为5步 (以mini-batch SGD为例):

1. 抽取训练样本 x 和对应的目标 y,组成数据批量;
2. 在 x 上训练网络 [一次前向传播 (forward pass)],得到预测的 y_pred;
3. 计算网络在这批数据上的损失,衡量 y_pred和 y之间的距离;
4. 计算损失相对于网络参数的梯度 [一次反向传播 (backward pass)];
5. 将参数沿梯度的反方向移动一点 (step),从而减少这批数据的损失;

13. 优化器:

SGD还存在多种变体,区别在于计算下一次权重更新时既考虑当前梯度值,也考虑上一次权重更新,比如 带动量的SGD, Adagrad, RMSProp等。这些变体被称为优化器 (optomizer)。

14. 链式求导:反向传播算法

链式法则 (chain rule):(f(g(x)))' = f'(g(x)) * g'(x)

将链式法则用于计算神经网络的梯度值,得到的算法即反向传播 (backpropagation)。反向传播从嘴中损失值开始,从最顶层反向作用至最低层,利用链式法则计算每个参数对于损失值的贡献大小。

4.2 举例:

  1. 向量数据:2D张量,shape = (samples, features)
  2. 时间序列数据或序列数据:3D张量,shape = (samples, timesteps, features)
  3. 图像:4D张量,shape = (samples, height, width, channels) 或者 shape = (samples, channels, height, width)
  4. 视频:5D张量,shape = (samples, frames, height, width, channels) 或者 shape = (samples, frames, channels, height, width)

http://www.ppmy.cn/news/230356.html

相关文章

日撸java三百行day58-59

文章目录 说明Day58 符号型数据的 NB 算法1.基础理论知识1.1 条件概率1.2 独立性假设1.3 Laplacian 平滑 2. 符号型数据的预测算法跟踪2.1 testNominal()方法2.1.1 NaiveBayes 构造函数2.1.2 calculateClassDistribution()2.1.3 calculateConditionalProbabilities()方法2.1.4 …

移动工作站 linux,戴尔推出三款 Precision 移动工作站产品 采用 Ubuntu Linux 操作系统...

戴尔今天宣布推出三款 Precision 移动工作站开发版笔记本电脑,它们采用 Ubuntu Linux 操作系统,具体型号是 Dell Precision 5540、Dell Precision 7540 和 Dell Precision 7740。Dell Precision 5540 是其中最便宜的型号,但功能强大&#xff…

Python 迁移学习实用指南:1~5

原文:Hands-On Transfer Learning with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如…

英汉词典开发文件

a Trans:art. 一;字母A a.m. Trans:n. 上午 a/c Trans:n. 往来帐户往来:come - and - go; contact; intercoursen. 往来帐户 aardvark Trans:n. 土猪 aardwolf Trans:n. 土狼 aasvogel Trans:n. 秃鹰之一种 abaci Trans:n. 算盘 aback Trans:ad. 向后地;朝后地 …

前端知识体系

资源教程: 1.综合类 前端知识体系前端知识结构Web前端开发大系概览Web前端开发大系概览-中文版Web Front-end Stack v2.2免费的编程中文书籍索引前端书籍前端免费书籍大全智能社 - 精通JavaScript开发重新介绍 JavaScript(JS 教程)麻省理工学院公开课&…

关于利用计算机,关于计算机应用基础试题

关于计算机应用基础试题 关于计算机应用基础试题有哪些呢?我们不妨一起来参考下范文吧!希望对您有所帮助!以下是小编为您搜集整理提供到的计算机应用基础试题内容,希望对您有所帮助!欢迎阅读参考学习! 计算…

Godot官网新闻翻译 - 2016年

2016 Godot 2.0现在是测试版! 作者: 胡安利涅茨基 26 一月 2016 经过很长很长一段时间的开发,Godot 2.0现在处于测试阶段! Godot 2.0 Beta具有新的界面,并有大量的可用性改进。它也比以往任何时候都更稳定&#xff0…

CPU 的工作原理以及为什么Apple Silicon M1 比 Intel i9 快?

计算机是一种可以通过编程自动执行算术或逻辑运算序列的机器。CPU 或中央处理单元是计算机中最重要的部分。所以在这篇文章中我将讨论 CPU 是如何工作的,稍后我将讨论为什么 Apple Silicon Chip 比 Intel i9 更快。在我们深入研究之前,您应该了解基本的计…