卷积神经网络基础
1.为什么要学习神经网络
1.1全连接网络问题
-
链接权过多,算的慢,难收敛,同时可能进入局部极小值,也容易产生过拟合问题
e.g.输入为1000×1000图像 ,隐含层有 1M 个节点,则输入->隐含层间有1×1012数量级的参数 -
解决算的慢的问题:减少权值连接,每一个节点只连接到上一层的少数神经元,即局部连接网络
-
解决难以收敛的问题:权值过多容易产生过拟合问题,如何消除?
联想到人类解决问题的思路->信息分层处理,每一层在上一层提取特征的基础上进行再处理,抽象出更高级别的特征。
1.2深度学习平台简介
1.3PyTorch简介
是什么?
- PyTorch是一个 Python 的深度学习库 。它最初由Facebook人工智能研究小组开发而优步的Pyro软件则用于概率编程。
- 最初PyTorch由Hugh Perkins开发作为基于Torch框架的LusJIT的Python 包装器。PyTorch在Python中重新设计和实现Torch同时为后端代码共享相同的核心C库。
- 除了Facebook之外Twitter、GMU和Salesforce等机构都采用了PyTorch。
- 到目前据统计已有80%的研究采用PyTorch包括Google。
基本概念
- 张量(Tensor)
是一个物理量,对高维(维数 ≥ 2)的物理量进行“量纲分析”的一种工具。
简单的可以理解为:一维数组称为矢量,二维数组为二阶张量,三维数组称为三阶张量… - 计算图
用 “ 结点 ”(nodes)和 “ 线 ”(edges)的有向图来描述数学计算的图像。“ 节点 ” 一般用来表示施加的数学操作,但也可以表示数据输入的起点/输出的终点,或者是读取/写入持久变量的终点。“ 线 ” 表示 “ 节点 ” 之间的输入/输出关系。这些数据 “ 线 ” 可以输运 “ size可动态调整 ” 的多维数据数组,即 “ 张量 ”(tensor)
- 注意
使用 tensor 表示数据
使用Dataset、DataLoader读取样本数据和标签
使用变量(Variable)存储神经网络权值等参数
使用计算图(Computational Graph)来表示计算任务
在代码运行过程中同时执行计算图
1.4简单示例
构建简单的计算图,每个节点将零个或多个tensor作为输入,产生一个tensor作为输出。PyTorch中,所见即为所得,tensor的使用和numpy中的多维数组类似:
import torch
x_const = torch.tensor([1.0, 2.0, 3.0])
y = torch.tensor([3.0, 4.0, 5.0])
output