当前位置: 首页 > news >正文

Sequential 损失函数 反向传播 优化器 模型的使用修改保存加载

Sequential & example1

感觉和compose()好像

串联起来 方便调用

def __init()__(self):super(Net,self).__init__()self.model1 = Sequential(Conv2d(3,32,5,padding=2),MaxPool2d(2),Conv2d(32,32,5,padding=2),MaxPool2d(2),Conv2d(32,64,5,padding=2),MaxPool2d(2),Flatten(),Linear(1024,64),Linear(64,10))def forward(self,x):x = self.model1(x)return x

可以输出graph查看:

writer = SummaryWriter('../logs')
writer.add_graph(net,input)
writer.close()

终于明白好多论文上的图是怎么来的了 好权威啊

在这里插入图片描述

完整版代码:

code:

import torch
from torch import nn
from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear
from torch.utils.tensorboard import SummaryWriterclass Net(nn.Module):def __init__(self):super(Net,self).__init__()self.model1 = Sequential(Conv2d(3, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 64, 5, padding=2),MaxPool2d(2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self,x):x = self.model1(x)return xnet = Net()
print(net)
input = torch.ones((64,3,32,32))
output = net(input)
print(output.shape)writer = SummaryWriter('../logs')
writer.add_graph(net,input)
writer.close()
损失函数 反向传播

损失函数:

import torch
from torch import float32
from torch.nn import L1Loss
from torch import nninputs = torch.tensor([1,2,3],dtype=float32)
targets = torch.tensor([1,2,5],dtype=float32)inputs = torch.reshape(inputs,(1,1,1,3))
targets = torch.reshape(targets,(1,1,1,3))loss = L1Loss()
result = loss(inputs,targets)
print(result)loss = nn.MSELoss()
result = loss(inputs,targets)
print(result)x = torch.tensor([0.1,0.2,0.3])
y = torch.tensor([1])
x = torch.reshape(x,(1,3))
loss_cross = nn.CrossEntropyLoss()
result_cross = loss_cross(x,y)
print(result_cross)

损失函数例子+反向传播(更新参数)

import torch
from torch import nn
from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from torchvision.datasets import ImageFolder#数据预处理
transform = transforms.Compose([transforms.Resize((32,32)),transforms.ToTensor(),transforms.Normalize(mean = [0.5,0.5,0.5],std = [0.5,0.5,0.5])
])#加载数据集
folder_path = '../images'
dataset = ImageFolder(folder_path,transform=transform)
dataloader = DataLoader(dataset,batch_size=1)class Net(nn.Module):def __init__(self):super(Net,self).__init__()self.model1 = Sequential(Conv2d(3, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 64, 5, padding=2),MaxPool2d(2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self,x):x = self.model1(x)return xnet = Net()
loss = nn.CrossEntropyLoss()for data in dataloader:img,label = dataprint(img.shape)output = net(img)result_loss = loss(output,label)print(result_loss)result_loss.backward()
优化器

随机梯度下降SGD

import torch
from torch import nn
from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from torchvision.datasets import ImageFolder#数据预处理
transform = transforms.Compose([transforms.Resize((32,32)),transforms.ToTensor(),transforms.Normalize(mean = [0.5,0.5,0.5],std = [0.5,0.5,0.5])
])#加载数据集
folder_path = '../images'
dataset = ImageFolder(folder_path,transform=transform)
dataloader = DataLoader(dataset,batch_size=1)class Net(nn.Module):def __init__(self):super(Net,self).__init__()self.model1 = Sequential(Conv2d(3, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 64, 5, padding=2),MaxPool2d(2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self,x):x = self.model1(x)return xnet = Net()
loss = nn.CrossEntropyLoss()
optim = torch.optim.SGD(net.parameters(),lr=0.01)
for epoch in range(10):running_loss = 0.0for data in dataloader:img, label = dataoutput = net(img)result_loss = loss(output, label)optim.zero_grad()result_loss.backward()optim.step()#每次训练数据的损失和running_loss += result_lossprint(running_loss)

在这里插入图片描述

现有模型的使用和修改

maybe可以称为迁移学习???

example net: vgg16

#不预训练
vgg16_false = torchvision.models.vgg16(pretrained=False)
#预训练
vgg16_true = torchvision.models.vgg16(pretrained=True)print(vgg16_true)#添加一个模块 在vgg16的classifier里面加一个
vgg16_true.classifier.add_module('add_linear',nn.Linear(1000,10))
#修改模块中的数据
vgg16_false.classifier[6] = nn.Linear(4096,10)
模型保存和加载
  1. 现有模型:vgg16

    vgg16 = torchvision.models.vgg16(pretrained=False)
    
    #保存:模型结构+参数
    torch.save(vgg16,"vgg16_method1.pth")
    #加载:
    model = torch.load("vgg16_method1.pth")
    
    #保存:模型参数(官推)
    #保存成字典模式
    torch.save(vgg16.state_dict(),"vgg16_method2.pth")
    #加载
    vgg16 = torchvision.models.vgg16(pretrained=False)
    vgg16.load_state_dict(torch.load("vgg16_method2.pth"))
    
  2. 自定义模型

    #保存
    class Net(nn.Module):......
    net = Net()
    torch.save(net,"net.pth")
    
    #加载
    class Net(nn.Module):......
    model = torch.load("net.pth")
    
http://www.dtcms.com/a/290479.html

相关文章:

  • 20250721
  • A316-1926-V1 USB多路高清音频解码器模组技术解析
  • 番茄工作法
  • 在幸狐RV1106板子上用gcc14.2本地编译安装mysql-8.0.42数据库
  • 【高等数学】第五章 定积分——第一节 定积分的概念与性质
  • C++学习<2>--引用、函数、内存分区
  • 数据结构-哈希表(一)哈希函数、哈希表介绍、优缺点
  • 计算机发展史:个人计算机时代的多元融合与变革
  • 【ASP.NET Core】ASP.NET Core中Redis分布式缓存的应用
  • 进程资源分配的安全性判断与安全序列
  • 14.6 《3步实战LLaMA2-7B指令微调:Hugging Face生态+LoRA技术,MT-Bench得分从5.1直升7.3》
  • 【烧脑算法】拓扑排序:从“依赖”到“序列”,理解题目中的先后逻辑
  • 通俗易懂卷积神经网络(CNN)指南
  • [深度学习] 大模型学习3上-模型训练与微调
  • Pytorch02:深度学习基础示例——猫狗识别
  • 无人机避障雷达模式运行方式
  • 【服务器】服务器调试及仿真软件安装调试心得
  • 《RISC-V 导论:设计与实践》开源课件(附下载链接)
  • 第三章自定义检视面板_创建自定义编辑器类_如何自定义预览窗口(本章进度5/9)
  • MySQL分布式架构深度实践:从分库分表到云原生集成
  • 牛客周赛 Round 101--幂中幂plus
  • 【计算机组成原理】浮点数表示与运算
  • 开尔文封装的 SiC MOSFET 器件可靠性实例研究
  • Java学习----NIO模型
  • 朝歌智慧盘古信息:以IMS MOM V6重构国产化智能终端新生态
  • 20250720问答课题-基于BERT与混合检索问答系统代码解读
  • 论文笔记:EDITING MODELS WITH TASK ARITHMETIC
  • 【论文阅读】Nonparametric clustering of RNA-sequencing data
  • 【力扣】第42题:接雨水
  • Smart Tomcat