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

大连网站排名优化价格怎样做网贷网站

大连网站排名优化价格,怎样做网贷网站,关于进一步优化,建官方网站的公司应该算是完结啦~再次感谢土堆老师! 模型训练 模型训练基本可以分为以下几个步骤按序执行: 引入数据集-使用dataloader加载数据集-建立模型-设置损失函数-设置优化器-进行训练-训练中计算损失,并使用优化器更新参数-模型测试-模型存储 习惯上会…

应该算是完结啦~再次感谢土堆老师!

模型训练

模型训练基本可以分为以下几个步骤按序执行:
引入数据集-使用dataloader加载数据集-建立模型-设置损失函数-设置优化器-进行训练-训练中计算损失,并使用优化器更新参数-模型测试-模型存储

习惯上会将model和train代码分开写,当然一开始混合写也没啥问题,直接给出一个例程:

# train.py
import torch
from torchvision import transforms, datasets
from torch.utils.data import DataLoader
import torch.nn as nn
from model import *
import timefrom torch.utils.tensorboard import SummaryWriterdata_transforms = transforms.Compose([transforms.ToTensor()
])#引入数据集
train_data = datasets.CIFAR10("./dataset",train=True,transform=data_transforms,download=True)test_data = datasets.CIFAR10("./dataset",train=False,transform=data_transforms,download=True)#加载数据
train_dataloader = DataLoader(train_data,batch_size=64)
test_dataloader = DataLoader(test_data,batch_size=64)start_time = time.time()#建立模型
my_module = MyModule()#设置损失函数
cross_loss = nn.CrossEntropyLoss()#设置优化器
#设置学习率
learning_rate = 1e-2
optimizer = torch.optim.SGD(my_module.parameters(),lr=learning_rate)#进行训练
#设置迭代次数
epoch = 10total_train_steps = 0writer = SummaryWriter("train_logs")for i in range(epoch):print("第{}轮训练".format(i+1))#训练my_module.train() #只对某些层起作用for data in train_dataloader:imgs, targets = dataoutputs = my_module(imgs)#计算损失loss = cross_loss(outputs, targets)#优化模型optimizer.zero_grad()loss.backward()optimizer.step()total_train_steps +=1if total_train_steps % 100 ==0:print("训练次数:{},Loss:{}".format(total_train_steps,loss.item()))writer.add_scalar("train_loss",loss.item(),total_train_steps)#测试,不再梯度下降my_module.eval() #同样只对某些层起作用 total_test_loss = 0# total_test_steps = 0total_accuracy = 0test_data_size = len(test_data)with torch.no_grad():for data in test_dataloader:imgs, targets = dataoutputs = my_module(imgs)loss = cross_loss(outputs,targets)total_test_loss += loss.item()##对于分类任务可以求一下准确的个数,非必须#argmax(1)按行取最大的下标 argmax(0)按列取最大的下标accuracy = (outputs.argmax(1)==targets).sum()total_accuracy += accuracyprint("第{}轮的测试集Loss:{}".format(i+1,total_test_loss))print("测试集准确率:{}".format(total_accuracy/test_data_size))writer.add_scalar("test_loss",total_test_loss,i)end_time = time.time()print("time:{}".format(end_time-start_time))#存储模型if i % 5 == 0:torch.save(my_module,"my_module_{}.pth".format(i))print("模型存储成功")writer.close()

使用GPU加速训练(方式一)

上述写法默认是采用cpu进行训练的,会比较慢,为了加速训练过程,我们需要用GPU进行加速训练。对应有两种方式,推荐方式二(大部分例程也都是采用方式二的)
需要用到GPU加速的主要有如图中的三个部分:
在这里插入图片描述
对应有.cuda()的参数,只要在原始位置后面加上.cuda()就可以,考虑到有些设备没有GPU,建议加上.cuda.is_avaliable的判断。同样给出完整例程:

# train_gpu1.py
import torch
from torchvision import transforms, datasets
from torch.utils.data import DataLoader
import torch.nn as nn
from model import *
import timefrom torch.utils.tensorboard import SummaryWriterdata_transforms = transforms.Compose([transforms.ToTensor()
])#引入数据集
train_data = datasets.CIFAR10("./dataset",train=True,transform=data_transforms,download=True)test_data = datasets.CIFAR10("./dataset",train=False,transform=data_transforms,download=True)#加载数据
train_dataloader = DataLoader(train_data,batch_size=64)
test_dataloader = DataLoader(test_data,batch_size=64)start_time = time.time()#建立模型
my_module = MyModule()
if torch.cuda.is_available():my_module.cuda()#设置损失函数
cross_loss = nn.CrossEntropyLoss()
if torch.cuda.is_available():cross_loss.cuda()#设置优化器
#设置学习率
learning_rate = 1e-2
optimizer = torch.optim.SGD(my_module.parameters(),lr=learning_rate)#进行训练
#设置迭代次数
epoch = 10total_train_steps = 0writer = SummaryWriter("train_logs")for i in range(epoch):print("第{}轮训练".format(i+1))#训练my_module.train() #只对某些层起作用for data in train_dataloader:imgs, targets = dataif torch.cuda.is_available():imgs = imgs.cuda()targets = targets.cuda()outputs = my_module(imgs)#计算损失loss = cross_loss(outputs, targets)#优化模型optimizer.zero_grad()loss.backward()optimizer.step()total_train_steps +=1if total_train_steps % 100 ==0:print("训练次数:{},Loss:{}".format(total_train_steps,loss.item()))writer.add_scalar("train_loss",loss.item(),total_train_steps)#测试,不再梯度下降my_module.eval() #同样只对某些层起作用 total_test_loss = 0# total_test_steps = 0total_accuracy = 0test_data_size = len(test_data)with torch.no_grad():for data in test_dataloader:imgs, targets = dataif torch.cuda.is_available():imgs = imgs.cuda()targets = targets.cuda()outputs = my_module(imgs)loss = cross_loss(outputs,targets)total_test_loss += loss.item()##对于分类任务可以求一下准确的个数,非必须#argmax(1)按行取最大的下标 argmax(0)按列取最大的下标accuracy = (outputs.argmax(1)==targets).sum()total_accuracy += accuracyprint("第{}轮的测试集Loss:{}".format(i+1,total_test_loss))print("测试集准确率:{}".format(total_accuracy/test_data_size))writer.add_scalar("test_loss",total_test_loss,i)end_time = time.time()print("time:{}".format(end_time-start_time))#存储模型if i % 5 == 0:torch.save(my_module.state_dict(),"my_module_{}.pth".format(i))print("模型存储成功")writer.close()

使用GPU加速训练(方式二)

现在更常见的写法是用device+.to(device)的搭配,需要引入的位置和方式一提到的没有任何差异,主要就是使用上的语法会有一点点不一样,所以直接给出一个例程,大家看完就知道怎么用了:

# train_gpu2.py
import torch
from torchvision import transforms, datasets
from torch.utils.data import DataLoader
import torch.nn as nn
from model import *from torch.utils.tensorboard import SummaryWriterdata_transforms = transforms.Compose([transforms.ToTensor()
])#引入数据集
train_data = datasets.CIFAR10("./dataset",train=True,transform=data_transforms,download=True)test_data = datasets.CIFAR10("./dataset",train=False,transform=data_transforms,download=True)#加载数据
train_dataloader = DataLoader(train_data,batch_size=64)
test_dataloader = DataLoader(test_data,batch_size=64)#确定设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(device)#建立模型
my_module = MyModule()
my_module.to(device)#设置损失函数
cross_loss = nn.CrossEntropyLoss()
cross_loss.to(device)#设置优化器
#设置学习率
learning_rate = 1e-2
optimizer = torch.optim.SGD(my_module.parameters(),lr=learning_rate)#进行训练
#设置迭代次数
epoch = 10total_train_steps = 0writer = SummaryWriter("train_logs")for i in range(epoch):print("第{}轮训练".format(i+1))#训练my_module.train() #只对某些层起作用for data in train_dataloader:imgs, targets = dataimgs, targets = imgs.to(device), targets.to(device)outputs = my_module(imgs)#计算损失loss = cross_loss(outputs, targets)#优化模型optimizer.zero_grad()loss.backward()optimizer.step()total_train_steps +=1if total_train_steps % 100 ==0:print("训练次数:{},Loss:{}".format(total_train_steps,loss.item()))writer.add_scalar("train_loss",loss.item(),total_train_steps)#测试,不再梯度下降my_module.eval() #同样只对某些层起作用 total_test_loss = 0# total_test_steps = 0total_accuracy = 0test_data_size = len(test_data)with torch.no_grad():for data in test_dataloader:imgs, targets = dataimgs, targets = imgs.to(device), targets.to(device)outputs = my_module(imgs)loss = cross_loss(outputs,targets)total_test_loss += loss.item()##对于分类任务可以求一下准确的个数,非必须#argmax(1)按行取最大的下标 argmax(0)按列取最大的下标accuracy = (outputs.argmax(1)==targets).sum()total_accuracy += accuracyprint("第{}轮的测试集Loss:{}".format(i+1,total_test_loss))print("测试集准确率:{}".format(total_accuracy/test_data_size))writer.add_scalar("test_loss",total_test_loss,i)#存储模型if i % 5 == 0:torch.save(my_module.state_dict(),"my_module_{}.pth".format(i))print("模型存储成功")writer.close()

使用模型完成任务

这个标题我想了很久应该叫什么才能和内容对应上…土堆老师原来名字叫模型验证我没看之前一直以为是evaluate的过程啊啊啊结果是test的过程

实际上我们训练完模型得到一堆准确率啊或者什么的时候并不代表我们完成了整个事情,说人话就是没啥用,所以这部分其实就是教我们怎么用得到的模型在其他数据上使用,这一部分还蛮简单的,和训练中的evaluate部分使用差不多,注意点就是别忘了给图片reshape成含有batch_size的形状(特别是单张的情况下),当然,如果有报错也可以先考虑是不是形状不太对的原因…

# test.py
from PIL import Image
import torchvision
from torchvision import transforms
from model import *image_path = "./test_imgs/cat.jpg"
image = Image.open(image_path)
# image = image.convert('RGB') # 对于png图片要加上这一句data_transforms = torchvision.transforms.Compose([transforms.Resize((32, 32)),transforms.ToTensor()])image = data_transforms(image)
print(image.shape)model = MyModule()
model.load_state_dict(torch.load("my_module_5.pth"))image = torch.reshape(image,(1,3,32,32))
model.eval()
with torch.no_grad():output = model(image)print(output)
print(output.argmax(1))# torch.Size([3, 32, 32])
# tensor([[-1.5852, -1.3985,  1.0891,  2.5762,  0.1534,  2.0844,  0.6164,  1.7049,#  -4.7464, -1.4447]])
# tensor([3])

其实我的模型准确率没有很高,但是对于这张图片竟然惊人的分对了(第3类-cat)

http://www.dtcms.com/a/611193.html

相关文章:

  • AAAI 2026 Oral 之江实验室等提出MoEGCL:在6大基准数据集上刷新SOTA,聚类准确率最高提升超8%!
  • 当当网的网站建设要求北京学校网站建设公司
  • 【Vue3】 中的 【unref】:详解与使用
  • 衡阳做淘宝网站建设wordpress 营销页面
  • BdsEntry
  • 网站备案后 如何建设tp框架做餐饮网站
  • 自动化 东莞网站建设如何提高用户和网站的互动性
  • Linux网络编程:(八)GCC/G++ 编译器完全指南:从编译原理到实战优化,手把手教你玩转 C/C++ 编译
  • 网站负责人拍照集团公司网站设计
  • 重钢建设公司官方网站电脑访问手机网站跳转
  • AI赋能多模态情绪识别
  • vue3 使用v-model开发弹窗组件
  • 淘宝网站建设的目标是什么石家庄网络营销哪家好做
  • vue3开发使用框架推荐
  • 郑州网站建设方案国内购物网站大全
  • Qt界面布局管理详解
  • RK3506 eMMC 固件重启崩溃问题(USB 触发)技术总结
  • RocketMQ DefaultMQPushConsumer vs DefaultLitePullConsumer
  • php和mysql网站毕业设计成都餐饮设计公司有哪些
  • 甘肃统计投资审核系统完成国产数据库替换:从MySQL到金仓的平稳跨越
  • 征求网站建设意见的通知seo优化网站排名
  • 电商网站流程优秀网络广告文案案例
  • 怎么做个人网站建设wordpress 迁移 工具
  • 两台arm服务器之间实现实时同步
  • 国外设计参考网站公司如何做网站宣传
  • 多用户自助建站系统wordpress iis 500.50
  • 福州网站建设需要多少钱ui设计的优势与不足
  • 网站建设方案书的内容网上学编程
  • 经典算法题之子集(四)
  • 自己动手写深度学习框架(反向传播)