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

泰安网站建设优化案例报告惠州市中国建设银行网站

泰安网站建设优化案例报告,惠州市中国建设银行网站,湖南产品网络营销推荐咨询,有哪些网站主页做的比较好看基于WIN10的64位系统演示 一、写在前面 上期我们基于TensorFlow环境做了图像识别的多分类任务建模。 本期以健康组、肺结核组、COVID-19组、细菌性#xff08;病毒性#xff09;肺炎组为数据集#xff0c;基于Pytorch环境#xff0c;构建SqueezeNet多分类模型#xff0…基于WIN10的64位系统演示 一、写在前面 上期我们基于TensorFlow环境做了图像识别的多分类任务建模。 本期以健康组、肺结核组、COVID-19组、细菌性病毒性肺炎组为数据集基于Pytorch环境构建SqueezeNet多分类模型因为它建模速度快。 同样基于GPT-4辅助编程这次改写过程就不展示了。 二、多分类建模实战 使用胸片的数据集肺结核病人和健康人的胸片的识别。其中健康人900张肺结核病人700张COVID-19病人549张、细菌性病毒性肺炎组900张分别存入单独的文件夹中。 a直接分享代码 ######################################导入包################################### # 导入必要的包 import copy import torch import torchvision import torchvision.transforms as transforms from torchvision import models from torch.utils.data import DataLoader from torch import optim, nn from torch.optim import lr_scheduler import os import matplotlib.pyplot as plt import warnings import numpy as npwarnings.filterwarnings(ignore) plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False# 设置GPU device torch.device(cuda:0 if torch.cuda.is_available() else cpu)################################导入数据集##################################### import torch from torchvision import datasets, transforms import os# 数据集路径 data_dir ./MTB-1# 图像的大小 img_height 100 img_width 100# 数据预处理 data_transforms {train: transforms.Compose([transforms.RandomResizedCrop(img_height),transforms.RandomHorizontalFlip(),transforms.RandomVerticalFlip(),transforms.RandomRotation(0.2),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]),val: transforms.Compose([transforms.Resize((img_height, img_width)),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]), }# 加载数据集 full_dataset datasets.ImageFolder(data_dir)# 获取数据集的大小 full_size len(full_dataset) train_size int(0.7 * full_size) # 假设训练集占70% val_size full_size - train_size # 验证集的大小# 随机分割数据集 torch.manual_seed(0) # 设置随机种子以确保结果可重复 train_dataset, val_dataset torch.utils.data.random_split(full_dataset, [train_size, val_size])# 将数据增强应用到训练集 train_dataset.dataset.transform data_transforms[train]# 创建数据加载器 batch_size 32 train_dataloader torch.utils.data.DataLoader(train_dataset, batch_sizebatch_size, shuffleTrue, num_workers4) val_dataloader torch.utils.data.DataLoader(val_dataset, batch_sizebatch_size, shuffleTrue, num_workers4)dataloaders {train: train_dataloader, val: val_dataloader} dataset_sizes {train: len(train_dataset), val: len(val_dataset)} class_names full_dataset.classes###############################定义SqueezeNet模型################################ # 定义SqueezeNet模型 model models.squeezenet1_1(pretrainedTrue) # 这里以SqueezeNet 1.1版本为例 num_ftrs model.classifier[1].in_channels# 根据分类任务修改最后一层 model.classifier[1] nn.Conv2d(num_ftrs, len(class_names), kernel_size(1,1))# 修改模型最后的输出层为我们需要的类别数 model.num_classes len(class_names)model model.to(device)# 打印模型摘要 print(model)#############################编译模型######################################### # 定义损失函数 criterion nn.CrossEntropyLoss()# 定义优化器 optimizer optim.Adam(model.parameters())# 定义学习率调度器 exp_lr_scheduler lr_scheduler.StepLR(optimizer, step_size7, gamma0.1)# 开始训练模型 num_epochs 50# 初始化记录器 train_loss_history [] train_acc_history [] val_loss_history [] val_acc_history []for epoch in range(num_epochs):print(Epoch {}/{}.format(epoch, num_epochs - 1))print(- * 10)# 每个epoch都有一个训练和验证阶段for phase in [train, val]:if phase train:model.train() # 设置模型为训练模式else:model.eval() # 设置模型为评估模式running_loss 0.0running_corrects 0# 遍历数据for inputs, labels in dataloaders[phase]:inputs inputs.to(device)labels labels.to(device)# 零参数梯度optimizer.zero_grad()# 前向with torch.set_grad_enabled(phase train):outputs model(inputs)_, preds torch.max(outputs, 1)loss criterion(outputs, labels)# 只在训练模式下进行反向和优化if phase train:loss.backward()optimizer.step()# 统计running_loss loss.item() * inputs.size(0)running_corrects torch.sum(preds labels.data)epoch_loss running_loss / dataset_sizes[phase]epoch_acc (running_corrects.double() / dataset_sizes[phase]).item()# 记录每个epoch的loss和accuracyif phase train:train_loss_history.append(epoch_loss)train_acc_history.append(epoch_acc)else:val_loss_history.append(epoch_loss)val_acc_history.append(epoch_acc)print({} Loss: {:.4f} Acc: {:.4f}.format(phase, epoch_loss, epoch_acc))print()# 保存模型 torch.save(model.state_dict(), model.pth)# 加载最佳模型权重 #model.load_state_dict(best_model_wts) #torch.save(model, shufflenet_best_model.pth) #print(The trained model has been saved.) ###########################Accuracy和Loss可视化################################# epoch range(1, len(train_loss_history)1)fig, ax plt.subplots(1, 2, figsize(10,4)) ax[0].plot(epoch, train_loss_history, labelTrain loss) ax[0].plot(epoch, val_loss_history, labelValidation loss) ax[0].set_xlabel(Epochs) ax[0].set_ylabel(Loss) ax[0].legend()ax[1].plot(epoch, train_acc_history, labelTrain acc) ax[1].plot(epoch, val_acc_history, labelValidation acc) ax[1].set_xlabel(Epochs) ax[1].set_ylabel(Accuracy) ax[1].legend()#plt.savefig(loss-acc.pdf, dpi300,formatpdf)####################################混淆矩阵可视化############################# from sklearn.metrics import classification_report, confusion_matrix import math import pandas as pd import numpy as np import seaborn as sns from matplotlib.pyplot import imshow# 定义一个绘制混淆矩阵图的函数 def plot_cm(labels, predictions):# 生成混淆矩阵conf_numpy confusion_matrix(labels, predictions)# 将矩阵转化为 DataFrameconf_df pd.DataFrame(conf_numpy, indexclass_names ,columnsclass_names) plt.figure(figsize(8,7))sns.heatmap(conf_df, annotTrue, fmtd, cmapBuPu)plt.title(Confusion matrix,fontsize15)plt.ylabel(Actual value,fontsize14)plt.xlabel(Predictive value,fontsize14)def evaluate_model(model, dataloader, device):model.eval() # 设置模型为评估模式true_labels []pred_labels []# 遍历数据for inputs, labels in dataloader:inputs inputs.to(device)labels labels.to(device)# 前向with torch.no_grad():outputs model(inputs)_, preds torch.max(outputs, 1)true_labels.extend(labels.cpu().numpy())pred_labels.extend(preds.cpu().numpy())return true_labels, pred_labels# 获取预测和真实标签 true_labels, pred_labels evaluate_model(model, dataloaders[val], device)# 计算混淆矩阵 cm_val confusion_matrix(true_labels, pred_labels) a_val cm_val[0,0] b_val cm_val[0,1] c_val cm_val[1,0] d_val cm_val[1,1]# 计算各种性能指标 acc_val (a_vald_val)/(a_valb_valc_vald_val) # 准确率 error_rate_val 1 - acc_val # 错误率 sen_val d_val/(d_valc_val) # 灵敏度 sep_val a_val/(a_valb_val) # 特异度 precision_val d_val/(b_vald_val) # 精确度 F1_val (2*precision_val*sen_val)/(precision_valsen_val) # F1值 MCC_val (d_val*a_val-b_val*c_val) / (np.sqrt((d_valb_val)*(d_valc_val)*(a_valb_val)*(a_valc_val))) # 马修斯相关系数# 打印出性能指标 print(验证集的灵敏度为, sen_val, 验证集的特异度为, sep_val,验证集的准确率为, acc_val, 验证集的错误率为, error_rate_val,验证集的精确度为, precision_val, 验证集的F1为, F1_val,验证集的MCC为, MCC_val)# 绘制混淆矩阵 plot_cm(true_labels, pred_labels)# 获取预测和真实标签 train_true_labels, train_pred_labels evaluate_model(model, dataloaders[train], device) # 计算混淆矩阵 cm_train confusion_matrix(train_true_labels, train_pred_labels) a_train cm_train[0,0] b_train cm_train[0,1] c_train cm_train[1,0] d_train cm_train[1,1] acc_train (a_traind_train)/(a_trainb_trainc_traind_train) error_rate_train 1 - acc_train sen_train d_train/(d_trainc_train) sep_train a_train/(a_trainb_train) precision_train d_train/(b_traind_train) F1_train (2*precision_train*sen_train)/(precision_trainsen_train) MCC_train (d_train*a_train-b_train*c_train) / (math.sqrt((d_trainb_train)*(d_trainc_train)*(a_trainb_train)*(a_trainc_train))) print(训练集的灵敏度为,sen_train, 训练集的特异度为,sep_train,训练集的准确率为,acc_train, 训练集的错误率为,error_rate_train,训练集的精确度为,precision_train, 训练集的F1为,F1_train,训练集的MCC为,MCC_train)# 绘制混淆矩阵 plot_cm(train_true_labels, train_pred_labels)################################模型性能参数计算################################ from sklearn import metricsdef test_accuracy_report(model, dataloader, device):true_labels, pred_labels evaluate_model(model, dataloader, device)print(metrics.classification_report(true_labels, pred_labels, target_namesclass_names)) test_accuracy_report(model, dataloaders[val], device)def train_accuracy_report(model, dataloader, device):true_labels, pred_labels evaluate_model(model, dataloader, device)print(metrics.classification_report(true_labels, pred_labels, target_namesclass_names)) train_accuracy_report(model, dataloaders[train], device)################################AUC曲线绘制#################################### from sklearn import metrics import numpy as np import matplotlib.pyplot as plt from matplotlib.pyplot import imshow from sklearn.metrics import classification_report, confusion_matrix import seaborn as sns import pandas as pd import math from sklearn.metrics import roc_auc_score, auc from sklearn.preprocessing import LabelBinarizerdef multiclass_roc_auc_score(y_test, y_pred, averagemacro):# 判断 y_test 是否需要进行标签二值化if len(np.unique(y_test)) 2: # 假设 y_test 是类别标签且类别数大于 2lb LabelBinarizer()lb.fit(y_test)y_test lb.transform(y_test)return roc_auc_score(y_test, y_pred, averageaverage)def plot_roc(name, labels, predictions, **kwargs):lb LabelBinarizer()labels lb.fit_transform(labels) # one-hot 编码# predictions 不需要进行标签二值化# 计算ROC曲线和AUC值fpr dict()tpr dict()roc_auc dict()class_num len(class_names)for i in range(class_num): # class_num是类别数目fpr[i], tpr[i], _ metrics.roc_curve(labels[:, i], predictions[:, i])roc_auc[i] metrics.auc(fpr[i], tpr[i])for i in range(class_num):plt.plot(fpr[i], tpr[i], labelROC curve of class {0} (area {1:0.2f}) .format(i, roc_auc[i]))plt.plot([0, 1], [0, 1], k--)plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel(False Positive Rate)plt.ylabel(True Positive Rate)plt.title(Receiver operating characteristic example)plt.legend(loclower right)plt.show()# 确保模型处于评估模式 model.eval()def evaluate_model_pre(model, data_loader, device):model.eval()predictions []labels []with torch.no_grad():for inputs, targets in data_loader:inputs inputs.to(device)targets targets.to(device)outputs model(inputs)# 使用 softmax 函数转换成概率值prob_outputs torch.nn.functional.softmax(outputs, dim1)predictions.append(prob_outputs.detach().cpu().numpy())labels.append(targets.detach().cpu().numpy())return np.concatenate(predictions, axis0), np.concatenate(labels, axis0)val_pre_auc, val_label_auc evaluate_model_pre(model, dataloaders[val], device) train_pre_auc, train_label_auc evaluate_model_pre(model, dataloaders[train], device)auc_score_val multiclass_roc_auc_score(val_label_auc, val_pre_auc) auc_score_train multiclass_roc_auc_score(train_label_auc, train_pre_auc)plot_roc(validation AUC: {0:.4f}.format(auc_score_val), val_label_auc, val_pre_auc, colorred, linestyle--) plot_roc(training AUC: {0:.4f}.format(auc_score_train), train_label_auc, train_pre_auc, colorblue, linestyle--)print(训练集的AUC值为,auc_score_train, 验证集的AUC值为,auc_score_val) b输出结果学习曲线 c输出结果混淆矩阵 d输出结果性能参数 e输出结果ROC曲线 三、数据 链接https://pan.baidu.com/s/1rqu15KAUxjNBaWYfEmPwgQ?pwdxfyn 提取码xfyn
http://www.hkea.cn/news/14344266/

相关文章:

  • 商务局网站溪江农贸市场建设建设工程专业承包交易中心网站
  • 基于html5开发的网站开发厦门网站建设公司哪家好
  • 网页设计作业设计意图wordpress怎么优化图片大小
  • 网站备案归哪里管商城网站欣赏
  • 常熟网站开发要怎么制作网站
  • 网站开发可选择方案有哪些网站摸板
  • 手机网页版网站开发如何做网站不被坑
  • 腾讯企业网盘网站如何做seo
  • 国外网站体彩网站建设
  • 网站建设翻译成英文自动跳转手机网站
  • 手机网站设计作品欣赏seo推广怎么学
  • 网站培训方案云开发是什么
  • 有做火币网这种网站的吗免费正能量软件下载
  • wordpress 文章编辑框插件seo服务深圳
  • vue做视频网站可以做任务的创意设计网站
  • 权威的网站建设公司wordpress 代码分析
  • 网站搭建服务器需要什么麦包包的网站建设分析
  • 阿里云建wordpress站阿里巴巴网站建设建议
  • 桂林网站建站免费营销型网站
  • 芜湖网站建设费用电影wordpress
  • 餐饮手机网站建设合肥做拼拼团网站的公司
  • 未来做哪些网站致富永久免费虚拟机
  • dw做aspx网站食品公司网站建设
  • 著名网站用什么语言做后台做网站推广多少钱
  • 网站建设方案总结语结婚网站模板
  • 茂名免费自助建站模板免费 空间 网站 国外
  • 表白网站怎么做MUSIK V1.0 WORDPRESS
  • 购买域名如何建设网站广东网站优化
  • 网站做二维码吗网站建设用阿里还是华为云
  • 石岩网站建设公司网站开发客户哪里找