机器学习的一般框架

news2024/11/29 13:36:29

数据科学开发工具

anaconda:管理开发环境
jupyter:编写整个数据处理流程
pycharm:远程编写调试代码
ipdb:pycharm dubug时偶尔出现一些bug,可以用结合ipdb补充解决

数据开发六步

data

数据的获得、清洗、特征工程等预处理在这一步做,最后有一点是共同的,就是把准备好的数据进行“批量化”,因为训练模型时必须把数据批量化,最好的方法是生成数据迭代器,供后面训练时使用。

# data
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

model

模型的定义、初始化。

model = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))
model.apply(init_weights)

loss

定义损失函数,本质上是两个向量之前的距离,度量 y , y ^ y,\hat y y,y^ 之间的差距,可以从几何角度、熵的角度考虑,大部分可以证明是与概率极大似然等价的。

# loss
loss = nn.CrossEntropyLoss(reduction='none')

optimization

优化算法

optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

train

这一步综合了前面的步骤,有几个要点:
1 。 1^。 1 固定套路:两层循环,外层循环控制整个训练集使用的轮数,内层循环控制batch;
2 。 2^。 2 为了便于调试超参数,需要可视化训练过程,在训练过程中需要计算train loss、train acc、test acc,并以num_epochs作为横坐标,可视化整个流程。具体图例如下:
在这里插入图片描述
3 。 3^。 3 这里可视化训练过程使用了Animator、Accumulator两个类,在另外一篇博客中分析。

num_epochs = 10
    animator = 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):
        # Set the model to training mode
        if isinstance(model, torch.nn.Module):
            model.train()
        # Sum of training loss, sum of training accuracy, no. of examples
        metric = Accumulator(3)
        for X, y in train_iter:
            # Compute gradients and update parameters
            y_hat = model(X)
            l = loss(y_hat, y)
            if isinstance(optimizer, torch.optim.Optimizer):
                # Using PyTorch in-built optimizer & loss criterion
                optimizer.zero_grad()
                l.mean().backward()
                optimizer.step()
            else:
                # Using custom built optimizer & loss criterion
                l.sum().backward()
                optimizer(X.shape[0])
            metric.add(float(l.sum()), d2l.accuracy(y_hat, y), y.numel())
        # get training loss and training accuracy
        train_metrics = metric[0] / metric[2], metric[1] / metric[2]
        test_acc = d2l.evaluate_accuracy(model, 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
    d2l.plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.数据结构(栈 队列 数组 链表)

栈 先进后出 后进先出 队列 先进先出 后进后出

告别2022,寄语2023(论一个普通大学牲的2022年能有多奇葩)

今天是2022年12月31日&#xff08;当然文章发出应该是2023年1月啦&#xff0c;因为我阳了&#xff0c;/(ㄒoㄒ)/~~&#xff09;&#xff0c;原来时间过得这么快&#xff0c;作为中国地质带专的一名普通计算机学牲&#xff0c;也是趁着跨年之际&#xff0c;写一篇属于自己的年末…

Springcloud elasticsearch基础介绍

哈喽~大家好&#xff0c;这篇来看看Springcloud elasticsearch基础介绍。 &#x1f947;个人主页&#xff1a;个人主页​​​​​ &#x1f948; 系列专栏&#xff1a; 【微服务】 &#x1f949;与这篇相关的文章&#xff1a; SpringClou…

jdk-HashMap(1.8)源码学习

hashMap介绍hashMap是我们日常用得最多的一种并发包其中之一了&#xff0c;hashMap是线程不安全的&#xff0c;不安全主要体现在高并发的场景下&#xff0c;1.8是用数组链表红黑树实现&#xff0c;1.8之前用数组链表&#xff0c;可能会导致死锁及数据丢失。红黑树结构&#xff…

牛啊!长这么大还是头一次见24W字的SpringBoot从入门到实战文档

牛啊&#xff01;长这么大还是头一次见24W字的SpringBoot从入门到实战文档&#xff01; 不服还真不行&#xff0c;因为这份文档包含的内容是又全又新&#xff0c;而且还特别高深&#xff0c;从入门到实战的内容全都有&#xff01;&#xff01; 继续往下看&#xff1a; 本文档从…

数据仓库基础知识(维度建模)

一、数据仓库概述1.1 数据仓库定义数据仓库&#xff1a;Data Warehouse&#xff0c;是为企业所决策制定过程&#xff0c;提供所有支持类型的数据集合。用于分析性报告和决策支持。数仓是一个面向主题、集成的、相对稳定、反应历史变化的数据集合&#xff0c;随着大数据技术的发…

[MySQL实战环境部署](超详细版)

MySQL实战环境部署1.部署CentOS1.1部署CenOS虚拟机步骤&#xff08;1&#xff09;基于VirtualBox&#xff08;2&#xff09;下载CentOS1.2环境部署过程2.部署MySQL1.部署CentOS 1.1部署CenOS虚拟机步骤 &#xff08;1&#xff09;基于VirtualBox 下载网址&#xff1a; Virtu…

java初学(仅供自己复习)

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

【电子通信如何建立数字信任】

在网络钓鱼攻击兴起之后&#xff0c;多数企业会定期开展针对员工的钓鱼邮件培训&#xff0c;只不过这样的培训效果不尽人意&#xff0c;在一份针对企业的钓鱼报告中&#xff0c;钓鱼邮件的攻击频率在过去几年中成倍增加&#xff0c;反钓鱼工作组甚至观察到了有记录以来的最剧烈…

react hook 源码完全解读

前言 从React Hooks发布以来&#xff0c;整个社区都以积极的态度去拥抱它、学习它。期间也涌现了很多关于React Hooks 源码解析的文章。本文就以笔者自己的角度来写一篇属于自己的文章吧。希望可以深入浅出、图文并茂的帮助大家对React Hooks的实现原理进行学习与理解。本文将…

基于Apache Hudi 和 Apache Spark Sql 的近实时数仓架构之宽表建设

前言 无论是在 lamda 架构还是 kappa 架构中&#xff0c;实时计算通常是使用 flinkmq 来实现的&#xff0c;而在这些场景中涉及到多张表 join 时&#xff0c;一般我们的使用方法是多张流表 join 如&#xff1a;Regular Join、Interval Join&#xff0c;或者流表 维表的方式 j…

Rust入门(十):项目发布

发布配置 在 Rust 中 发布配置是预定义的、可定制的带有不同选项的配置&#xff0c;他们允许程序员更灵活地控制代码编译的多种选项。 运行 cargo build 发布时采用的 dev 配置&#xff0c;其更适合开发。 运行 cargo build --release 时采用 release 配置&#xff0c;其是更…

Linux常用命令——netstat命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) netstat 查看Linux中网络系统状态信息 补充说明 netstat命令用来打印Linux中网络系统的状态信息&#xff0c;可让你得知整个Linux系统的网络情况。 语法 netstat(选项)选项 -a或--all&#xff1a;显示所有连…

ASP.NET Core 3.1系列(23)——使用AutoMapper实现实体之间的相互转换

1、前言 在之前的博客中&#xff0c;我们通过EFCore的Scaffold-DbContext命令一键生成数据库实体类。但在实际业务中&#xff0c;实体类并不能很好地应对所有情况。例如前端页面只需要展示某张表中部分字段的信息&#xff0c;这时如果直接将实体类集合返回给前端界面&#xff…

【C进阶】指针和数组综合题

家人们欢迎来到小姜的世界&#xff0c;<<点此>>传送门 这里有详细的关于C/C/Linux等的解析课程&#xff0c;家人们赶紧冲鸭&#xff01;&#xff01;&#xff01; 客官&#xff0c;码字不易&#xff0c;来个三连支持一下吧&#xff01;&#xff01;&#xff01;关注…

设计模式-工厂模式(Java)

工厂方法模式 工厂方法模式&#xff1a;Factory Method 事物是发展的&#xff0c;随着事物的不断发展&#xff0c;原有的对象会随着发展不断变化&#xff0c;或增或减。 工厂方法模式提供的一种封装机制&#xff0c;隔离出了那些易变动的对象。这个时候需求的变动不再影响之前…

Mybatis-Plus中的条件查询-DQL编程

条件构造器 | MyBatis-Plus 当需要进行一些复杂的条件查询时&#xff0c;则需使用wrapper&#xff0c;来编辑这些条件 1、条件查询 ①allEq() 即是where后面的等于"",该方法的后的所有参数都会被以"and"的形式进行连接 QueryWrapper qw1 new QueryWra…

Go语言设计与实现 -- 栈空间管理

寄存器 图片来自于面向信仰编程 Go 语言的汇编代码包含 BP 和 SP 两个栈寄存器&#xff0c;它们分别存储了栈的基址指针和栈顶的地址&#xff0c;栈内存与函数调用的关系非常紧密&#xff0c;我们在函数调用一节中曾经介绍过栈区&#xff0c;BP 和 SP 之间的内存就是当前函数的…

数智化转型进入“精装时代”,容联云助力千行百业加速上云用数赋智

随着产业数字化向前推进&#xff0c;企业引入数字技术的需求和热情十分充足&#xff0c;但要把技术下沉到市场中&#xff0c;还存在一个关键的矛盾&#xff1a;交付能力。千行百业&#xff0c;尤其是传统实体经济从业者&#xff0c;对数智化所需要的5G、IOT、AI、大数据、云计算…

canvas入门教学(5)运动小球屏保特效与下雪特效渲染

本节我们来学习两个例子,第一个例子是如下图这样的,全屏各色各样的小球随机运动,碰撞到屏幕边缘再反弹回来的特效,我们一步一步带着大家来学习这个canvas应用。 首先呢,基于上一个教程的例子,我们需要基础的构建圆, 上节教程在这里 并且呢我们要重复的多次的构建半径…