paddle2.0高层API快速实现LeNet(MNIST手写数字识别)
[toc]
『深度学习 7 日打卡营·快速入门特辑』
零基础解锁深度学习神器飞桨框架高层 API,七天时间助你掌握 CV、NLP 领域最火模型及应用。
课程地址
传送门:https://aistudio.baidu.com/aistudio/course/introduce/6771
目标
掌握深度学习常用模型基础知识
熟练掌握一种国产开源深度学习框架
具备独立完成相关深度学习任务的能力
能用所学为 AI 加一份年味
DL 万能公式
12345import paddleimport numpy as npimport matplotlib.pyplot as pltpaddle.__version__
1'2.0.0'
数据加载和预处理
12345678910111213import paddle.vision.transforms as T# 数据加载和预处理# [0-255] -> [0-1]transform = T.Normalize(mean=[127.5], std=[127.5])# 训练数据集train_dataset = pad ...
MobileNet v1/v2
[toc]
卷积神经网络(CNN)已经普遍应用在计算机视觉领域,并且已经取得了不错的效果。图 1 为近几年来 CNN 在 ImageNet 竞赛的表现,可以看到为了追求分类准确度,模型深度越来越深,模型复杂度也越来越高,如深度残差网络(ResNet)其层数已经多达 152 层。
然而,在某些真实的应用场景如移动或者嵌入式设备,如此大而复杂的模型是难以被应用的。首先是模型过于庞大,面临着内存不足的问题,其次这些场景要求低延迟,或者说响应速度要快,想象一下自动驾驶汽车的行人检测系统如果速度很慢会发生什么可怕的事情。所以,研究小而高效的 CNN 模型在这些场景至关重要,至少目前是这样,尽管未来硬件也会越来越快。目前的研究总结来看分为两个方向:一是对训练好的复杂模型进行压缩得到小模型;二是直接设计小模型并进行训练。不管如何,其目标在保持模型性能(accuracy)的前提下降低模型大小(parameters size),同时提升模型速度(speed, low latency)。本文的主角MobileNet属于后者,其是 Google 最近提出的一种小巧而高效的 CNN 模型,其在 accurac ...
深度学习知识点汇总
[toc]
为什么二分类不用 MSE 损失函数?
对于二分类问题,损失函数不采用均方误差(Mean Squared Error,MSE)至少可以从两个角度来分析。
均方差 Mean Squared Error (MSE) 损失是机器学习、深度学习回归任务中最常用的一种损失函数,也称为 L2 Loss。其基本形式如下
$$
J_{M S E}=\frac{1}{N} \sum_{i=1}^{N}\left(y_{i}-\hat{y}_{i}\right)^{2}
$$
数据分布角度
首先,使用 MSE 意味着假设数据采样误差是遵循正态分布的。用贝叶斯门派的观点来看,意味着作了高斯先验的假设。实际上,可以分为两类(即二分类)的数据集是遵循伯努利分布。
如果假设误差遵循正态分布,并使用最大似然估计(Maximum Likelihood Estimation,MLE),我们将得出 MSE 正是用于优化模型的损失函数。
首先,正态/高斯分布$\mathcal{N}$由两个参数$(\mu, \sigma)$定义,训练数据$(x, y)$包括特征$x$和实际观测值$y$。简单来说,每当我们采样数据时 ...
交叉熵(Cross Entropy)
[toc]
交叉熵(cross entropy)是深度学习中常用的一个概念,一般用来求目标与预测值之间的差距。
交叉熵(Cross Entropy)是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异性信息。语言模型的性能通常用交叉熵和复杂度(perplexity)来衡量。交叉熵的意义是用该模型对文本识别的难度,或者从压缩的角度来看,每个词平均要用几个位来编码。复杂度的意义是用该模型表示这一文本平均的分支数,其倒数可视为每个词的平均概率。平滑是指对没观察到的 N 元组合赋予一个概率值,以保证词序列总能通过语言模型得到一个概率值。通常使用的平滑技术有图灵估计、删除插值平滑、Katz 平滑和 Kneser-Ney 平滑。
信息论
在信息论中,交叉熵是表示两个概率分布 p,q,其中 p 表示真实分布,q 表示非真实分布,在相同的一组事件中,其中,用非真实分布 q 来表示某个事件发生所需要的平均比特数。从这个定义中,我们很难理解交叉熵的定义。下面举个例子来描述一下:
假设现在有一个样本集中两个概率分布 p,q,其中 p 为真实分布,q 为非真实分布。假如,按照真实分布 p 来 ...
超参数网络搜索
[toc]
由于各个新模型在执行交叉验证的过程中间是相互独立的,所以我们可以充分利用多核处理器(Multicore processor)甚至是分布式的计算资源来从事并行搜索,节省运算时间。
123# 导入20类新闻文本抓取器from sklearn.datasets import fetch_20newsgroupsimport numpy as np
1news = fetch_20newsgroups(subset='all')
1234# 分割数据from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(news.data[:3000], news.target[:3000], test_size=0.25, random_state=33)
123456789101112# 导入支持向量机(分类)模型from sklearn.svm import SVC# 导入TF-IDF文本抽取器from sklearn.f ...
Python编程库
[toc]
Python 被大量应用在数据挖掘和深度学习领域,其中使用极其广泛的是 Numpy、pandas、Matplotlib、PIL 等库。
Why Python?
解释型语言(Interpreted Languages)
免费试用
跨平台执行
Python 机器学习的优势
方便调试的解释型原因
跨平台执行作业
广泛的应用程序接口
丰富完备的开源工具包
numpy是 Python 科学计算库的基础。包含了强大的 N 维数组对象和向量运算。
pandas是建立在 numpy 基础上的高效数据分析处理库,是 Python 的重要数据分析库。
Matplotlib是一个主要用于绘制二维图形的 Python 库。用途:绘图、可视化
PIL库是一个具有强大图像处理能力的第三方库。用途:图像处理
Numpy 库
NumPy 是使用 Python 进行科学计算的基础软件包。
NumPy:高效向量和矩阵运算
SciPy:基于 NumPy,更为强大
菜鸟教程
Guidence
更多学习,可参考numpy 中文网:https://www.numpy.org.cn/
1.数组创建
可以使 ...
Linux常用指令
[toc]
查找 find
查找文件或目录路径
用于在硬盘中查找文件或目录的路径(速度较慢)
find path [-option] [查找条件]
-name 根据文件名进行精确查找
example:
123find / -name test.txt # 从根目录下开始查找精确匹配名字的文件路径find ./ -name "*test*" # 从当前目录下开始查找包含test名字的所有文件和目录路径(*通配任意字符)
查看文件内容
常用的查看文件内容命令:
cat: 直接查阅文件内容,不能翻页
more: 翻页查看文件内容
less: 翻页阅读,和 more 类似,但操作按键比 more 更弹性
head: 查看文档的前面几行内容,默认 10 行
tail: 查看文档的最后几行内容,默认 10 行
查找文件内容
grep 命令,在文本中或 stdin 中查找匹配字符串
grep [-cin] '目标字符串' filename
grep(global search regular expression(RE) and print out the line, ...
Linux 正则表达式
[toc]
正则表达式
什么是正则表达式呢?
123正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在 Perl 中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由 UNIX 中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有 regexp、regex,复数有 regexps、regexes、regexen。
基本语法
一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。
选择
| 竖直分隔符表示选择,例如 boy|girl 可以匹配 boy 或者 girl。
数量限定
数量限定除了我们举例用的 * 还有 + 加号 ? 问号,如果在一个模式 ...
Linux进程管理
[toc]
进程的概念
首先程序与进程是什么?程序与进程又有什么区别?
程序(procedure):不太精确地说,程序就是执行一系列有逻辑、有顺序结构的指令,帮我们达成某个结果。就如我们去餐馆,给服务员说我要牛肉盖浇饭,她执行了做牛肉盖浇饭这么一个程序,最后我们得到了这么一盘牛肉盖浇饭。它需要去执行,不然它就像一本武功秘籍,放在那里等人翻看。
进程(process):进程是程序在一个数据集合上的一次执行过程,在早期的 UNIX、Linux 2.4 及更早的版本中,它是系统进行资源分配和调度的独立基本单位。同上一个例子,就如我们去了餐馆,给服务员说我要牛肉盖浇饭,她执行了做牛肉盖浇饭这么一个程序,而里面做饭的是一个进程,做牛肉汤汁的是一个进程,把牛肉汤汁与饭混合在一起的是一个进程,把饭端上桌的是一个进程。它就像是我们在看武功秘籍这么一个过程,然后一个篇章一个篇章地去练。
程序只是一些列指令的集合,是一个静止的实体,而进程不同,进程有以下的特性:
动态性:进程的实质是一次程序执行的过程,有创建、撤销等状态的变化。而程序是一个静态的实体。
并发性:进程可以做到在一个时间段内,有多个程序 ...
Linux 系统概述
[toc]
1.1 Linux 简介
1.1.1 操作系统的概念
操作系统是管理和控制计算机硬件资源的计算机程序。
核心功能:
syscall 接口
程序管理
内存管理
文件系统管理
驱动管理
1.1.2 常见的操作系统
DOS
Windows
Unix
Linux
Mac OS
Android
IOS
1.1.3 什么是 Linux
Linux 是一套免费使用和自由传播的类 Unix 操作系统。
Linux 可以管理计算机所有硬件资源,进行 CPU 调度,分配工作桌面。
1.1.4 Linux 的结构
应用程序
shell 程序(Bash)
Linux 内核 kernel
硬件系
常见的 shell:
Bourne shell(sh)
C shell(csh) & korn shell(ksh)
Bash shell(/bin/bash)
shell 常用快捷键
shell 常用通配符
man 命令(Manual pages)
1man <command_name>
1.1.5 Linux 的特点
多任务,多用户
功能强大的开发者交互 ...