分类问题









分类问题只关心对正确类的预测

梯度下降理解

https://zhuanlan.zhihu.com/p/335191534(强推)

图像分类数据集

 import matplotlib.pyplot as plt
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2ld2l.use_svg_display()# 使用框架内的内置函数将fashion-minist数据集下载并读取到内存
# 通过totensor实例将图像数据从PIL类型变成32位浮点 的tensor类型
# 并除255使得所得的像素数值在0-1之间trans = transforms.ToTensor()
train = torchvision.datasets.FashionMNIST(root='./data', train=True, transform=trans, download=True)
test = torchvision.datasets.FashionMNIST(root='./data', train=False, transform=trans, download=True)print(len(train))
print(len(test))# 通过下标访问任意一个样本,返回值为两个torch,一个特征tensor和 一个标签tensor
print(train[100])
print(train[0][0], train[0][1],train[0][0].shape)# labels是一个列表
# 数值标签转文本标签
def get_fashion_mnist_labels(labels):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_fashion_mnist(images, labels):d2l.use_svg_display()# 绘制矢量图_, figs = plt.subplots(2, len(images), figsize=(12, 12))# 创建子图,一行len(images)列,图片大小12*12for f, img, lbl in zip(figs, images, labels):# zip函数将他们压缩成由多个元组组成的列表f.imshow(img.view((28, 28)).numpy())# 将img转形为28*28大小的张量,然后转换成numpy数组f.set_title(lbl)# 设置每个子图的标题为标签# 不显示坐标刻度f.axes.get_xaxis().set_visible(False)f.axes.get_yaxis().set_visible(False)# 关闭x轴y轴plt.show()# next拿到第一个小批量
X, y = next(iter(data.DataLoader(train, batch_size=18)))
show_fashion_mnist(X, get_fashion_mnist_labels(y))


在模型中读取小批量
有了线性回归中读取小批量的经验,我们知道读取小批量可以使用torch中内置的dataloader函数来实现。

dataloader还支持多线程读取数据,通过设置它的num_workers参数。

import matplotlib.pyplot as plt
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2ld2l.use_svg_display()# 使用框架内的内置函数将fashion-minist数据集下载并读取到内存
# 通过totensor实例将图像数据从PIL类型变成32位浮点 的tensor类型
# 并除255使得所得的像素数值在0-1之间trans = transforms.ToTensor()
train = torchvision.datasets.FashionMNIST(root='./data', train=True, transform=trans, download=True)
test = torchvision.datasets.FashionMNIST(root='./data', train=False, transform=trans, download=True)print(len(train))
print(len(test))# 通过下标访问任意一个样本,返回值为两个torch,一个特征tensor和 一个标签tensor
print(train[100])
print(train[0][0], train[0][1],train[0][0].shape)# labels是一个列表
# 数值标签转文本标签
def get_fashion_mnist_labels(labels):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_fashion_mnist(images, labels):d2l.use_svg_display()# 绘制矢量图_, figs = plt.subplots(1, len(images), figsize=(12, 12))# 创建子图,一行len(images)列,图片大小12*12for f, img, lbl in zip(figs, images, labels):# zip函数将他们压缩成由多个元组组成的列表f.imshow(img.view((28, 28)).numpy())# 将img转形为28*28大小的张量,然后转换成numpy数组f.set_title(lbl)# 设置每个子图的标题为标签f.axes.get_xaxis().set_visible(False)f.axes.get_yaxis().set_visible(False)# 关闭x轴y轴plt.show()# next拿到第一个小批量
X, y = next(iter(data.DataLoader(train, batch_size=18)))
show_fashion_mnist(X, get_fashion_mnist_labels(y))batch_size = 256
# 小批量数目
# num_workers=4,不开启多线程读取。train_iter = data.DataLoader(train, batch_size=batch_size, shuffle=True, num_workers=8)# test_iter = data.DataLoader(test, batch_size=batch_size, shuffle=False, num_workers=4)
timer = d2l.Timer()
for X,y in train_iter:continue
print(f'{timer.stop():.2f} sec')
# 数据的读取需要比训练快
'''
num_workers=4
2.97 secnum_workers=8
2.02 sec
'''

softmax回归的从0实现

import matplotlib.pyplot as plt
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2l
from IPython import displaybatch_size = 256
# 训练集和测试集的迭代器
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
num_inputs = 784
num_outputs = 10# 对于softmax 输入是个向量 所以把3d的图像压缩成一行784列的向量
# 将展平每个图像,将它们视为长度为784的向量。因为我们的数据集有10个类别.所以网络输出维度为10
W = torch.normal(0, 0.01, size=(num_inputs, num_outputs), requires_grad=True)
b = torch.zeros(num_outputs, requires_grad=True)# 实现sotfmax 对矩阵的每行做softmax
def softmax(X):X_exp = torch.exp(X)partition = X_exp.sum(1, keepdim=True)# 沿着列变化求和 就是每一行求和# soft(X)ij =exp(Xij)/sumk(exp(Xik))return X_exp / partition# 广播机制X = torch.normal(0, 1, (2, 5))
# 均值0 方差1 2*5
X_prob = softmax(X)
# 沿列变化相加
print(X_prob, X_prob.sum(1))
'''tensor([[0.3529, 0.1850, 0.1426, 0.0871, 0.2324],[0.1502, 0.0493, 0.0970, 0.4357, 0.2677]]) tensor([1., 1.])'''# 实现softmax回归模型
def net(X):# X变列向量 -1表示自动算 其实是batchsize*784的矩阵return softmax(torch.matmul(X.reshape((-1, W.shape[0])), W) + b)#  创建一个数据y_hat,其中包含2个样本在3个类别的预测概率,使用y作为y_hat中概率的索引y = torch.tensor([0, 2])
y_hat = torch.tensor([[0.1, 0.3, 0.6], [0.3, 0.2, 0.5]])
# 等价y_hat[[0, 1], [0, 2]] 看[0,0][1,2]的值 就是 预测第0个样本是第0类的概率 预测第1个样本是第2类的概率
# 看真实标号 类的预测值是多少
print(y_hat[[0, 1], y])# 实现交叉熵损失函数
def cross_entropy(y_hat, y):return -torch.log(y_hat[range(len(y_hat)), y])

09 Softmax 回归 + 损失函数 + 图片分类数据集【动手学深度学习v2】相关推荐

  1. 【动手学深度学习】Softmax 回归 + 损失函数 + 图片分类数据集

    学习资料: 09 Softmax 回归 + 损失函数 + 图片分类数据集[动手学深度学习v2]_哔哩哔哩_bilibili torchvision.transforms.ToTensor详解 | 使用 ...

  2. 【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集

    3.4. softmax回归 回归可以用于预测多少的问题. 比如预测房屋被售出价格,或者棒球队可能获得的胜场数,又或者患者住院的天数. 事实上,我们也对分类问题感兴趣:不是问"多少" ...

  3. 动手学深度学习v2 p1引言 监督学习与无监督学习

    1.引言 1.2. 机器学习中的关键组件 首先介绍一些核心组件.无论什么类型的机器学习问题,都会遇到这些组件: 可以用来学习的数据(data): 如何转换数据的模型(model): 一个目标函数(ob ...

  4. 动手学深度学习 v2 视频版

    动手学深度学习 v2 01 课程安排 目标 内容 形式 你将学到什么? 资源 02 深度学习介绍 AI 地图 图片分类 物体检测和分割 样式迁移 人脸合成 文字生成图片 文字生成 03 安装 本地安装 ...

  5. 《动手学深度学习v2》之细致解析(1)内容及介绍及安装

    前言 作者来自北京某不知名985,现在是本科在读学生,专业是数据科学与大数据技术,班上同学都太卷了,没办法,需要学习深度学习,经大佬介绍,在B站上找到了一个很不错的资源,李沐老师的<动手学深度学 ...

  6. 【动手学深度学习v2李沐】学习笔记07:权重衰退、正则化

    前文回顾:模型选择.欠拟合和过拟合 文章目录 一.权重衰退 1.1 硬性限制 1.2 柔性限制(正则化) 1.3 参数更新法则 1.4 总结 二.代码实现 2.1 从零开始实现 2.1.1 人工数据集 ...

  7. 李沐动手学深度学习v2/总结1

    总结 编码过程 数据 数据预处理 模型 参数,初始化参数 超参数 损失函数,先计算损失,清空梯度(防止有累积的梯度),再对损失后向传播计算损失关于参数的梯度 优化算法,使用优化算法更新参数 训练求参数 ...

  8. new 动手学深度学习V2环境安装

    动手学深度学习V2 环境安装 虚拟环境 d2l-zh安装 conda create -n d2l-zh -y python=3.8 pip pip install jupyter d2l torch ...

  9. 使用AWS最便宜的GPU实例  from 动手学深度学习v2 李沐大神

    使用AWS最便宜的GPU实例  from 动手学深度学习v2 李沐大神 视频链接https://www.bilibili.com/video/BV1MA411L78X?t=493 由于购买的电脑没有配 ...

最新文章

  1. 全网最火的Nacos监控中心——Prometheus+Grafana
  2. UC伯克利博士尤洋回国创业,曾刷新ImageNet纪录!已获超千万融资
  3. [crypto]-10-openssl版本介绍
  4. 冷热分离和直接使用大数据库_还不知道HBase冷热分离的技术原理?看这一篇就够了...
  5. MySQL部署2002_MySQL入门02-MySQL二进制版本快速部署
  6. pythontdd测试命名_荐Pytest之测试命名规则
  7. Linux下添加普通帐号
  8. 【转】C#中枚举类型与静态变量
  9. 解决:Changes not staged for commit:
  10. 【Python】 注释
  11. 透过一个编译报错,总结两个Go程序编译的重要知识
  12. url传值的一个问题解决
  13. 数据预测之BP神经网络具体应用以及matlab代码
  14. [置顶]       cocos2d-x2.2.5走四棋儿源码“开源”
  15. 手用计算机怎么弄声音,计算器怎么调声音
  16. c++异常机制(转载)
  17. 重装系统计算机无法启动,重装系统后无法开机的原因及解决方法
  18. 秦岚微博之夜喜提热搜第一 优雅公主裙演绎真人版辛德瑞拉
  19. Java人员随机分组
  20. C#原子操作(Interlocked.Decrement和Interlocked.Increment)

热门文章

  1. 【log4j】—日志记录log4j的Logger和commons.logging的Log的区别
  2. 数据库时间字段条件操作善用TO_DAYS函数等
  3. MySql增加字段、删除字段、修改字段名称、修改字段类型
  4. MaxCompute实践分析
  5. Python树莓派编程1.2 探索树莓派
  6. hibernate中@Entity和@Table的区别
  7. Hive 高级编程??深入浅出学Hive
  8. [跟我一起涨姿势]未注册服务的RHEL6.4使用网易的CentOS源
  9. 工作是老板的,生命是自己的。
  10. 深入理解MSTP域和端口角色