手机网站建设目标,网络企业是什么,typecho迁移wordpress,网站平台延展性Softmax 回归
基本原理
回归和分类#xff0c;是两种深度学习常用方法。回归是对连续的预测#xff08;比如我预测根据过去开奖列表下次双色球号#xff09;#xff0c;分类是预测离散的类别#xff08;手写语音识别#xff0c;图片识别#xff09;。 现在我们已经对回…Softmax 回归
基本原理
回归和分类是两种深度学习常用方法。回归是对连续的预测比如我预测根据过去开奖列表下次双色球号分类是预测离散的类别手写语音识别图片识别。 现在我们已经对回归的处理有一定的理解了如何过渡到分类呢
假设我们有 n 类首先我们要编码这些类让他们变成数据。所有类变成一个列向量。 y [ y 1 , y 2 , . . . y n ] T y[y_1,y_2,...y_n]^T y[y1,y2,...yn]T
有一个数据属于第 i 类那么他的列向量就是 y [ 0 , 0 , . . . , 1 , . . . , 0 , 0 ] T y[0,0,...,1,...,0,0]^T y[0,0,...,1,...,0,0]T
也就是只有他所在的那个类的元素1.
可以用均方损失训练通过概率判断最终选用哪一个。
Softmax 回归就是一种分类方式回归问题在多分类上的推广。首先确定输入特征数和输出类别数。比如上图中我们有4个特征和3个可能的类别那么计算各自概率的公式包括3个线性回归 可以看出 Softmax 是全连接的单层神经网络。 我们让所有输出结果归一化后从中选择出最大可能的置信度最高的分类结果。 采用 e 的指数可以让值全变为非负。
用真实的概率向量-我们预测得到的概率向量就是损失。真实值就是只有一个1的列向量。
交叉熵损失 可见**分类问题我们不关心对非正确的预测值只关心正确预测值是否足够大。**因为正确值是只有一个元素为1的列向量。
常用的损失函数
L2 Loss均方损失。 L1 Loss绝对值损失。 L2 梯度是一条倾斜直线对于梯度下降算法等更为合适L1 是一个跳变梯度要么 -1 要么 1. 如图是 L1 L2 的梯度。 我们可以结合两者得到一个新的损失函数鲁棒损失 Huber Robust
KaTeX parse error: {equation} can be used only in display mode. 图像分类数据集
MINIST 是一个常用图像分类数据集但是过于简单。后来的 upgrade 版叫 Fashion-MINIST服装分类.
首先我们研究研究怎么加载训练数据集以便后面测试算法用。
# 导包
%matplotlib inline
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2ld2l.use_svg_display()d2l.use_svg_display()# 下载数据集并读取到内存
trans transforms.ToTensor()
mnist_train torchvision.datasets.FashionMNIST(root../data, trainTrue, transformtrans, downloadTrue) # 训练数据集
mnist_test torchvision.datasets.FashionMNIST(root../data, trainFalse, transformtrans, downloadTrue) # 测试数据集用于评估性能# 定义函数用于返回对应索引的标签
def get_fashion_mnist_labels(labels): #save返回Fashion-MNIST数据集的文本标签text_labels [t-shirt, trouser, pullover, dress, coat,sandal, shirt, sneaker, bag, ankle boot]return [text_labels[int(i)] for i in labels]# 图像可视化让结果看着更直观比如下面那个绿色图的样子
def show_images(imgs, num_rows, num_cols, titlesNone, scale1.5): #save绘制图像列表figsize (num_cols * scale, num_rows * scale)_, axes d2l.plt.subplots(num_rows, num_cols, figsizefigsize)axes axes.flatten()for i, (ax, img) in enumerate(zip(axes, imgs)):if torch.is_tensor(img):# 图片张量ax.imshow(img.numpy())else:# PIL图片ax.imshow(img)ax.axes.get_xaxis().set_visible(False)ax.axes.get_yaxis().set_visible(False)if titles:ax.set_title(titles[i])return axes# 我们先读一点数据集看看啥样的
X, y next(iter(data.DataLoader(mnist_train, batch_size18)))
show_images(X.reshape(18, 28, 28), 2, 9, titlesget_fashion_mnist_labels(y));# 通过内置数据加载器读取一批量数据自动随机打乱读取不需要我们自己定义
batch_size 256def get_dataloader_workers(): #save使用4个进程来读取数据return 4train_iter data.DataLoader(mnist_train, batch_size, shuffleTrue,num_workersget_dataloader_workers())测量以上用时基本2-3s。
总结整合以上数据读取过程代码如下
def load_data_fashion_mnist(batch_size, resizeNone): #save下载Fashion-MNIST数据集然后将其加载到内存中trans [transforms.ToTensor()]if resize:trans.insert(0, transforms.Resize(resize))trans transforms.Compose(trans)mnist_train torchvision.datasets.FashionMNIST(root../data, trainTrue, transformtrans, downloadTrue)mnist_test torchvision.datasets.FashionMNIST(root../data, trainFalse, transformtrans, downloadTrue)return (data.DataLoader(mnist_train, batch_size, shuffleTrue,num_workersget_dataloader_workers()),data.DataLoader(mnist_test, batch_size, shuffleFalse,num_workersget_dataloader_workers()))加载图像还可以调整其大小。