《PyTorch深度学习实践》学习笔记 【4】
学习资源:
《PyTorch深度学习实践》完结合集
六、Logistics Regression(逻辑斯蒂回归模型)
虽然它叫做回归模型,但是处理的是分类问题
6.0 回归问题和分类问题
- 有监督学习:
- 回归问题
- 分类问题
- 二分类
- 多分类
回归问题:如果我们预测的结果是以连续数字进行表示,即我们将在连续函数中对多个输入变量建立映射关系时,则这样的问题称之为回归问题。
分类问题:如果我们预测的结果是以离散形式表示的,即我们将多个输入变量与多个不同的类别建立映射关系时,则这样的问题称之为分类问题。
举个例子:
-
Minist数据集(0-9的数字手写图片)分类问题:
任务:将图片分类为10个类别(0-9的数字) 。
实际计算过程是各个数字对应的概率值
输出概率最大的那个作为分类结果。
多分类问题与二分类问题关系
首先,两类问题是分类问题中最简单的一种。其次,很多多类问题可以被分解为多个两类问题进行求解
6.1 torchvision
import torchvision
train_set = torchvision.datasets.MNIST(root='../dataset/mnist', train=True, download=True)
test_set = torchvision.datasets.MNIST(root='../dataset/mnist', train=False, download=True)
torchvision.datasets :包含了一些经典的数据集
参数说明 1. train:使用训练集 2. download:自动下载
数据集如MNIST,CIFAR10等
6.2 输出的处理
当计算出来的概率是0.5 时, 可以在输出的时候输出“不确定”,有时也直接输出概率
6.3 Logistics函数
功能:把输出的值,把实数值映射到0-1之间
因为多分类问题输出的是一个类别的概率,而不是一个确定的类别。
特点:超过某一个阈值之后,增长速度变慢。(饱和函数)(导数的形状是正态分布的)
相同功能的,还有sigmoid函数(激活函数,增加非线性变化)
现在y^head_1 代表的是概率值P(class=1)
KL散度,
交叉熵(cross-entropy): 描述两个概率分布之间的相似度(后面6.4用到)
6.4 BCE LossFunction (binary cross-entropy)
在二分类问题中,y=1或y=0,而y^head 是一个概率值取在[0,1]之间值。
不管y=0还是1,y_head与y越接近,BCE loss越小
6.5 与线性回归的不同
与线性回归只有两处不同
- 线性函数后加上了sigmod函数
- 损失函数由线性回归的MSE到BCE LossFunction
6.6 处理过程
- 数据集准备
- 设计模型
- 选择损失函数和优化器
- 训练
七、处理多维输入
当输入是一个多维数据,来预测对应的分类
7.1 数据集: 样本和特征
7.2 线性回归模型(向量形式处理多维输入)
线性回归模型如下,每一个x_i 都乘以一个权重,用向量表示。
(Pytorch 的sigmoid函数 支持向量操作)
线性层计算过程:整合成矩阵运算(向量化计算,可以利用并行化计算提高计算速度)
线性层的使用:
self.linear1 = torch.nn.Linear(8, 6)
非线性层的使用:
x = self.sigmoid(self.linear1(x))
7.3 学习能力与超参数
层与层的叠加,就是多层神经网络。每层之间的矩阵大小选择,也是超参数的搜索问题
层数太多,学习能力太强,会把噪声的规律也学进来,而抓不住学习的重点。所以层数,每层的维度,是一个超参数搜索问题。
7.4 代码
import torch
import numpy as np
##1. Prepare Dataset
xy = np.loadtxt('diabetes.csv.gz', delimiter=',', dtype=np.float32)
x_data = torch.from_numpy(xy[:,:-