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

微网站建设加盟wap网站源代码

微网站建设加盟,wap网站源代码,电子商务平台加盟,网页设计与网站建设考试名词解释#x1f368; 本文为#x1f517;365天深度学习训练营 中的学习记录博客#x1f366; 参考文章#xff1a;Pytorch实战 | 第P3周#xff1a;彩色图片识别#xff1a;天气识别**#x1f356; 原作者#xff1a;K同学啊|接辅导、项目定制**␀ 本次实验有两个新增任务 本文为365天深度学习训练营 中的学习记录博客 参考文章Pytorch实战 | 第P3周彩色图片识别天气识别** 原作者K同学啊|接辅导、项目定制**␀ 本次实验有两个新增任务 测试集准确度达95%调用模型识别图片 我训练完直接在测试集里选了几张图识别界面的title第一行是label第二行是预测结果如图效果不错 ps:想输出图片还需加入一个逆解原图的函数因为读入时直接用transforms将数据集归一化了 关于准确度 直接将K同学的模型改成nn.Sequential()连接后准确度已经达到了94.2%目前不是很理解原因在我目前的理解在前向传播时连接模型应该和Sequential是等价的将激活函数由RELU改为SILU后测试集准确度在86%附近不再提升如图 将原模型最后只有一个全连接层改为两个全连接层 在lr1e-4epoch20时准确度在一直增加可以看出这时训练20次还不够我的理解是因为此时比上次的参数多了一层所以更加难训练。效果如图 此时我想将上次的学习率增大是否可以快点达到理想水平于是设置lr1e-2由于给的太大了训练后期开始震荡如图 自己瞎设计了一个模型效果一般也没有达到95%后面就转到云服务器训练了电脑显卡一般训练要等半天 模仿残差块想融合低维和高维数据一起预测但准确度只有88%左右理论知识不足模型也只会凭感觉设计的结果。。。 记录一下这个模型吧 代码 import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import transforms, datasets import os, PIL, pathlib, random import torch.nn.functional as F from torchinfo import summary import matplotlib.pyplot as plt import numpy as npdevice torch.device(cuda if torch.cuda.is_available() else cpu) print(device: str(device))data_dir ./data/ data_dir pathlib.Path(data_dir) data_paths list(data_dir.glob(*)) classeNames [str(path).split(\\)[1] for path in data_paths] print(classeNames)total_datadir ./data/# 串联多个图片变换操作进行图像预处理 train_transforms transforms.Compose([transforms.Resize([224, 224]), # 将输入图片resize成统一尺寸transforms.ToTensor(), # 将PIL Image或numpy.ndarray转换为tensor并归一化到[0,1]之间transforms.Normalize( # 标准化处理--转换为标准正太分布高斯分布使模型更容易收敛mean[0.485, 0.456, 0.406],std[0.229, 0.224, 0.225])]) # 其中 mean[0.485,0.456,0.406]与std[0.229,0.224,0.225] 从数据集中随机抽样计算得到的total_data datasets.ImageFolder(total_datadir, transformtrain_transforms) # root:数据集地址数据集内每个类别再单独一个文件夹类别文件夹内才是图片train_size int(0.8 * len(total_data)) test_size len(total_data) - train_size train_dataset, test_dataset torch.utils.data.random_split(total_data, [train_size, test_size]) # 按8:2随机将数据集划分为训练集和测试集# 参数 batch_size 32 nc 10 learn_rate 1e-2 epochs 20train_dl torch.utils.data.DataLoader(train_dataset,batch_sizebatch_size,shuffleTrue,num_workers0) # 用多线程nw0会导致print()函数多次输出 test_dl torch.utils.data.DataLoader(test_dataset,batch_sizebatch_size,shuffleTrue,num_workers0)class Model(nn.Module):def __init__(self):super(Model, self).__init__()conv1 nn.Conv2d(3, 12, 5)bn1 nn.BatchNorm2d(12)conv2 nn.Conv2d(12, 12, 5)bn2 nn.BatchNorm2d(12)pool nn.MaxPool2d(2, 2)conv4 nn.Conv2d(12, 24, 5)bn4 nn.BatchNorm2d(24)conv5 nn.Conv2d(24, 24, 5)bn5 nn.BatchNorm2d(24)fc1 nn.Linear(24 * 50 * 50, 1000)fc2 nn.Linear(1000, len(classeNames))self.m nn.Sequential(conv1, bn1, nn.ReLU(),conv2, bn2, nn.ReLU(),pool,conv4, bn4, nn.ReLU(),conv5, bn5, nn.ReLU(),pool,nn.Flatten(),fc1, fc2)def forward(self, x):output self.m(x)return output# 将归一化的数据集逆解出原图并转化成numpy格式 def de_normalize(image, mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]):mean torch.as_tensor(mean)std torch.as_tensor(std)if mean.ndim 1:mean mean.view(-1, 1, 1)if std.ndim 1:std std.view(-1, 1, 1)image image * std mean # 由image(x-mean)/std可知ximage*stdmeanimage image.numpy().transpose(1, 2, 0) # 从tensor转为numpy,并由C,H,W变为H,W,Cimage np.around(image * 255) # 对数据恢复并进行取整image np.array(image, dtypenp.uint8) # 矩阵元素类型由浮点数转为整数return image# 训练 def train(dataloader, model, loss_fn, optimizer):size len(dataloader.dataset) # 训练集的大小一共60000张图片num_batches len(dataloader) # 批次数目187560000/32train_loss, train_acc 0, 0 # 初始化训练损失和正确率for X, y in dataloader: # 获取图片X及其标签yX, y X.to(device), y.to(device)# 前向传播计算预测误差# 注这里会触发Module的forward回调函数调用上面的Model类的forward()从而进行前向传播pred model(X) # 网络输出预测值# 计算网络输出预测值和真实值之间的差距targets为真实值计算二者差值即为损失# 返回的loss是一个张量loss loss_fn(pred, y)# 反向传播optimizer.zero_grad() # grad属性归零loss.backward() # 反向传播backward会一层层的反向传播计算每层的每个w的梯度值并保存到该w的.grad属性中并在下一步step()更新optimizer.step() # 每一步自动更新 前面已经把model的参数传给了opt所以此处调用更新就会更新model的参数# 记录acc与losstrain_acc (pred.argmax(1) y).type(torch.float).sum().item() # train_acc: 训练集准确度train_loss loss.item()train_acc / sizetrain_loss / num_batchesreturn train_acc, train_loss# 测试函数和训练函数大致相同但是由于不进行梯度下降对网络权重进行更新所以不需要传入优化器 def test(dataloader, model, loss_fn):size len(dataloader.dataset) # 测试集的大小一共10000张图片num_batches len(dataloader) # 批次数目31310000/32312.5向上取整test_loss, test_acc 0, 0# 当不进行训练时停止梯度更新节省计算内存消耗# pytorch默认会对含张量的操作自动求导with torch.no_grad(): # 表示张量的计算过程中无需计算梯度for imgs, target in dataloader:imgs, target imgs.to(device), target.to(device)# 计算losstarget_pred model(imgs)loss loss_fn(target_pred, target)test_loss loss.item()test_acc (target_pred.argmax(1) target).type(torch.float).sum().item()test_acc / sizetest_loss / num_batchesreturn test_acc, test_lossmodel Model().to(device) # 将模型转移到GPU中 loss_fn nn.CrossEntropyLoss() # 多分类问题--交叉熵损失函数 opt torch.optim.SGD(model.parameters(), lrlearn_rate) # 随机梯度下降def main():train_loss []train_acc []test_loss []test_acc []for epoch in range(epochs):# trainmodel.train()epoch_train_acc, epoch_train_loss train(train_dl, model, loss_fn, opt)# testmodel.eval()epoch_test_acc, epoch_test_loss test(test_dl, model, loss_fn)# 记录数据用于最后画曲线train_acc.append(epoch_train_acc)train_loss.append(epoch_train_loss)test_acc.append(epoch_test_acc)test_loss.append(epoch_test_loss)template (Epoch:{:2d}, Train_acc:{:.1f}%, Train_loss:{:.3f}, Test_acc:{:.1f}%Test_loss:{:.3f})print(template.format(epoch 1, epoch_train_acc * 100, epoch_train_loss, epoch_test_acc * 100, epoch_test_loss))plt.figure()for i in range(20):# 原图数据img, label test_dataset[i]npimg de_normalize(img)# 预测img img.unsqueeze(0) # 升维否则不能输入模型img img.to(device) # 传入GPU因为前面模型是建在GPU内的pred model(img) # model前向传播返回的是一个张量index torch.argmax(pred) # 取置信度最大的# plt显示plt.subplot(2, 10, i 1)plt.title(classeNames[label] \n classeNames[index]) # 第一行是real 第二行是predplt.imshow(npimg)plt.axis(off)plt.show()plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签plt.rcParams[axes.unicode_minus] False # 用来正常显示负号plt.rcParams[figure.dpi] 100 # 分辨率epochs_range range(epochs)plt.figure(figsize(12, 3))plt.subplot(1, 2, 1)plt.plot(epochs_range, train_acc, labelTraining Accuracy)plt.plot(epochs_range, test_acc, labelTest Accuracy)plt.legend(loclower right)plt.title(Training and Validation Accuracy)plt.subplot(1, 2, 2)plt.plot(epochs_range, train_loss, labelTraining Loss)plt.plot(epochs_range, test_loss, labelTest Loss)plt.legend(locupper right)plt.title(Training and Validation Loss)plt.show()if __name__ __main__:main()
http://www.hkea.cn/news/14460721/

相关文章:

  • 建网站手续wordpress百度数据
  • 织梦生成网站地图网站建设模板漏洞
  • 网站制作 用户登录系统什么行业做网站
  • 知名企业网站大全网站后台如何添加附件
  • 傲派电子商务网站建设总结国家信用信息公示系统的官网
  • 免费的ai写作网站搜索排行榜
  • 哪个网站有激光打标业务做wordpress批量增加用户权限
  • 中山网站建设文化平台淄博 网站设计
  • 潍坊建站程序餐厅网站模板
  • 湖州房产网站建设政务网站建设的三大核心功能是什么
  • 商务网站建设实训报告1500字wordpress slider插件
  • 网站开发的技术简介宣传软文怎么写
  • 网站建设属于服务还是货物seo推广营销公司
  • 企业网站建设排名官网天津哪里建网站好
  • aspcms网站后台登陆界面模版网页设计个人总结800字
  • 一个网站占空间有多少g西苑做网站公司
  • 手机百度收录网站吗商贸有限公司企业简介
  • 网站开发合同 黑客攻击条款汕头免费建站
  • 汕头网站建设制作公司收费网站模板
  • 让网站快速收录最新wordpress 平台
  • 做装修有什么好网站可以做自助建微网站
  • html5和ria网站设计网页平台制作
  • 网站怎么广告投放婚礼工作室网站模板
  • 上海网站建设心得昆明网站建设企业
  • 邯郸手机网站建设费用cms的意思
  • 成都市微信网站建设报价创建网站首页
  • 寺庙网站素材编程 毕业设计代做网站
  • 长春市规划建设局网站查询抖音seo关键词优化怎么做
  • 怎样做网站平台凡客诚品还有吗
  • 石家庄外贸网站制作公司投资好项目