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

遂宁市网站建设_网站建设公司_Sketch_seo优化

简洁大气企业网站欣赏,男女在一起做恶心的事网站,网站推广一般多少钱,网站建设的目标及功能定位基于WIN10的64位系统演示 一、写在前面 #xff08;1#xff09;MLP-Mixer MLP-Mixer#xff08;Multilayer Perceptron Mixer#xff09;是Google在2021年提出的一种新型的视觉模型结构。它的主要特点是完全使用多层感知机#xff08;MLP#xff09;来处理图像#…基于WIN10的64位系统演示 一、写在前面 1MLP-Mixer MLP-MixerMultilayer Perceptron Mixer是Google在2021年提出的一种新型的视觉模型结构。它的主要特点是完全使用多层感知机MLP来处理图像而不是使用常见的卷积Convolution或者自注意力Self-Attention机制。 MLP-Mixer的结构主要包括两种类型的层Token Mixing层和Channel Mixing层。在Token Mixing层中模型会将图像分割成若干个patch类似于像素块然后对这些patch进行处理。在Channel Mixing层中模型会对每个patch的通道进行处理。这两种类型的层交替堆叠形成了最终的模型结构。 MLP-Mixer的设计目标是探索除卷积和自注意力之外的其他可能的模型结构以期在保持性能的同时降低模型的复杂性和计算成本。实验结果显示MLP-Mixer在一些图像分类任务上的性能可以与ResNet和Transformer等主流模型相媲美。 然而需要注意的是虽然MLP-Mixer在某些方面展现出了很好的性能但它并不意味着会替代卷积或者自注意力模型。实际上每种模型都有其适用的场景和优势MLP-Mixer提供了一个新的视角和工具供我们处理视觉任务。 2MLP-Mixer的码源 本文使用 mlp-mixer-pytorch 库来实现MLP-Mixer。 当然得先安装这个库 a首先打开Anaconda Prompt。在开始菜单中找到它或者直接在搜索栏中输入Anaconda Prompt。在打开的Anaconda Prompt中如果你想在一个特定的环境中安装mlp_mixer_pytorch你需要先激活这个环境。假设你的环境名为myenv你可以使用以下命令来激活这个环境 conda activate myenv b接下来使用pip来安装mlp_mixer_pytorch库。在Anaconda Prompt中输入以下命令并按回车键 pip install mlp-mixer-pytorch 二、MLP-Mixer迁移学习代码实战 我们继续胸片的数据集肺结核病人和健康人的胸片的识别。其中肺结核病人700张健康人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) b导入数据集 import torch from torchvision import datasets, transforms import os# 数据集路径 data_dir ./MTB# 图像的大小 img_height 256 img_width 256# 数据预处理 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) # 假设训练集占80% 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 c导入MLPMixer from mlp_mixer_pytorch import MLPMixernum_classes len(class_names) # 根据数据集的类别数量来设置模型的输出类别数量# 构建MLP-Mixer模型 model MLPMixer(image_size img_height, # 图像的高和宽channels 3, # 图像的通道数patch_size 16, # MLP-Mixer的patch大小dim 512, # MLP-Mixer的维度depth 12, # MLP-Mixer的深度num_classes num_classes # 输出类别数量 )# 将模型移动到GPU model model.to(device)# 打印模型摘要 print(model) 说明mlp-mixer-pytorch库的主要功能就是提供了一个MLP-Mixer的类可以通过实例化这个类来创建一个MLP-Mixer模型。在创建模型时可以通过参数来设置图像的大小、通道数、patch的大小、模型的维度、深度以及输出类别的数量等。 需要注意的是mlp-mixer-pytorch库提供的MLP-Mixer模型默认是随机初始化的也就是说并没有加载预训练权重。如果你有MLP-Mixer的预训练权重可以在创建模型后加载。 d编译模型 # 定义损失函数 criterion nn.CrossEntropyLoss()# 定义优化器 optimizer optim.Adam(model.parameters())# 定义学习率调度器 exp_lr_scheduler lr_scheduler.StepLR(optimizer, step_size7, gamma0.1)# 开始训练模型 num_epochs 20 best_model_wts copy.deepcopy(model.state_dict()) best_acc 0.0# 初始化记录器 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() # Set model to training modeelse:model.eval() # Set model to evaluate moderunning_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))# 深拷贝模型if phase val and epoch_acc best_acc:best_acc epoch_accbest_model_wts copy.deepcopy(model.state_dict())print()print(Best val Acc: {:4f}.format(best_acc))# 加载最佳模型权重 #model.load_state_dict(best_model_wts) #torch.save(model, shufflenet_best_model.pth) #print(The trained model has been saved.) eAccuracy和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) 观察模型训练情况 蓝色为训练集橙色为验证集。 f混淆矩阵可视化以及模型参数 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) 效果不错 gAUC曲线绘制 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 mathdef plot_roc(name, labels, predictions, **kwargs):fp, tp, _ metrics.roc_curve(labels, predictions)plt.plot(fp, tp, labelname, linewidth2, **kwargs)plt.plot([0, 1], [0, 1], colororange, linestyle--)plt.xlabel(False positives rate)plt.ylabel(True positives rate)ax plt.gca()ax.set_aspect(equal)# 确保模型处于评估模式 model.eval()train_ds dataloaders[train] val_ds dataloaders[val]val_pre_auc [] val_label_auc []for images, labels in val_ds:for image, label in zip(images, labels): img_array image.unsqueeze(0).to(device) # 在第0维增加一个维度并将图像转移到适当的设备上prediction_auc model(img_array) # 使用模型进行预测val_pre_auc.append(prediction_auc.detach().cpu().numpy()[:,1])val_label_auc.append(label.item()) # 使用Tensor.item()获取Tensor的值 auc_score_val metrics.roc_auc_score(val_label_auc, val_pre_auc)train_pre_auc [] train_label_auc []for images, labels in train_ds:for image, label in zip(images, labels):img_array_train image.unsqueeze(0).to(device) prediction_auc model(img_array_train)train_pre_auc.append(prediction_auc.detach().cpu().numpy()[:,1]) # 输出概率而不是标签train_label_auc.append(label.item()) auc_score_train metrics.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--) plt.legend(loclower right) #plt.savefig(roc.pdf, dpi300,formatpdf)print(训练集的AUC值为,auc_score_train, 验证集的AUC值为,auc_score_val) ROC曲线如下 这个ROC曲线也是不错的全部大于95% 三、写在最后 截至目前图像分类领域基本就是CNN、Transformer和MLP三足鼎立了。孰优孰劣还不好说中庸之道那就是各有千秋。他们之间的两两组合或者一起融合的话效果又会如何 四、数据 链接https://pan.baidu.com/s/15vSVhz1rQBtqNkNp2GQyVw?pwdx3jf 提取码x3jf
http://www.lebaoying.cn/news/18760.html

相关文章:

  • 广州外贸营销型网站建设为什么要建设网站
  • 大连城乡建设网站如何给网站做seo优化
  • 西安网站建站品牌wordpress时间表插件
  • 2015年做啥网站能致富智慧团建网站pc端
  • 为学校网站做网站推广策划书专业做英文网站的公司
  • 网站开发无形资产无锡网站制作启
  • 丰台网站关键词优化试玩网站设计建设
  • 谷歌网站收录入口动漫设计一般用什么软件
  • 中国企业网官方网站查询珠海网站备案
  • 如何建立免费的个人企业网站莞邑调解平台上线
  • 智慧团建网站入口官网在线设计网站源码
  • 掌网站开发的基本流程全球十大室内设计公司排名榜
  • 现在互联网有什么平台可以做seo是什么简称
  • 学院网站建设流程龙游县住房和城乡建设局网站
  • 沈阳公司做网站的简历模板免费下载的网页
  • 专门做纪录片的网站中文wordpress主题下载地址
  • 广南网站制作软件小程序定制
  • 好用的ppt模板网站网站友情链接连接
  • 做民宿的网站有哪些西安广告设计公司有哪些
  • 厦门有没网站建设的公司百度提交网址入口
  • 网站制作方案有哪些建设一个功能简单的网站
  • 设计师如何做自己的个人网站珠海知名网站
  • 做婚纱摄影网站多少钱在网站用什么做页面布局
  • 网站建设项目竞争性招标文件贵阳建设厅网站
  • 做淘宝详情页好的网站定制建站公司
  • 四川网站备案核验单亚马逊如何做折扣网站的营销
  • 诸城做网站建设的网站引导动画
  • 温泉网站建设深圳网站开发深圳网站设计
  • 江都网站建设楼市最新消息2023年房价走势
  • 想学做网站学什么编程语言大连网站建设辽icp备