实战人工智能框架PyTorch的模型训练

Pytorch基本操作(10)——完整的模型训练、验证套路 前言 在学习李沐在B站发布的《动手学深度学习》PyTorch版本教学视频中发现在操作使用PyTorch方面有许多地方看不懂,往往只是“动手”了,没有动脑。所以打算趁着寒假的时间好好恶补、整理一下PyTorch的操作,以便跟上课程。 学习资源: B站up主:我是土堆的视频:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】 PyTorch中文手册:(pytorch handbook) Datawhale开源内容:深入浅出PyTorch(thorough-pytorch) import torc 阅读详情

我们关心网络结构和数据,定义损失函数,定义优化函数等。

具体步骤如下:

第一步:图像封装为向量后,将输入input向前传播,进行运算后得到输出output

第二步:将output再输入loss函数,计算loss值(是个标量)-损失函数用来得到新权重

第三步:将梯度反向传播到每个参数(优化函数):主要指标是 学习速率?  x 梯度向量g

第四步:利用下面公式进行权重更新

新权重w =  旧权重w  +  学习速率?  x 梯度向量g

封装好了数据后,就可以作为模型的输入了。所以要先导入你的模型。在PyTorch中已经默认为大家准备了一些常用的网络结构,比如分类中的VGG,ResNet,DenseNet等等,可以用torchvision.models模块来导入。比如用torchvision.models.resnet18(pretrained=True)来导入ResNet18网络,同时指明导入的是已经预训练过的网络。因为预训练网络一般是在1000类的ImageNet数据集上进行的,所以要迁移到你自己数据集的2分类,需要替换最后的全连接层为你所需要的输出。因此下面这三行代码进行的就是用models模块导入resnet18网络,然后获取全连接层的输入channel个数,用这个channel个数和你要做的分类类别数(这里是2)替换原来模型中的全连接层。这样网络结果也准备好。

model = models.resnet18(pretrained=True)
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 2)

但是只有网络结构和数据还不足以让代码运行起来,还需要定义损失函数。在PyTorch中采用torch.nn模块来定义网络的所有层,比如卷积、降采样、损失层等等,这里采用交叉熵函数,因此可以这样定义:

criterion = nn.CrossEntropyLoss()
然后你还需要定义优化函数,比如最常见的随机梯度下降,在PyTorch中是通过torch.optim模块来实现的。另外这里虽然写的是SGD,但是因为有momentum,所以是Adam的优化方式。这个类的输入包括需要优化的参数:model.parameters(),学习率,还有Adam相关的momentum参数。现在很多优化方式的默认定义形式就是这样的。

optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

然后一般还会定义学习率的变化策略,这里采用的是torch.optim.lr_scheduler模块的StepLR类,表示每隔step_size个epoch就将学习率降为原来的gamma倍。

代码实现如下:

from __future__ import print_function, division

1.导入算法的包

import torch

import torch.nn as nn

import torch.optim as optim

from torch.optim import lr_scheduler

from torch.autograd import Variable

import torchvision

from torchvision import datasets, models, transforms

import time

import os

2.训练模型

def train_model(model, criterion, optimizer, scheduler, num_epochs=25):

    since = time.time()

 

    best_model_wts = model.state_dict()

    best_acc = 0.0

 

    for epoch in range(num_epochs):

        print('Epoch {}/{}'.format(epoch, num_epochs - 1))

        print('-' * 10)

 

        # Each epoch has a training and validation phase

        for phase in ['train', 'val']:

            if phase == 'train':

                scheduler.step()

                model.train(True)  # Set model to training mode

            else:

                model.train(False)  # Set model to evaluate mode

 

            running_loss = 0.0

            running_corrects = 0.0

 

            # Iterate over data.

            for data in dataloders[phase]:

                # get the inputs

                inputs, labels = data

 

                # wrap them in Variable

                if use_gpu:

                    inputs = Variable(inputs.cuda())

                    labels = Variable(labels.cuda())

                else:

                    inputs, labels = Variable(inputs), Variable(labels)

 

                # zero the parameter gradients

                optimizer.zero_grad()

 

                # forward

                outputs = model(inputs)

                _, preds = torch.max(outputs.data, 1)

                loss = criterion(outputs, labels)

 

                # backward + optimize only if in training phase

                if phase == 'train':

                    loss.backward()

                    optimizer.step()

 

                # statistics

                running_loss += loss.data[0]

                running_corrects += torch.sum(preds == labels.data).to(torch.float32)

 

            epoch_loss = running_loss / dataset_sizes[phase]

            epoch_acc = running_corrects / dataset_sizes[phase]

 

            print('{} Loss: {:.4f} Acc: {:.4f}'.format(

                phase, epoch_loss, epoch_acc))

 

            # deep copy the model

            if phase == 'val' and epoch_acc > best_acc:

                best_acc = epoch_acc

                best_model_wts = model.state_dict()

 

    time_elapsed = time.time() - since

    print('Training complete in {:.0f}m {:.0f}s'.format(

        time_elapsed // 60, time_elapsed % 60))

    print('Best val Acc: {:4f}'.format(best_acc))

 

    # load best model weights

    model.load_state_dict(best_model_wts)

    return model

 

if __name__ == '__main__':

 

    # data_transform, pay attention that the input of Normalize() is Tensor and the input of RandomResizedCrop() or RandomHorizontalFlip() is PIL Image

    data_transforms = {

        'train': transforms.Compose([

            transforms.RandomSizedCrop(224),

            transforms.RandomHorizontalFlip(),

            transforms.ToTensor(),

            transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])

        ]),

        'val': transforms.Compose([

            transforms.Scale(256),

            transforms.CenterCrop(224),

            transforms.ToTensor(),

            transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])

        ]),

    }

转换为元组image_datasets

    # your image data file

    data_dir = '/data'

    image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x),

                                              data_transforms[x]) for x in ['train', 'val']}

    # wrap your data and label into Tensor

把image_datasets元组转换为Tensor

    dataloders = {x: torch.utils.data.DataLoader(image_datasets[x],

                                                 batch_size=4,

                                                 shuffle=True,

                                                 num_workers=4) for x in ['train', 'val']}

 

    dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}

 

    # use gpu or not

    use_gpu = torch.cuda.is_available()

 

    # get model and replace the original fc layer with your fc layer

    model_ft = models.resnet18(pretrained=True)

    num_ftrs = model_ft.fc.in_features

    model_ft.fc = nn.Linear(num_ftrs, 2)

 

    if use_gpu:

        model_ft = model_ft.cuda()

 

    # define loss function

    criterion = nn.CrossEntropyLoss()

 

    # Observe that all parameters are being optimized

    optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9)

 

    # Decay LR by a factor of 0.1 every 7 epochs

    exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)

 

    model_ft = train_model(model=model_ft,

                           criterion=criterion,

                           optimizer=optimizer_ft,

                           scheduler=exp_lr_scheduler,

                           num_epochs=25)

人工智能学习框架:深入解析与实战指南 随着人工智能(AI)技术的飞速发展,深度学习、强化学习和自然语言处理等领域的应用愈加广泛。掌握人工智能学习框架(如 TensorFlow、PyTorch、Keras 等)已成为开发智能系统、研究前沿技术的必备技能。人工智能学习框架是一种高效管理机器学习和深度学习任务的软件工具,提供了数据处理、建模、训练、评估和部署等功能,帮助开发者更轻松地构建智能系统。本指南将全面介绍人工智能主流学习框架的特点、安装方法、核心功能,以及通过实践案例展示如何使用这些框架进行 AI 模型开发、训练与优化。 阅读详情

相关推荐

AI人工智能中的PyTorch模型安全防护

如果模型被“欺骗”,后果会怎样?本文聚焦PyTorch(全球最流行的AI框架之一)的模型安全防护,覆盖从攻击原理到防御技术的全流程,帮助开发者理解威胁、掌握防护工具。本文按“威胁认知→原理解析→实战防护→未来趋势”展开:先通过生活故事理解攻击场景,再拆解核心概念与数学模型,接着用PyTorch代码演示防护技术,最后探讨前沿挑战。对抗样本:人为构造的“带陷阱的输入数据”(如一张被微小修改的图片),能让模型输出错误结果,但人类肉眼无法分辨。后门攻击。

AI智能探索者的博客 727

使用Pytorch进行完整的模型训练_cifar10数据集

使用pytorch实现了CIFAR10模型,跟着小土堆学习完了pytorch的教学视频之后,实现了模型训练套路,为了方便以后的个人查阅,所以写此博文记录好模型训练的步骤以及总结个人实现过程中的一些笔记。

rain_lin2000的博客 2983

RTX 4090遇上AI框架:TensorFlow/PyTorch优化实战,训练速度翻了多少倍?

如果你是中小团队、个人研究者,或需要在本地训练7B以下LLM、中等规模CV模型,4090绝对是性价比之王——优化后性能接近A100的70%,价格却只有1/5。至于框架选择:做CV任务用TensorFlow更省心(优化步骤少),做NLP/LLM用PyTorch更高效(对Transformer优化更到位)。但别纠结“二选一”,实际项目中完全可以用PyTorch训练,转ONNX后用TensorFlow部署,充分发挥两者优势。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1003

PyTorch基础完整模型训练套路(土堆老师版)详细注释及讲解!小白学习必看!

PyTorch基础完整模型训练套路(土堆老师版)详细注释及讲解

weixin_51108479的博客 2186

AI训练师成长指南:从入门到实战

机器学习作为人工智能的核心技术,通过算法让计算机从数据中学习规律。其核心原理涉及特征工程、模型训练与评估等关键环节,在图像识别、自然语言处理等领域具有广泛应用。随着AI产业化加速,AI训练师成为热门职业,需要掌握Python编程、数据处理和模型调优等技能。本文以Kaggle竞赛和医疗影像处理为案例,详解从数据清洗到模型部署的全流程实践,特别适合希望转型AI领域的开发者参考。内容涵盖Scikit-learn、PyTorch等主流工具的使用技巧,以及学习率调整、早停策略等深度学习调参方法。

weixin_29048775的博客 322

37丨深度学习:使用PyTorch训练模型

使用PyTorch训练模型。

AIGC 968

探索未来:深入人工智能学习框架的奥秘与实践

而在这一切的背后,是一系列强大的学习框架,它们为AI的发展提供了必要的工具和平台。通过本文的深入探讨,我们不仅理解了不同AI学习框架的特点和优势,还通过实际代码示例体验了如何使用这些框架构建机器学习模型。选择正确的框架对于项目的成功至关重要,而理解这些框架的工作原理和使用场景,将使你在AI领域更加游刃有余。例如,你可以尝试增加更多的卷积层、改变卷积核的大小或数量,或者使用不同的优化器和学习率。正则化是一种防止过拟合的技术,通过在损失函数中添加额外的惩罚项来限制模型的复杂度。

来自想要赚大钱的小周同学 5475

人工智能(Pytorch)搭建模型4-Pytorch框架下模型训练效果的提升方法

大家好,我是微学AI,今天给大家介绍一下人工智能中(Pytorch)框架下模型训练效果的提升方法。随着深度学习技术的快速发展,越来越多的应用场景需要建立复杂的、高精度的深度学习模型。为了实现这些目标,必须采用一系列复杂的技术来提高训练效果。

微学AI的博客 1088

AI 实战篇:从零训练你的大模型 ——MiniMind 全流程实战

作为一名AI从业者,亲测后发现它不仅是一个可落地的项目,更是入门大模型训练的绝佳教程。今天就带大家手把手体验这个“大道至简”的实战过程。

python1234567_的博客 972

AI人工智能时代,PyTorch如何助力模型训练

随着人工智能技术的飞速发展,深度学习模型的训练变得越来越复杂和重要。PyTorch作为一个开源的深度学习框架,具有动态图、易于使用等优点,在学术界和工业界都得到了广泛的应用。本文的目的是详细介绍PyTorch在模型训练中的各个方面,包括其核心概念、算法实现、实际应用等,帮助读者掌握使用PyTorch进行高效模型训练的方法。本文的范围涵盖了从基础的概念讲解到实际项目的案例分析,适合不同层次的读者深入学习。

AI大模型应用之禅 1074

AI人工智能大模型情感分析对抗训练的技术挑战与解决方案

情感分析是自然语言处理(NLP)的核心任务之一,广泛应用于舆情监控、产品评价、客服系统等领域。随着大语言模型(LLM)的兴起,情感分析的准确率显著提升,但模型的脆弱性也随之暴露——微小的对抗扰动就可能导致完全错误的分类结果。本文旨在系统分析这些挑战,并提供切实可行的解决方案。本文将首先介绍情感分析和对抗训练的基本概念,然后深入分析技术挑战,接着提出多层次解决方案,最后通过实战案例展示具体实现。情感分析(Sentiment Analysis):通过计算技术识别、提取和量化文本中的主观情感信息。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 724

人工智能入门:PyTorch 与 OpenCV 结合的深度学习实战

本文介绍了如何结合PyTorch和OpenCV实现图像分类任务。PyTorch以其动态图机制、自动求导和丰富的API在深度学习中表现出色,而OpenCV则以其强大的图像处理功能和高效性能在计算机视觉领域广泛应用。通过一个具体的实战项目,文章详细展示了从环境准备、数据预处理、模型定义、训练到评估和预测的完整流程。项目使用MNIST数据集,通过OpenCV进行图像读取和预处理,利用PyTorch构建和训练卷积神经网络(CNN),并最终评估模型性能。文章还提供了完整的代码示例,帮助读者理解如何将PyTorch和O

2501_91624122的博客 1044

神领物流-day01-项目概述

公司从2019年开始业务快速扩张,网点数量从138家扩展至540家,车辆从170台增长到800台。同时,原有的系统非常简单,比如车辆的调度靠人工操作、所有的货物分拣依靠人员,核心订单数据手动录入,人效非常低。随着业务不断演进,技术的不断提升,原有运输管理系统已无法满足现有快速扩展下的业务需求,但针对现有系统评估后发现,系统升级成本远高于重新研发。因此,公司决定基于现有业务体系进行重新构建,打造一套新的TMS运输系统,直接更替原有系统。

心飞为你飞 2255

【开源AI框架Python实践】:掌握5大主流框架核心技巧,快速上手AI开发

掌握开源AI框架Python实践核心技巧,快速构建AI应用。涵盖TensorFlow、PyTorch等5大主流框架的安装、模型训练与部署方法,适用于图像识别、自然语言处理等场景。高效、灵活、易扩展,助力开发者快速上手AI开发,值得收藏。

SimSolve的博客 910

stm32H743基于CubeMX配置为双ADC多通道DMA规则采样

stm32H743的ADC支持的最大频率为36MHz,有相关资料上说是可以超频,具体技术细节不多讨论。 需求: 使用stm32H743的ADC采集5路ovrc

xtqbp的博客 4363

RuoYi项目适配达梦数据库(二)

RuoYi项目,代码生成模块的达梦数据库适配。

邢慧鹏的博客 1万+

如何使用Unified AI Framework的Stateful API实现多框架模型训练:完整指南

Ivy作为Unified AI Framework,提供了强大的Stateful API来简化跨框架模型训练流程。本文将详细介绍Ivy状态管理机制的核心原理、使用方法以及如何利用这一机制实现TensorFlow、PyTorch等多框架模型的统一训练管理。 ## 📌 Stateful API核心优势:跨框架统一状态管理 Ivy的Stateful API解决了深度学习框架碎片化带来的训练流程不一

gitblog_00793的博客 420

AGV避坑指南:海康控制系统与Modbus设备对接的那些‘坑’

本文深入解析海康AGV控制系统与Modbus设备对接中的常见问题及解决方案,涵盖通信协议对接、信号干扰、硬件层问题和软件优化策略。通过真实案例和实用技巧,帮助工程师规避典型陷阱,提升系统稳定性和效率。

l3m4n的博客 741

终于有人从零到精通开始教大模型开发了!基于PyTorch与ChatGLM

大模型是深度学习自然语言处理皇冠上的一颗明珠,也是当前AI 和 NLP 研究与产业中最重要的方向之一。本文使用 PyTorch2.0作为学习大模型的基本框架,以 ChatGLM 为例详细讲解大横型的基本理论、算法、程序实现、应用实战以及微调技术,为读者揭示大模型开发技术。

优快云_224022的博客 360

minist手写数字的识别代码复现(pytorch 版本)

电脑系统:Windows 10语言环境:Python 3.8.18编译器:jupyter notebook深度学习环境:torch == 1.13.1+cu116显卡及显存: Tesla V100-PCIE-32GB卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种 具有局部连接、权重共享等特性的深层前馈神经网络. 目前的卷积神经网络一般是由卷积层、汇聚层和全连接层交叉堆叠而成的 前馈神经网络。

2202_75521293的博客 2620

低成本实现webhook接收端[python]

Webook本质上也是API,只不过是反向调用,即前端不主动发送请求,完全由后端推送。简单来说,Webhook是一个接受HTTP POST或是GET,PUT,DELETE的URL,一个实现了Webhook的API提供商就是在当事件发生的时候会向配置的URL发送信息,与请求-响应式不同,使用Webhook可以实时接收到变化。Ps:Webhook可能会发出大量的请求,确保接受的URL不被泄露或者应用能及时处理这些请求。

锡城小凯的博客 1万+

从入门到实战:PyTorch深度学习框架全解析

在深度学习的广阔领域中,PyTorch 以其独特的魅力和强大的功能,成为了众多开发者和研究者的首选框架。

2302_80643506的博客 1667

虚幻商城 蓝图汇总

虚幻引擎是一个非常强大和灵活的游戏开发工具,拥有众多的蓝图可以帮助我们更高效地工作。

一碗清深的博客 1507

大模型时代框架指南:训练、微调、推理、部署的超常用法!

动态图优先的深度学习框架,以灵活性和研究友好性著称。动态计算图(即时执行)。张量计算、自动求导、分布式训练。与Python深度集成,调试便捷。支持GPU加速和混合精度训练。生产部署需依赖TorchScript/ONNX。训练速度较静态图框架(如TensorFlow)略慢。:⭐️⭐️⭐️⭐️⭐️(适合快速原型开发)。:学术研究、模型实验、小规模训练。。:与Hugging Face、ONNX、TensorBoard集成,社区庞大。:高性能AI推理服务器,支持多框架、多硬件部署。动态批处理、并发模型执行。

2401_84204413的博客 1720

微信小程序启用蓝牙设备特征值变化时的notify功能

注意:这里的serviceUUID、notifyCharacteristicUUID 我会在后面写入数据时做重点说明。isNotifyBLECharacteristic:false, //是否启用蓝牙设备服务特征 notify。二、启用蓝牙设备特征值变化时的notify功能。下一篇 将继续介绍 微信小程序蓝牙设备写入数据。

wsk198726的专栏 1172

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

如何低成本训练自己的AI

在人工智能(AI)迅猛发展的今天,越来越多的个人开发者、学生和创业者希望掌握AI技术,并尝试训练属于自己的模型。然而,许多人误以为AI开发必须依赖昂贵的硬件、庞大的预算或深厚的学术背景。他没有购买任何设备,直接在Google Colab中打开一个Keras教程笔记本(Notebook),上传了几百张公开的猫狗图像,运行预设代码,不到一小时就训练出准确率达85%的模型。目前主流的开源框架包括 **TensorFlow、PyTorch 和 Keras**,它们各有优势,适用于不同阶段的学习者和项目需求。

chtybojffq的博客 594

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 一流项目历练大专家,核心技术挑战新高度
下一篇: 极大使然估计对比最小二乘法思想
常耀斌
常耀斌 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄8年 1812粉丝 611原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值