动手学深度学习 代码(三):多层感知机 pytorch

动手学深度学习--softmax回归和MLP的pytorch实现 softmax和MLP的pytorch实现 阅读详情

能自己实现的都重新写了函数。(pycharm)

多层感知机从零开始实现

import torch
from torch import nn
import torchvision # 计算机视觉相关库
from d2l import torch as d2l
from torch.utils import data
from torchvision import transforms
import matplotlib.pyplot as plt

def get_dataloader_workers():  #@save
    """使用4个进程来读取数据"""
    return 4  # 并行

def load_data_fashion_mnist(batch_size, resize=None):  #@save
    """下载Fashion-MNIST数据集,然后将其加载到内存中"""
    trans = [transforms.ToTensor()]
    if resize:
        trans.insert(0, transforms.Resize(resize))
        #transforms.Resize:调整PILImage对象的尺寸。transforms.Resize([h, w])或transforms.Resize(x)等比例缩放
    trans = transforms.Compose(trans) # 串联多个图片变换的操作
    mnist_train = torchvision.datasets.FashionMNIST(
        root="D:/code/动手学深度学习/pytorch/data", train=True, transform=trans, download=False)
    mnist_test = torchvision.datasets.FashionMNIST(
        root="D:/code/动手学深度学习/pytorch/data", train=False, transform=trans, download=False)
    return (data.DataLoader(mnist_train, batch_size, shuffle=True,
                            num_workers=get_dataloader_workers()),
            data.DataLoader(mnist_test, batch_size, shuffle=False,
                            num_workers=get_dataloader_workers()))


def get_fashion_mnist_labels(labels):
    """Return text labels for the Fashion-MNIST dataset."""
    text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',
                   'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
    return [text_labels[int(i)] for i in labels]

# 激活函数
def relu(X):
    a = torch.zeros_like(X) # 生成形状相同的0矩阵
    return torch.max(X, a)

#模型
def net(X):
    X = X.reshape((-1, num_inputs)) # 每张图片都拉成向量
    H = relu(X@W1 + b1)  # 这里“@”代表矩阵乘法
    return (H@W2 + b2)

loss = nn.CrossEntropyLoss(reduction='none') # 损失函数

class Accumulater: #@save
    def __init__(self, n):
        self.data = [0.0] *n

    def add(self, *args):
        self.data = [a + float(b) for a,b in zip(self.data, args)]

    def reset(self):
        self.data = [0.0] * len(self.data)

    def __getitem__(self, idx):
        return self.data[idx]

# 精度
def accuracy(y_hat, y):
    """Compute the number of correct predictions.

    Defined in :numref:`sec_softmax_scratch`"""
    if len(y_hat.shape) > 1 and y_hat.shape[1] > 1:
        y_hat = d2l.argmax(y_hat, axis=1)
    cmp = d2l.astype(y_hat, y.dtype) == y
    return float(d2l.reduce_sum(d2l.astype(cmp, y.dtype)))


# 训练一轮
def train_epoch_ch3(net, train_iter, loss, updater):
    if isinstance(net, torch.nn.Module):
        net.train()
    metric = Accumulater(3)
    for X, y in train_iter:
        y_hat = net(X)
        l = loss(y_hat, y)
        if isinstance(updater, torch.optim.Optimizer):  # 使用torch内置优化器
            updater.zero_grad()
            l.mean().backward()
            updater.step()
        else:
            l.sum().backward()
            updater(X.shape[0])
        metric.add(float(l.sum()), accuracy(y_hat, y), y.numel())
    return metric[0]/metric[2], metric[1]/metric[2]

# 准确率
def evaluate_accuracy(net, data_iter):  #@save
    if isinstance(net, torch.nn.Module):
        net.eval()
    metric = Accumulater(2)  # 累加
    with torch.no_grad():
        for X, y in data_iter:
            metric.add(accuracy(net(X), y), y.numel())
    return metric[0]/metric[1]

# 训练全部
def train_ch3(net, train_iter, test_iter, loss, num_epochs, updater):
    animator = d2l.Animator(xlabel='epoch', xlim=[1, num_epochs], ylim=[0.3, 0.9],  # 可视化
                        legend=['train loss', 'train acc', 'test acc'])
    for epoch in range(num_epochs):
        train_metrics = train_epoch_ch3(net, train_iter, loss, updater)
        test_acc = evaluate_accuracy(net, test_iter)
        animator.add(epoch + 1, train_metrics + (test_acc,))
    train_loss, train_acc = train_metrics
    assert train_loss < 0.5, train_loss
    assert train_acc <=1 and train_acc > 0.7, train_acc
    assert test_acc <= 1 and test_acc > 0.7, test_acc

# 预测
def predict_ch3(net, test_iter, n = 6):
    for X, y in test_iter:
        break
    trues = get_fashion_mnist_labels(y)
    preds = get_fashion_mnist_labels(net(X).argmax(axis= 1))
    titles = [true + '\n' + pred for true, pred in zip(trues, preds)]
    d2l.show_images(X[0:n].reshape((n,28,28)), 1, n, titles = titles[0:n])


if __name__ == '__main__':
    batch_size = 256
    train_iter, test_iter = load_data_fashion_mnist(batch_size)

    # 初始化模型参数
    num_inputs, num_outputs, num_hiddens = 784, 10, 256 # 28*28=784,10个输出类别,但隐藏层有256个隐藏单元

    # nn.Parameter()声明是一个torch parameter
    W1 = nn.Parameter(torch.randn(
        num_inputs, num_hiddens, requires_grad=True) * 0.01)
    # 试一下全部设置成0,(会全部参数更新都一致?)

    b1 = nn.Parameter(torch.zeros(num_hiddens, requires_grad=True))
    W2 = nn.Parameter(torch.randn(
        num_hiddens, num_outputs, requires_grad=True) * 0.01)
    b2 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True))

    params = [W1, b1, W2, b2]
    # 训练
    num_epochs, lr = 10, 0.1
    updater = torch.optim.SGD(params, lr=lr)
    train_ch3(net, train_iter, test_iter, loss, num_epochs, updater)
    plt.show()
    # 测试集上应用
    predict_ch3(net, test_iter)
    plt.show()

多层感知机简洁实现

用到了一些d2l的内容

import torch
from torch import nn
from d2l import torch as d2l
import matplotlib.pyplot as plt

net = nn.Sequential(
    nn.Flatten(),
    nn.Linear(784, 256),
    nn.ReLU(),
    nn.Linear(256, 10))

def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std = 0.1)

net.apply(init_weights)

batch_size, lr, num_epochs = 256, 0.1, 10
loss = nn.CrossEntropyLoss(reduction='none')
trainer = torch.optim.SGD(net.parameters(), lr=lr)
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
plt.show()
d2l.predict_ch3(net, test_iter)
plt.show()
深度学习笔记5:Softmax 回归 + 损失函数 + 图片分类数据集 学习李沐老师的深度学习(pytorch),做的笔记5(视频9)~~~ 阅读详情

相关推荐

《动手学深度学习》PyTorch版本

本项目对中文版《动手学深度学习》中的代码进行整理,并参考一些优秀的GitHub项目给出基于PyTorch的实现方法。为了方便阅读,本项目给出全书PyTorch版的PDF版本。欢迎大家Download,Star,Fork。除了原书内容外,我们还为每一章增加了本章附录,用于对该章节中用到的函数以及数学计算加以说明,除此之外还增加了语义分割网络(U-Net)的实现。

wzy628810的博客 9426

总结5(10.4-10.10)

我们可以通过下标来访问任意⼀个样本: 本周学习了softmax回归,区别去上次学的线性回归,softmax回归其实是一个分类问题,和线性回归不同,softmax回归的输出单元从一个变成了多个,softmax实际是一种运算是使得输出值更适合离散值的预测和训练。 1.softmax回归模型 图1.线性回归神经网络 图2.softmax回归神经网络 softmax回归跟线性回归⼀样将输⼊特征与权重做线性叠加。与线性回归的⼀个主要不同在于, softmax回归的输出值个...

xyjaixuexi的博客 735

《动手学深度学习》PDF 开源了(全中文,支持 Jupyter 运行) ——PyTorch 版

李沐,亚马逊 AI 主任科学家,名声在外!半年前,由李沐、Aston Zhang 等人合力打造的《动手学深度学习》正式上线,免费供大家阅读。这是一本面向中文读者的能运行、可讨论的深度学习教科书! 李沐的这本《动手学深度学习》也是使用 MXNet 框架写成的。但是很多入坑机器学习的萌新们使用的却是 PyTorch。如果有教材对应的 PyTorch 实现代码就更好了! 撒花,...

鬼刀 5883

softmax线性回归的简洁实现

1. 读取数据 # 读取并加载数据集,定义load_data_fashion_mnist函数 def load_data_fashion_mnist(batch_size, resize=None): """下载fashion-MNIST数据集,然后将其加载到内存中""" # ToTensor操作 trans = [transforms.ToTensor()] # 因为当前trans里面包含的图片tensor大小是28x28,到后面训练时需要更大一点的数组就用resize

admin11111111的博客 1031

《动手学深度学习》PyTorch 版本总结(1)

通过伯禹学习平台和Kesic平台,参与了一项14天学习《动手学深度学习》课程,这本书是由李沐等大神编写而成,并提供了配套的视频和源代码。这次活动主要是将里面的Mxnet 框架改成了PyTorch 框架实现了一遍,并由上海交大的老师们再次讲述了一遍。以下内容均是记录学习过程中的一些学习知识点。 Task 01 (1)线性回归 知识点1 在求数值解的优化算法中,小批量随机梯度下降(mini-batch...

CV前沿 1845

《动手学深度学习》(PyTorch版)

《动手学深度学习》PyTorch版深度学习简介起源发展成功案例特点小结练习参考文献 深度学习简介 你可能已经接触过编程,并开发过一两款程序。同时你可能读过关于深度学习或者机器学习的铺天盖地的报道,尽管很多时候它们被赋予了更广义的名字:人工智能。 实际上,或者说幸运的是,大部分程序并不需要深度学习或者是更广义上的人工智能技术。例如,如果我们要为一台微波炉编写一个用户界面,只需要一点儿工夫我们便能设计出十几个按钮以及一系列能精确描述微波炉在各种情况下的表现的规则。 再比如,假设我们要编写一个电子邮件客户端。这样

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 7511

图像分类数据集(Fashion-MNIST)

%matplotlib inline import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2l d2l.use_svg_display() 读取数据集 通过框架中的内置函数将Fashion-MNIST数据集下载并读取到内存中 # 通过ToTensor实例将图像数据从PIL类型变换成32位浮点...

AlanxZhang的博客 2154

《动手学深度学习》笔记1.6——多层感知机→代码实现

李沐老师:多层感知机,对比softmax,从代码层面没有太多区别,只是多了一点点(隐藏层); 这也是为啥大家都喜欢用mlp而不是svm; 再怎么改模型,调的东西并不多;

科研汪小陈的主页:https://chensuzeyu.github.io 2660

2025三掌柜赠书活动第一期:动手学深度学习(PyTorch版)

人工智能是引领未来发展的战略性技术,是新一轮科技革命和产业变革的重要驱动力量。深度学习作为机器学习的一个分支,近年来在图像识别、自然语言处理、游戏智能等领域取得了显著的进展。PyTorch,作为一个开源的深度学习框架,因其动态计算图、易用性和灵活性而受到广泛欢迎。那么本文就来详细介绍如何使用PyTorch进行深度学习,包括基础概念、核心API和实际代码示例,旨在帮助大家快速上手深度学习项目。关于深度学习的概念,其实深度学习通过构建多层神经网络模拟人脑处理信息的方式,以识别模式和特征。

全沾软贱开发攻城狮 1万+

【02】【VisionMaster V4.0.0 】安装教程—— 授权文件更新报错:应用程序与本地LM通讯出错(怀疑电脑加密 和 上网受限 造成的 )

本文详细介绍了海康VisionMaster 4.0试用版的安装流程及常见问题解决方案。主要内容包括:1)从官网下载基础安装包、试用补丁和授权文件;2)按顺序安装主程序、补丁和授权文件;3)针对授权失败问题提供两种解决方案(更换未加密电脑或使用加密狗);4)说明试用版的功能限制(30天试用期、2个流程限制等)。文章特别指出电脑加密可能导致授权失败,并提供了安装报错时的处理建议,为初次使用者提供了完整的安装指导。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 7145

免费获取船舶轨迹数据?手把手教你用Python处理中国海洋卫星AIS数据

本文详细介绍了如何免费获取中国海洋卫星AIS数据,并使用Python进行船舶轨迹数据的处理与分析。从数据源评估到自动化处理流水线,再到高级分析与可视化技巧,手把手教你避开常见问题,实现高效数据处理。特别适合航运数据分析、物流优化和海上安全研究等领域的研究者和开发者。

weixin_42616115的博客 320

【李沐】动手学深度学习 学习笔记

你好!这是【李沐】动手学深度学习v2-基于pytorch版本的学习笔记教材源代码安装教程(安装pytorch不要用pip,改成conda,pip太慢了,下载不下来)个人推荐学习学习笔记本节代码文件在源代码文件的chapter_deep-learning-computation/custom-layer.ipynb中不带参数的层下面的CenteredLayer类要从其输入中减去均值。要构建它,我们只需继承基础层类并实现前向传播功能。让我们向该层提供一些数据,验证它是否能按预期工作。带参数的层。

chenxiaowai_的博客 3万+

Windows系统中 Xmanager 6 企业版下载安装激活教程

Xmanager 6 企业版安装激活教程 1.Xmanager 6 下载网址:https://yunpan.360.cn/surl_yrJrWq3GmjN 2. 双击 Xmanager-6.0.0169r 安装 3. 点击运行按钮 4. 点击下一步 5. 选择我接受许可证协议中的条款(A), 点击下一步。 6. 输入用户名:byg,公司名称:microsoft,序...

mry6的博客 9872

李沐老师的PyTorch 版《动手学深度学习》PDF 开源了(全中文,支持 Jupyter 运行)

李沐,亚马逊 AI 科学家,也是我在Amazon实习时的大BOSS。由李沐、Aston Zhang 等人合力打造的《动手学深度学习》正式上线,免费供大家阅读。这是一本面向中文读者的能运行、可讨论的深度学习教科书 李沐的这本《动手学深度学习》也是使用 MXNet 框架写成的。但是很多入坑机器学习的萌新们使用的却是 PyTorch。如果有教材对应的 PyTorch 实现代码就更好了~ 撒花,最...

Machine Learning with Tutors 2万+

AI办公Agent技术:文档与表格智能处理实践

办公自动化技术正从规则驱动转向语义理解,大语言模型(LLM)为办公Agent赋予了智能决策能力。这类系统通过五层架构整合自然语言处理、工具API调用和任务规划引擎,能自动完成文档分类、表格分析等高重复性工作。关键技术包括基于TF-IDF和BERT的特征提取、Excel公式自动生成等,在财务报告、法律审查等场景可实现90%以上的效率提升。随着多模态能力和领域专业化发展,办公Agent正在重塑企业文档处理流程,成为数字化转型的核心基础设施。

weixin_30263277的博客 519

从 on_event 到 lifespan:FastAPI 生命周期管理的旧方法与新方法对比与迁移

从 on_event 到 lifespan:FastAPI 生命周期管理的旧方法与新方法对比与迁移

XiaoqiangClub的博客 1021

动手学深度学习(李沐)的pytorch版本(包含代码和PDF版本)

动手学深度学习(李沐)的pytorch版本(包含代码和PDF版本),《动手学深度学习》PyTorch版本TendorFlow版本(内有所有代码和PDF版下载地址)

weixin_64338372的博客 2万+

多思计组实验实验三、存储器读写实验

实验三、存储器读写实验

qq_53089329的博客 3651

动手学深度学习PyTorch版-task1

课程介绍(引用自伯禹平台:https://www.boyuai.com/elites/course/cZu18YmweLv10OeV) 本课程面向希望更多的通过代码实践去学习深度学习原理的同学和在职人士。 《动手学深度学习》是2019年国内最受欢迎的人工智能学习教材之一,伯禹教育携手上海交通大学团队,以此书的知识架构为基础,沿用了其中的原理讲解文档,并将代码框架由MXNET迁移至PyTorch...

zahidzqj的博客 3192

GraphRAG深度解析:架构设计与实战案例

生成模块结合检索到的图数据和用户输入的查询,生成高质量的文本输出。通过结合图数据库中的知识,模型可以更准确地回答用户的问题,提供更优质的客户服务。通过分析用户的行为和偏好,结合图数据库中的知识,模型可以为用户提供个性化的推荐。:通过图数据库存储和检索结构化的知识,为语言模型提供丰富的背景信息,提升生成内容的质量和准确性。:选择合适的图数据库,如Neo4j、OrientDB等,以支持高效的图数据存储和检索。:利用图数据库的高效检索能力,快速找到与用户查询最相关的图元素,提高系统的响应速度。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1589

MATLAB 基于深度学习的步态识别算法仿真

步态识别是一种通过分析人体行走方式来识别身份的技术。基于深度学习的步态识别算法利用卷积神经网络 (CNN) 提取步态特征,并通过分类器进行身份识别。基于深度学习的步态识别算法是实现身份识别的重要手段,具有广泛的应用前景。MATLAB 提供了丰富的工具和函数,可以方便地进行算法仿真和性能评估。

走向CTO的路上... 518

《动手学深度学习》Pytorch版开源!

机器之心报道项目作者:ShusenTang参与:思想要入门最前沿的深度学习,想要玩最常见的深度学习框架?那就用 PyTorch 版的《动手学深度学习》吧,零基础也能入门 DL。李沐等人的...

算法channel 2114

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

李沐《动手学深度学习》多层感知机 模型概念和代码实现

隐藏层数目和隐藏单元数视为超参数,一般选择2的若干次幂为层的宽度, 因为内存在硬件中的分配和寻址方式,这么做往往可以在计算上更高效。当输入为0时,sigmoid函数的导数达到最大值0.25,输入在任一方向越远离0点时,导数越接近0。导入相关库,设置批量大小为256,调用load_data_fashion_mnist函数获取数据集。当输入接近0时,tanh函数的导数接近最大值1,输入在任一方向越远离0点时,导数越接近0。多层感知机架构:将许多全连接层堆叠在一起,每一层都输出到上面的层,直到生成最后的输出。

weixin_47748259的博客 1901

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【深度学习】:《PyTorch入门到项目实战》基础篇1-6:多层感知机(含代码)

上一章中介绍了如何使用softmax回归来进行多分类问题,对于一些基本线性模型基本介绍完毕,下面正式进入深度神经网络的学习。先介绍一个比较基础的模型,多层感知机,它是神经网络的最基础模型。首先我们来看看感知机

阿里云专家博主、数据科学领域优质创作者、统计er在读 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

PyTorch版《动手学深度学习》开源了,最美DL书遇上最赞DL框架

机器之心报道项目作者:ShusenTang参与:思想要入门最前沿的深度学习,想要玩最常见的深度学习框架?那就用 PyTorch 版的《动手学深度学习》吧,零基础也能入门 DL。李沐等人的开源中文书《动手学深度学习》现在有 PyTorch 版实现了。不论是原书中的示例代码,还是实战项目,原来的 MXNet 都可以无缝转化到 PyTorch 代码。项目作者在保持原书内容基本不变的情况下,将 MXNet 代码都转换为了 PyTorch,想要学习 DL 和 PyTorch 的小伙伴们可以试试啊。项目地址:https

Python学习与数据挖掘 832

【动手学深度学习PyTorch版】4 多层感知机 + 代码实现

多层感知机 + 代码实现

水w的博客 6378
上一篇: 动手学深度学习 代码(二):线性回归
下一篇: 动手学深度学习 第四章 多层感知机 练习(Pytorch版)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值