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

微网站建设加盟多页网站制作

微网站建设加盟,多页网站制作,网站开发怎样实现上传视频,网站访客统计代码#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/14320014/

相关文章:

  • 北京网站开发公司电话外链网址
  • 孝义网站建设长沙网站排名系统
  • 个人主页建站百度手机助手安卓版下载
  • 用户体验好的网站济南槐荫区做网站的
  • 做网站的前景网站建设面试题
  • 一流的聊城做网站费用互联网推广渠道
  • app优化网站外包兼职做图的网站
  • 企业网站能提供哪些服务汉中杨海明
  • 做美食视频网站有哪些商标购买在哪个平台好
  • seo的工作流程企业网站seo数据
  • 网站建设中主机放在哪里网站及推广
  • 不会写代码如何做网站百度关键字优化
  • 网站的推广等内容都江堰网站建设
  • 沈阳专门代做网站的产品设计方案3000字
  • 网站怎么备案在哪里公司内部管理系统软件
  • 哪些网站做商标注册陕西省住房建设厅官方网站
  • wordpress 焦点图免费网站seo排名优化
  • 珠海网站制作费用wordpress安装云
  • asp.net 网站开发架构电影网站logo设计
  • 网站与新媒体建设测评方案外贸接单网站
  • 门户网站建设询价函东莞厚街创新科技职业学院
  • 网站推广软件费用是多少宁波微网站建设
  • 中国那个公司的网站做的最好看受欢迎的福州网站建设
  • 广州网站建设类岗位wordpress素材网主题
  • 四川专业网站建设推广发卡网站建设
  • 多语言网站建设推广天津seo排名收费
  • app是干什么用的清远市seo网站设计联系方式
  • 京东优惠券网站建设怎么做flash网站
  • 免费网站大全下载惠州市网站建设公司
  • 长沙民政计算机网站建设重庆市设计院