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

wordpress 手机pc中山企业网站优化

wordpress 手机pc,中山企业网站优化,各类郑州网站建设,app用什么制作软件文章目录 前言一、数据准备二、项目实战2.1 设置GPU2.2 数据加载2.3 数据预处理2.4 数据划分2.5 搭建网络模型2.6 构建densenet1212.7 训练模型2.8 结果可视化 三、UI设计四、结果展示总结 前言 在当今社会#xff0c;眼科疾病尤其是白内障对人们的视力健康构成了严重威胁。白… 文章目录 前言一、数据准备二、项目实战2.1 设置GPU2.2 数据加载2.3 数据预处理2.4 数据划分2.5 搭建网络模型2.6 构建densenet1212.7 训练模型2.8 结果可视化 三、UI设计四、结果展示总结 前言 在当今社会眼科疾病尤其是白内障对人们的视力健康构成了严重威胁。白内障是全球范围内导致失明的主要原因之一早期准确的诊断对于疾病的治疗和患者的预后至关重要。传统的白内障检测方法主要依赖于眼科医生的专业判断这不仅需要大量的人力和时间而且诊断结果可能会受到医生经验和主观因素的影响。 随着深度学习技术的飞速发展其在医疗图像分析领域展现出了巨大的潜力。卷积神经网络CNN作为深度学习中的重要模型已经在多种医疗图像识别任务中取得了显著的成果如肿瘤检测、疾病分类等。利用 CNN 对眼科图像进行分析可以辅助医生更快速、准确地进行疾病诊断。 本文将详细介绍如何使用基于 DenseNet 的卷积神经网络进行白内障疾病检测。通过这个实战案例不仅可以帮助读者了解 DenseNet 的原理和应用还能掌握利用深度学习进行医疗图像分析的基本流程和方法为进一步开展相关研究和实践提供参考。 一、数据准备 本案例使用的数据集是retina_dataset|眼科疾病数据集。 数据集下载地址:点击这里 Retina Dataset的构建基于眼底图像的分类需求涵盖了四种主要的眼科疾病类别正常、白内障、青光眼和视网膜疾病。数据集通过收集和整理不同患者的视网膜图像确保每类疾病均有代表性样本。图像数据经过标准化处理以保证在不同设备和条件下获取的图像具有一致性从而为后续的分类和分析提供了坚实的基础。 二、项目实战 我的环境 基础环境Python3.9编译器PyCharm 2024深度学习框架Pytorch2.0 2.1 设置GPU import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import transforms, datasets import os,PIL,pathlib,warningswarnings.filterwarnings(ignore) #忽略警告信息device torch.device(cuda if torch.cuda.is_available() else cpu) device2.2 数据加载 import os,PIL,random,pathlibdata_dir 数据路径 data_dir pathlib.Path(data_dir)data_paths list(data_dir.glob(*)) classeNames [str(path).split(\\)[1] for path in data_paths]2.3 数据预处理 train_transforms transforms.Compose([transforms.Resize([224, 224]), # 将输入图片resize成统一尺寸# transforms.RandomHorizontalFlip(), # 随机水平翻转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] 从数据集中随机抽样计算得到的。 ])test_transform 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(data_dir,transformtrain_transforms)2.4 数据划分 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])batch_size 32train_dl torch.utils.data.DataLoader(train_dataset,batch_sizebatch_size,shuffleTrue) test_dl torch.utils.data.DataLoader(test_dataset,batch_sizebatch_size,shuffleTrue)2.5 搭建网络模型 import torch.nn as nn import torch from torch import mean, maxclass _DenseLayer(nn.Module):def __init__(self, num_input_features, growth_rate, bn_size, drop_rate0):super(_DenseLayer, self).__init__()self.drop_rate drop_rateself.dense_layer nn.Sequential(nn.BatchNorm2d(num_input_features),nn.ReLU(),nn.Conv2d(in_channelsnum_input_features, out_channelsbn_size * growth_rate, kernel_size1, stride1,padding0),Inceptionnext(bn_size * growth_rate, bn_size * growth_rate, kernel_size3),CBAMBlock(FC, 5, channelsbn_size * growth_rate, ratio9),nn.Conv2d(in_channelsbn_size * growth_rate, out_channelsgrowth_rate, kernel_size1, stride1, padding0))self.dropout nn.Dropout(pself.drop_rate)def forward(self, x):y self.dense_layer(x)if self.drop_rate 0:y self.dropout(y)return torch.concat([x, y], dim1)class _DenseBlock(nn.Module):def __init__(self, num_layers, num_input_features, bn_size, growth_rate, drop_rate0):super(_DenseBlock, self).__init__()layers []for i in range(num_layers):layers.append(_DenseLayer(num_input_features i * growth_rate, growth_rate, bn_size, drop_rate))self.layers nn.Sequential(*layers)def forward(self, x):return self.layers(x)class _TransitionLayer(nn.Module):def __init__(self, num_input_features, num_output_features):super(_TransitionLayer, self).__init__()self.transition_layer nn.Sequential(nn.BatchNorm2d(num_input_features),nn.ReLU(),nn.Conv2d(in_channelsnum_input_features, out_channelsnum_output_features, kernel_size1, stride1,padding0),nn.AvgPool2d(kernel_size2, stride2))def forward(self, x):return self.transition_layer(x)class DenseNet(nn.Module):def __init__(self, num_init_features64, growth_rate32, blocks(6, 12, 24, 16), bn_size4, drop_rate0,num_classes1000):super(DenseNet, self).__init__()self.features nn.Sequential(nn.Conv2d(in_channels3, out_channelsnum_init_features, kernel_size7, stride2, padding3),nn.BatchNorm2d(num_init_features),nn.ReLU(),nn.MaxPool2d(kernel_size3, stride2, padding1))num_features num_init_featuresself.layer1 _DenseBlock(num_layersblocks[0], num_input_featuresnum_features, growth_rategrowth_rate,bn_sizebn_size, drop_ratedrop_rate)num_features num_features blocks[0] * growth_rateself.transtion1 _TransitionLayer(num_input_featuresnum_features, num_output_featuresnum_features // 2)num_features num_features // 2self.layer2 _DenseBlock(num_layersblocks[1], num_input_featuresnum_features, growth_rategrowth_rate,bn_sizebn_size, drop_ratedrop_rate)num_features num_features blocks[1] * growth_rateself.transtion2 _TransitionLayer(num_input_featuresnum_features, num_output_featuresnum_features // 2)num_features num_features // 2self.layer3 _DenseBlock(num_layersblocks[2], num_input_featuresnum_features, growth_rategrowth_rate,bn_sizebn_size, drop_ratedrop_rate)num_features num_features blocks[2] * growth_rateself.transtion3 _TransitionLayer(num_input_featuresnum_features, num_output_featuresnum_features // 2)num_features num_features // 2self.layer4 _DenseBlock(num_layersblocks[3], num_input_featuresnum_features, growth_rategrowth_rate,bn_sizebn_size, drop_ratedrop_rate)num_features num_features blocks[3] * growth_rateself.avgpool nn.AdaptiveAvgPool2d((1, 1))self.fc nn.Linear(num_features, num_classes)def forward(self, x):x self.features(x)x self.layer1(x)x self.transtion1(x)x self.layer2(x)x self.transtion2(x)x self.layer3(x)x self.transtion3(x)x self.layer4(x)x self.avgpool(x)y torch.flatten(x, start_dim1)x self.fc(y)return x 2.6 构建densenet121 device cuda if torch.cuda.is_available() else cpu print(Using {} device.format(device))densenet121 DenseNet(blocks(6,12,24,16),num_classeslen(classeNames)) model densenet121.to(device)2.7 训练模型 # 训练循环 def train(dataloader, model, loss_fn, optimizer):size len(dataloader.dataset) # 训练集的大小num_batches len(dataloader) # 批次数目, (size/batch_size向上取整)train_loss, train_acc 0, 0 # 初始化训练损失和正确率for X, y in dataloader: # 获取图片及其标签X, y X.to(device), y.to(device)# 计算预测误差pred model(X) # 网络输出loss loss_fn(pred, y) # 计算网络输出和真实值之间的差距targets为真实值计算二者差值即为损失# 反向传播optimizer.zero_grad() # grad属性归零loss.backward() # 反向传播optimizer.step() # 每一步自动更新# 记录acc与losstrain_acc (pred.argmax(1) y).type(torch.float).sum().item()train_loss loss.item()train_acc / sizetrain_loss / num_batchesreturn train_acc, train_lossdef test (dataloader, model, loss_fn):size len(dataloader.dataset) # 测试集的大小num_batches len(dataloader) # 批次数目, (size/batch_size向上取整)test_loss, test_acc 0, 0# 当不进行训练时停止梯度更新节省计算内存消耗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_lossimport copyoptimizer torch.optim.Adam(model.parameters(), lr 1e-4) loss_fn nn.CrossEntropyLoss() # 创建损失函数epochs 20train_loss [] train_acc [] test_loss [] test_acc []best_acc 0 # 设置一个最佳准确率作为最佳模型的判别指标for epoch in range(epochs):model.train()epoch_train_acc, epoch_train_loss train(train_dl, model, loss_fn, optimizer)model.eval()epoch_test_acc, epoch_test_loss test(test_dl, model, loss_fn)# 保存最佳模型到 best_modelif epoch_test_acc best_acc:best_acc epoch_test_accbest_model copy.deepcopy(model)train_acc.append(epoch_train_acc)train_loss.append(epoch_train_loss)test_acc.append(epoch_test_acc)test_loss.append(epoch_test_loss)# 获取当前的学习率lr optimizer.state_dict()[param_groups][0][lr]template (Epoch:{:2d}, Train_acc:{:.1f}%, Train_loss:{:.3f}, Test_acc:{:.1f}%, Test_loss:{:.3f}, Lr:{:.2E})print(template.format(epoch1, epoch_train_acc*100, epoch_train_loss, epoch_test_acc*100, epoch_test_loss, lr))# 保存最佳模型到文件中 PATH ./best_model.pth # 保存的参数文件名 torch.save(best_model.state_dict(), PATH)print(Done)2.8 结果可视化 import matplotlib.pyplot as plt #隐藏警告 import warnings warnings.filterwarnings(ignore) #忽略警告信息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 Test 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 Test Loss) plt.show()三、UI设计 这里使用QT Designder设计了一个简易的UI界面可以很方便的进行使用。 UI.py文件如下 import test from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QFileDialog, QMessageBoximgNameNoneclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName(Form)Form.resize(649, 559)self.label QtWidgets.QLabel(Form)self.label.setGeometry(QtCore.QRect(120, 20, 331, 41))self.label.setStyleSheet(\n font: 22pt \华文彩云\;)self.label.setObjectName(label)self.label_2 QtWidgets.QLabel(Form)self.label_2.setGeometry(QtCore.QRect(120, 130, 311, 251))self.label_2.setStyleSheet(border-image: url(:/新前缀/img.png);)self.label_2.setText()self.label_2.setObjectName(label_2)self.label_4 QtWidgets.QLabel(Form)self.label_4.setGeometry(QtCore.QRect(60, 440, 72, 15))self.label_4.setObjectName(label_4)self.textEdit QtWidgets.QTextEdit(Form)self.textEdit.setGeometry(QtCore.QRect(140, 440, 211, 91))self.textEdit.setObjectName(textEdit)self.layoutWidget QtWidgets.QWidget(Form)self.layoutWidget.setGeometry(QtCore.QRect(60, 400, 221, 31))self.layoutWidget.setObjectName(layoutWidget)self.horizontalLayout_2 QtWidgets.QHBoxLayout(self.layoutWidget)self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)self.horizontalLayout_2.setObjectName(horizontalLayout_2)self.label_3 QtWidgets.QLabel(self.layoutWidget)self.label_3.setObjectName(label_3)self.horizontalLayout_2.addWidget(self.label_3)self.lineEdit_2 QtWidgets.QLineEdit(self.layoutWidget)self.lineEdit_2.setObjectName(lineEdit_2)self.horizontalLayout_2.addWidget(self.lineEdit_2)self.layoutWidget1 QtWidgets.QWidget(Form)self.layoutWidget1.setGeometry(QtCore.QRect(30, 70, 591, 41))self.layoutWidget1.setObjectName(layoutWidget1)self.horizontalLayout_3 QtWidgets.QHBoxLayout(self.layoutWidget1)self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)self.horizontalLayout_3.setObjectName(horizontalLayout_3)self.horizontalLayout QtWidgets.QHBoxLayout()self.horizontalLayout.setObjectName(horizontalLayout)self.lineEdit QtWidgets.QLineEdit(self.layoutWidget1)self.lineEdit.setObjectName(lineEdit)self.horizontalLayout.addWidget(self.lineEdit)self.pushButton QtWidgets.QPushButton(self.layoutWidget1)self.pushButton.setObjectName(pushButton)self.horizontalLayout.addWidget(self.pushButton)self.horizontalLayout_3.addLayout(self.horizontalLayout)self.pushButton_2 QtWidgets.QPushButton(self.layoutWidget1)self.pushButton_2.setObjectName(pushButton_2)self.horizontalLayout_3.addWidget(self.pushButton_2)self.pushButton.clicked.connect(self.openImage)self.pushButton_2.clicked.connect(self.inferImage)self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate QtCore.QCoreApplication.translateForm.setWindowTitle(_translate(Form, Form))self.label.setText(_translate(Form, 白内障检测系统))self.label_4.setText(_translate(Form, 诊断建议))self.label_3.setText(_translate(Form, 识别结果))self.pushButton.setText(_translate(Form, 打开文件))self.pushButton_2.setText(_translate(Form, 开始识别))def openImage(self): # 选择本地图片上传global imgName # 这里为了方便别的地方引用图片路径我们把它设置为全局变量imgName, imgType QFileDialog.getOpenFileName(self, 打开图片, ,*.jpg;*.png;;All Files(*)) # 弹出一个文件选择框第一个返回值imgName记录选中的文件路径文件名第二个返回值imgType记录文件的类型jpg QtGui.QPixmap(imgName).scaled(self.label_2.width(),self.label_2.height()) # 通过文件路径获取图片文件并设置图片长宽为label控件的长宽self.label_2.setPixmap(jpg) # 在label控件上显示选择的图片self.lineEdit.setText(imgName) # 显示所选图片的本地路径def inferImage(self):global imgNameif imgName is None or imgName :QMessageBox.information(self, Error!, 请先选择图片, QMessageBox.Ok)returna1, a2 test.infer(imgName)self.lineEdit_2.setText(a1)self.textEdit.setText(a2) import asd_rc 四、结果展示 总结 通过本次案例我们可以对深度学习设计程序的流程有一个简单清楚的认知以便我们将来构建其它深度学习系统可以更加得心应手。
http://www.zqtcl.cn/news/686462/

相关文章:

  • 古色古香 网站模板西安企业黄页网站
  • 上海企业网站怎么建设交互设计网站有哪些
  • 企业网站设计与制作开发一款游戏app需要多少钱
  • 贵阳网站方舟网络北京手机网站制作
  • 烟台小学网站建设做盗版电影网站问题
  • 做网站语言知乎长春财经学院学费多少
  • 大丰有做网站的电子商城网站开发要多少钱
  • 南京建设网站制作手机怎么制作网页
  • 杭州pc网站建设方案网站建设要准备的内容
  • 壶关网站建设中国专利申请网官网
  • 具体的网站建设方案网页程序开发采购
  • 泉州 网站建设苏州网站外包
  • 网站做404页面怎么做网站开发过程的基本环节
  • 做网站是前端还是后端小程序网站模板
  • 学校网站建设与维护建设银行官网电话
  • dedecms网站地图修改软件开发公司规章制度
  • 大型旅游网站骏驰网站开发
  • 有心学做网站两学一做知识竞赛试题网站
  • 西宁圆井模板我自己做的网站怎么做网站能快速赚钱
  • 根据网站集约化建设的要求直流分公司四川建设部网站
  • 网站优化平台有哪些遵义网站开发的公司有哪些
  • 推荐一下网站谢谢微盟微商城怎么样
  • 网站建设的技术指标网站做好第二年要多少钱
  • 工业设计东莞网站建设WordPress网络功能
  • 网站pv多少可以企业网站托管常见问题
  • 深圳有哪些网站建设沈阳做机床的公司网站
  • 2022年网站能用的wordpress 客户端使用
  • 社交网站建设内容如何制作橡皮泥 简单
  • 简述网站的制作流程wordpress定制分类
  • 如何自建购物网站wordpress文章编辑插件