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

网站侧边栏导航代码wordpress怎么缩短标题

网站侧边栏导航代码,wordpress怎么缩短标题,stanley工具网站开发,互联网编程技术Pytorch | 从零构建MobileNet对CIFAR10进行分类 CIFAR10数据集MobileNet设计理念网络结构技术优势应用领域 MobileNet结构代码详解结构代码代码详解DepthwiseSeparableConv 类初始化方法前向传播 forward 方法 MobileNet 类初始化方法前向传播 forward 方法 训练和测试训练代码… Pytorch | 从零构建MobileNet对CIFAR10进行分类 CIFAR10数据集MobileNet设计理念网络结构技术优势应用领域 MobileNet结构代码详解结构代码代码详解DepthwiseSeparableConv 类初始化方法前向传播 forward 方法 MobileNet 类初始化方法前向传播 forward 方法 训练和测试训练代码train.py测试代码test.py训练过程和测试结果 代码汇总mobilenet.pytrain.pytest.py 前面文章我们构建了AlexNet、Vgg、GoogleNet对CIFAR10进行分类 Pytorch | 从零构建AlexNet对CIFAR10进行分类 Pytorch | 从零构建Vgg对CIFAR10进行分类 Pytorch | 从零构建GoogleNet对CIFAR10进行分类 Pytorch | 从零构建ResNet对CIFAR10进行分类 这篇文章我们来构建MobileNet. CIFAR10数据集 CIFAR-10数据集是由加拿大高级研究所CIFAR收集整理的用于图像识别研究的常用数据集基本信息如下 数据规模该数据集包含60,000张彩色图像分为10个不同的类别每个类别有6,000张图像。通常将其中50,000张作为训练集用于模型的训练10,000张作为测试集用于评估模型的性能。图像尺寸所有图像的尺寸均为32×32像素这相对较小的尺寸使得模型在处理该数据集时能够相对快速地进行训练和推理但也增加了图像分类的难度。类别内容涵盖了飞机plane、汽车car、鸟bird、猫cat、鹿deer、狗dog、青蛙frog、马horse、船ship、卡车truck这10个不同的类别这些类别都是现实世界中常见的物体具有一定的代表性。 下面是一些示例样本 MobileNet MobileNet是由谷歌在2017年提出的一种轻量级卷积神经网络主要用于移动端和嵌入式设备等资源受限的环境中进行图像识别和分类任务以下是对其的详细介绍 设计理念 深度可分离卷积其核心创新是采用了深度可分离卷积Depthwise Separable Convolution来替代传统的卷积操作。深度可分离卷积将标准卷积分解为一个深度卷积Depthwise Convolution和一个逐点卷积Pointwise Convolution大大减少了计算量和模型参数同时保持了较好的性能。 网络结构 标准卷积层输入层为3通道的彩色图像首先经过一个普通的卷积层conv1将通道数从3变为32同时进行了步长为2的下采样操作以减小图像尺寸。深度可分离卷积层包含了一系列的深度可分离卷积层dsconv1至dsconv13这些层按照一定的规律进行排列通道数逐渐增加同时通过不同的步长进行下采样以提取不同层次的特征。池化层和全连接层在深度可分离卷积层之后通过一个自适应平均池化层avgpool将特征图转换为1x1的大小然后通过一个全连接层fc将特征映射到指定的类别数完成分类任务。 技术优势 模型轻量化通过深度可分离卷积的使用大大减少了模型的参数量和计算量使得模型更加轻量化适合在移动设备和嵌入式设备上运行。计算效率高由于减少了计算量MobileNet在推理时具有较高的计算效率可以快速地对图像进行分类和识别满足实时性要求较高的应用场景。性能表现较好尽管模型轻量化但MobileNet在图像识别任务上仍然具有较好的性能表现能够在保持较高准确率的同时大大降低模型的复杂度。 应用领域 移动端视觉任务广泛应用于各种移动端设备如智能手机、平板电脑等用于图像分类、目标检测、人脸识别等视觉任务。嵌入式设备视觉在嵌入式设备如智能摄像头、自动驾驶汽车等领域MobileNet可以为这些设备提供高效的视觉处理能力实现实时的图像分析和决策。物联网视觉应用在物联网设备中MobileNet可以帮助实现对图像数据的快速处理和分析为智能家居、智能安防等应用提供支持。 MobileNet结构代码详解 结构代码 import torch import torch.nn as nnclass DepthwiseSeparableConv(nn.Module):def __init__(self, in_channels, out_channels, kernel_size3, stride1, padding1, biasFalse):super(DepthwiseSeparableConv, self).__init__()self.depthwise nn.Conv2d(in_channels, in_channels, kernel_size, stride, padding, groupsin_channels, biasbias)self.bn1 nn.BatchNorm2d(in_channels)self.relu1 nn.ReLU6(inplaceTrue)self.pointwise nn.Conv2d(in_channels, out_channels, kernel_size1, biasbias)self.bn2 nn.BatchNorm2d(out_channels)self.relu2 nn.ReLU6(inplaceTrue)def forward(self, x):out self.depthwise(x)out self.bn1(out)out self.relu1(out)out self.pointwise(out)out self.bn2(out)out self.relu2(out)return outclass MobileNet(nn.Module):def __init__(self, num_classes):super(MobileNet, self).__init__()self.conv1 nn.Conv2d(3, 32, kernel_size3, stride2, padding1, biasFalse)self.bn1 nn.BatchNorm2d(32)self.relu nn.ReLU6(inplaceTrue)self.dsconv1 DepthwiseSeparableConv(32, 64, stride1)self.dsconv2 DepthwiseSeparableConv(64, 128, stride2)self.dsconv3 DepthwiseSeparableConv(128, 128, stride1)self.dsconv4 DepthwiseSeparableConv(128, 256, stride2)self.dsconv5 DepthwiseSeparableConv(256, 256, stride1)self.dsconv6 DepthwiseSeparableConv(256, 512, stride2)self.dsconv7 DepthwiseSeparableConv(512, 512, stride1)self.dsconv8 DepthwiseSeparableConv(512, 512, stride1)self.dsconv9 DepthwiseSeparableConv(512, 512, stride1)self.dsconv10 DepthwiseSeparableConv(512, 512, stride1)self.dsconv11 DepthwiseSeparableConv(512, 512, stride1)self.dsconv12 DepthwiseSeparableConv(512, 1024, stride2)self.dsconv13 DepthwiseSeparableConv(1024, 1024, stride1)self.avgpool nn.AdaptiveAvgPool2d((1, 1))self.fc nn.Linear(1024, num_classes)def forward(self, x):out self.conv1(x)out self.bn1(out)out self.relu(out)out self.dsconv1(out)out self.dsconv2(out)out self.dsconv3(out)out self.dsconv4(out)out self.dsconv5(out)out self.dsconv6(out)out self.dsconv7(out)out self.dsconv8(out)out self.dsconv9(out)out self.dsconv10(out)out self.dsconv11(out)out self.dsconv12(out)out self.dsconv13(out)out self.avgpool(out)out out.view(out.size(0), -1)out self.fc(out)return out代码详解 以下是对上述代码的详细解释 DepthwiseSeparableConv 类 这是一个自定义的深度可分离卷积层类继承自 nn.Module。 初始化方法 参数说明 in_channels输入通道数指定输入数据的通道数量。out_channels输出通道数即卷积操作后输出特征图的通道数量。kernel_size卷积核大小默认为3用于定义卷积操作中卷积核的尺寸。stride步长默认为1控制卷积核在输入特征图上滑动的步长。padding填充大小默认为1在输入特征图周围添加的填充像素数量以保持特征图尺寸在卷积过程中合适变化。bias是否使用偏置默认为 False决定卷积层是否添加偏置项。 构建的层及作用 self.depthwise这是一个深度卷积层nn.Conv2d通过设置 groupsin_channels实现了深度可分离卷积中的深度卷积部分它对每个输入通道分别进行卷积操作有效地减少了计算量。self.bn1批归一化层nn.BatchNorm2d用于对深度卷积后的输出进行归一化处理加速模型收敛并提升模型的泛化能力。self.relu1激活函数层nn.ReLU6采用 ReLU6 激活函数输出值限定在0到6之间并且设置 inplaceTrue意味着直接在输入的张量上进行修改节省内存空间增加非线性特性。self.pointwise逐点卷积层nn.Conv2d卷积核大小为1用于将深度卷积后的特征图在通道维度上进行融合改变通道数到指定的 out_channels。self.bn2又是一个批归一化层对逐点卷积后的输出进行归一化处理。self.relu2同样是 ReLU6 激活函数层进一步增加非线性处理逐点卷积归一化后的结果。 前向传播 forward 方法 定义了数据在该层的前向传播过程 首先将输入 x 通过深度卷积层 self.depthwise 进行深度卷积操作得到输出特征图。然后将深度卷积的输出依次经过批归一化层 self.bn1 和激活函数层 self.relu1。接着把经过处理后的特征图通过逐点卷积层 self.pointwise 进行逐点卷积改变通道数等特征。最后再经过批归一化层 self.bn2 和激活函数层 self.relu2并返回最终的输出结果。 MobileNet 类 这是定义的 MobileNet 网络模型类同样继承自 nn.Module。 初始化方法 参数说明 num_classes分类的类别数量用于最后全连接层输出对应类别数的预测结果。 构建的层及作用 self.conv1普通的二维卷积层nn.Conv2d输入通道数为3通常对应RGB图像的三个通道输出通道数为32卷积核大小为3步长为2用于对输入图像进行初步的特征提取和下采样减少特征图尺寸同时增加通道数。self.bn1批归一化层对 conv1 卷积后的输出进行归一化。self.relu激活函数层采用 ReLU6 激活函数给特征图增加非线性。一系列的 self.dsconv 层从 dsconv1 到 dsconv13都是前面定义的深度可分离卷积层 DepthwiseSeparableConv 的实例它们逐步对特征图进行更精细的特征提取、通道变换以及下采样等操作不同的 dsconv 层有着不同的输入输出通道数以及步长设置以此构建出 MobileNet 网络的主体结构不断提取和融合特征逐步降低特征图尺寸并增加通道数来获取更高级、更抽象的特征表示。self.avgpool自适应平均池化层nn.AdaptiveAvgPool2d将输入特征图转换为指定大小 (1, 1) 的输出起到全局平均池化的作用进一步压缩特征图信息同时保持特征图的维度一致性方便后续全连接层处理。self.fc全连接层nn.Linear输入维度为1024与前面网络结构最终输出的特征维度对应输出维度为 num_classes用于将经过前面卷积和池化等操作得到的特征向量映射到对应类别数量的预测分数上实现分类任务。 前向传播 forward 方法 定义了 MobileNet 模型整体的前向传播流程 首先将输入 x 通过 conv1 进行初始卷积、bn1 进行归一化以及 relu 激活。然后依次通过各个深度可分离卷积层dsconv1 到 dsconv13逐步提取和变换特征。接着经过自适应平均池化层 self.avgpool将特征图压缩为 (1, 1) 大小。再通过 out.view(out.size(0), -1) 操作将特征图展平为一维向量其中 out.size(0) 表示批量大小-1 表示自动计算剩余维度大小使其展平。最后将展平后的特征向量通过全连接层 self.fc 得到最终的分类预测结果并返回。 训练和测试 训练代码train.py import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from models import * import matplotlib.pyplot as pltimport ssl ssl._create_default_https_context ssl._create_unverified_context# 定义数据预处理操作 transform transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.491, 0.482, 0.446), (0.247, 0.243, 0.261))])# 加载CIFAR10训练集 trainset torchvision.datasets.CIFAR10(root./data, trainTrue,downloadFalse, transformtransform) trainloader torch.utils.data.DataLoader(trainset, batch_size128,shuffleTrue, num_workers2)# 定义设备GPU优先若可用 device torch.device(cuda if torch.cuda.is_available() else cpu)# 实例化模型 model_name MobileNet if model_name AlexNet:model AlexNet(num_classes10).to(device) elif model_name Vgg_A:model Vgg(cfg_vggA, num_classes10).to(device) elif model_name Vgg_A-LRN:model Vgg(cfg_vggA-LRN, num_classes10).to(device) elif model_name Vgg_B:model Vgg(cfg_vggB, num_classes10).to(device) elif model_name Vgg_C:model Vgg(cfg_vggC, num_classes10).to(device) elif model_name Vgg_D:model Vgg(cfg_vggD, num_classes10).to(device) elif model_name Vgg_E:model Vgg(cfg_vggE, num_classes10).to(device) elif model_name GoogleNet:model GoogleNet(num_classes10).to(device) elif model_name ResNet18:model ResNet18(num_classes10).to(device) elif model_name ResNet34:model ResNet34(num_classes10).to(device) elif model_name ResNet50:model ResNet50(num_classes10).to(device) elif model_name ResNet101:model ResNet101(num_classes10).to(device) elif model_name ResNet152:model ResNet152(num_classes10).to(device) elif model_name MobileNet:model MobileNet(num_classes10).to(device)criterion nn.CrossEntropyLoss() optimizer optim.Adam(model.parameters(), lr0.001)# 训练轮次 epochs 15def train(model, trainloader, criterion, optimizer, device):model.train()running_loss 0.0correct 0total 0for i, data in enumerate(trainloader, 0):inputs, labels data[0].to(device), data[1].to(device)optimizer.zero_grad()outputs model(inputs)loss criterion(outputs, labels)loss.backward()optimizer.step()running_loss loss.item()_, predicted outputs.max(1)total labels.size(0)correct predicted.eq(labels).sum().item()epoch_loss running_loss / len(trainloader)epoch_acc 100. * correct / totalreturn epoch_loss, epoch_accif __name__ __main__:loss_history, acc_history [], []for epoch in range(epochs):train_loss, train_acc train(model, trainloader, criterion, optimizer, device)print(fEpoch {epoch 1}: Train Loss: {train_loss:.4f}, Train Acc: {train_acc:.2f}%)loss_history.append(train_loss)acc_history.append(train_acc)# 保存模型权重每5轮次保存到weights文件夹下if (epoch 1) % 5 0:torch.save(model.state_dict(), fweights/{model_name}_epoch_{epoch 1}.pth)# 绘制损失曲线plt.plot(range(1, epochs1), loss_history, labelLoss, markero)plt.xlabel(Epoch)plt.ylabel(Loss)plt.title(Training Loss Curve)plt.legend()plt.savefig(fresults\\{model_name}_train_loss_curve.png)plt.close()# 绘制准确率曲线plt.plot(range(1, epochs1), acc_history, labelAccuracy, markero)plt.xlabel(Epoch)plt.ylabel(Accuracy (%))plt.title(Training Accuracy Curve)plt.legend()plt.savefig(fresults\\{model_name}_train_acc_curve.png)plt.close()测试代码test.py import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms from models import *import ssl ssl._create_default_https_context ssl._create_unverified_context # 定义数据预处理操作 transform transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.491, 0.482, 0.446), (0.247, 0.243, 0.261))])# 加载CIFAR10测试集 testset torchvision.datasets.CIFAR10(root./data, trainFalse,downloadFalse, transformtransform) testloader torch.utils.data.DataLoader(testset, batch_size128,shuffleFalse, num_workers2)# 定义设备GPU优先若可用 device torch.device(cuda if torch.cuda.is_available() else cpu)# 实例化模型 model_name MobileNet if model_name AlexNet:model AlexNet(num_classes10).to(device) elif model_name Vgg_A:model Vgg(cfg_vggA, num_classes10).to(device) elif model_name Vgg_A-LRN:model Vgg(cfg_vggA-LRN, num_classes10).to(device) elif model_name Vgg_B:model Vgg(cfg_vggB, num_classes10).to(device) elif model_name Vgg_C:model Vgg(cfg_vggC, num_classes10).to(device) elif model_name Vgg_D:model Vgg(cfg_vggD, num_classes10).to(device) elif model_name Vgg_E:model Vgg(cfg_vggE, num_classes10).to(device) elif model_name GoogleNet:model GoogleNet(num_classes10).to(device) elif model_name ResNet18:model ResNet18(num_classes10).to(device) elif model_name ResNet34:model ResNet34(num_classes10).to(device) elif model_name ResNet50:model ResNet50(num_classes10).to(device) elif model_name ResNet101:model ResNet101(num_classes10).to(device) elif model_name ResNet152:model ResNet152(num_classes10).to(device) elif model_name MobileNet:model MobileNet(num_classes10).to(device)criterion nn.CrossEntropyLoss()# 加载模型权重 weights_path fweights/{model_name}_epoch_15.pth model.load_state_dict(torch.load(weights_path, map_locationdevice))def test(model, testloader, criterion, device):model.eval()running_loss 0.0correct 0total 0with torch.no_grad():for data in testloader:inputs, labels data[0].to(device), data[1].to(device)outputs model(inputs)loss criterion(outputs, labels)running_loss loss.item()_, predicted outputs.max(1)total labels.size(0)correct predicted.eq(labels).sum().item()epoch_loss running_loss / len(testloader)epoch_acc 100. * correct / totalreturn epoch_loss, epoch_accif __name__ __main__:test_loss, test_acc test(model, testloader, criterion, device)print(f{model_name} Test)print(fLoad Model Weights From: {weights_path})print(fTest Loss: {test_loss:.4f}, Test Acc: {test_acc:.2f}%)训练过程和测试结果 训练过程损失函数变化曲线 训练过程准确率变化曲线 测试结果 代码汇总 项目github地址 项目结构 |--data |--models|--__init__.py|-mobilenet.py|--... |--results |--weights |--train.py |--test.pymobilenet.py import torch import torch.nn as nnclass DepthwiseSeparableConv(nn.Module):def __init__(self, in_channels, out_channels, kernel_size3, stride1, padding1, biasFalse):super(DepthwiseSeparableConv, self).__init__()self.depthwise nn.Conv2d(in_channels, in_channels, kernel_size, stride, padding, groupsin_channels, biasbias)self.bn1 nn.BatchNorm2d(in_channels)self.relu1 nn.ReLU6(inplaceTrue)self.pointwise nn.Conv2d(in_channels, out_channels, kernel_size1, biasbias)self.bn2 nn.BatchNorm2d(out_channels)self.relu2 nn.ReLU6(inplaceTrue)def forward(self, x):out self.depthwise(x)out self.bn1(out)out self.relu1(out)out self.pointwise(out)out self.bn2(out)out self.relu2(out)return outclass MobileNet(nn.Module):def __init__(self, num_classes):super(MobileNet, self).__init__()self.conv1 nn.Conv2d(3, 32, kernel_size3, stride2, padding1, biasFalse)self.bn1 nn.BatchNorm2d(32)self.relu nn.ReLU6(inplaceTrue)self.dsconv1 DepthwiseSeparableConv(32, 64, stride1)self.dsconv2 DepthwiseSeparableConv(64, 128, stride2)self.dsconv3 DepthwiseSeparableConv(128, 128, stride1)self.dsconv4 DepthwiseSeparableConv(128, 256, stride2)self.dsconv5 DepthwiseSeparableConv(256, 256, stride1)self.dsconv6 DepthwiseSeparableConv(256, 512, stride2)self.dsconv7 DepthwiseSeparableConv(512, 512, stride1)self.dsconv8 DepthwiseSeparableConv(512, 512, stride1)self.dsconv9 DepthwiseSeparableConv(512, 512, stride1)self.dsconv10 DepthwiseSeparableConv(512, 512, stride1)self.dsconv11 DepthwiseSeparableConv(512, 512, stride1)self.dsconv12 DepthwiseSeparableConv(512, 1024, stride2)self.dsconv13 DepthwiseSeparableConv(1024, 1024, stride1)self.avgpool nn.AdaptiveAvgPool2d((1, 1))self.fc nn.Linear(1024, num_classes)def forward(self, x):out self.conv1(x)out self.bn1(out)out self.relu(out)out self.dsconv1(out)out self.dsconv2(out)out self.dsconv3(out)out self.dsconv4(out)out self.dsconv5(out)out self.dsconv6(out)out self.dsconv7(out)out self.dsconv8(out)out self.dsconv9(out)out self.dsconv10(out)out self.dsconv11(out)out self.dsconv12(out)out self.dsconv13(out)out self.avgpool(out)out out.view(out.size(0), -1)out self.fc(out)return outtrain.py import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from models import * import matplotlib.pyplot as pltimport ssl ssl._create_default_https_context ssl._create_unverified_context# 定义数据预处理操作 transform transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.491, 0.482, 0.446), (0.247, 0.243, 0.261))])# 加载CIFAR10训练集 trainset torchvision.datasets.CIFAR10(root./data, trainTrue,downloadFalse, transformtransform) trainloader torch.utils.data.DataLoader(trainset, batch_size128,shuffleTrue, num_workers2)# 定义设备GPU优先若可用 device torch.device(cuda if torch.cuda.is_available() else cpu)# 实例化模型 model_name MobileNet if model_name AlexNet:model AlexNet(num_classes10).to(device) elif model_name Vgg_A:model Vgg(cfg_vggA, num_classes10).to(device) elif model_name Vgg_A-LRN:model Vgg(cfg_vggA-LRN, num_classes10).to(device) elif model_name Vgg_B:model Vgg(cfg_vggB, num_classes10).to(device) elif model_name Vgg_C:model Vgg(cfg_vggC, num_classes10).to(device) elif model_name Vgg_D:model Vgg(cfg_vggD, num_classes10).to(device) elif model_name Vgg_E:model Vgg(cfg_vggE, num_classes10).to(device) elif model_name GoogleNet:model GoogleNet(num_classes10).to(device) elif model_name ResNet18:model ResNet18(num_classes10).to(device) elif model_name ResNet34:model ResNet34(num_classes10).to(device) elif model_name ResNet50:model ResNet50(num_classes10).to(device) elif model_name ResNet101:model ResNet101(num_classes10).to(device) elif model_name ResNet152:model ResNet152(num_classes10).to(device) elif model_name MobileNet:model MobileNet(num_classes10).to(device)criterion nn.CrossEntropyLoss() optimizer optim.Adam(model.parameters(), lr0.001)# 训练轮次 epochs 15def train(model, trainloader, criterion, optimizer, device):model.train()running_loss 0.0correct 0total 0for i, data in enumerate(trainloader, 0):inputs, labels data[0].to(device), data[1].to(device)optimizer.zero_grad()outputs model(inputs)loss criterion(outputs, labels)loss.backward()optimizer.step()running_loss loss.item()_, predicted outputs.max(1)total labels.size(0)correct predicted.eq(labels).sum().item()epoch_loss running_loss / len(trainloader)epoch_acc 100. * correct / totalreturn epoch_loss, epoch_accif __name__ __main__:loss_history, acc_history [], []for epoch in range(epochs):train_loss, train_acc train(model, trainloader, criterion, optimizer, device)print(fEpoch {epoch 1}: Train Loss: {train_loss:.4f}, Train Acc: {train_acc:.2f}%)loss_history.append(train_loss)acc_history.append(train_acc)# 保存模型权重每5轮次保存到weights文件夹下if (epoch 1) % 5 0:torch.save(model.state_dict(), fweights/{model_name}_epoch_{epoch 1}.pth)# 绘制损失曲线plt.plot(range(1, epochs1), loss_history, labelLoss, markero)plt.xlabel(Epoch)plt.ylabel(Loss)plt.title(Training Loss Curve)plt.legend()plt.savefig(fresults\\{model_name}_train_loss_curve.png)plt.close()# 绘制准确率曲线plt.plot(range(1, epochs1), acc_history, labelAccuracy, markero)plt.xlabel(Epoch)plt.ylabel(Accuracy (%))plt.title(Training Accuracy Curve)plt.legend()plt.savefig(fresults\\{model_name}_train_acc_curve.png)plt.close()test.py import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms from models import *import ssl ssl._create_default_https_context ssl._create_unverified_context # 定义数据预处理操作 transform transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.491, 0.482, 0.446), (0.247, 0.243, 0.261))])# 加载CIFAR10测试集 testset torchvision.datasets.CIFAR10(root./data, trainFalse,downloadFalse, transformtransform) testloader torch.utils.data.DataLoader(testset, batch_size128,shuffleFalse, num_workers2)# 定义设备GPU优先若可用 device torch.device(cuda if torch.cuda.is_available() else cpu)# 实例化模型 model_name MobileNet if model_name AlexNet:model AlexNet(num_classes10).to(device) elif model_name Vgg_A:model Vgg(cfg_vggA, num_classes10).to(device) elif model_name Vgg_A-LRN:model Vgg(cfg_vggA-LRN, num_classes10).to(device) elif model_name Vgg_B:model Vgg(cfg_vggB, num_classes10).to(device) elif model_name Vgg_C:model Vgg(cfg_vggC, num_classes10).to(device) elif model_name Vgg_D:model Vgg(cfg_vggD, num_classes10).to(device) elif model_name Vgg_E:model Vgg(cfg_vggE, num_classes10).to(device) elif model_name GoogleNet:model GoogleNet(num_classes10).to(device) elif model_name ResNet18:model ResNet18(num_classes10).to(device) elif model_name ResNet34:model ResNet34(num_classes10).to(device) elif model_name ResNet50:model ResNet50(num_classes10).to(device) elif model_name ResNet101:model ResNet101(num_classes10).to(device) elif model_name ResNet152:model ResNet152(num_classes10).to(device) elif model_name MobileNet:model MobileNet(num_classes10).to(device)criterion nn.CrossEntropyLoss()# 加载模型权重 weights_path fweights/{model_name}_epoch_15.pth model.load_state_dict(torch.load(weights_path, map_locationdevice))def test(model, testloader, criterion, device):model.eval()running_loss 0.0correct 0total 0with torch.no_grad():for data in testloader:inputs, labels data[0].to(device), data[1].to(device)outputs model(inputs)loss criterion(outputs, labels)running_loss loss.item()_, predicted outputs.max(1)total labels.size(0)correct predicted.eq(labels).sum().item()epoch_loss running_loss / len(testloader)epoch_acc 100. * correct / totalreturn epoch_loss, epoch_accif __name__ __main__:test_loss, test_acc test(model, testloader, criterion, device)print(f{model_name} Test)print(fLoad Model Weights From: {weights_path})print(fTest Loss: {test_loss:.4f}, Test Acc: {test_acc:.2f}%)
http://www.dnsts.com.cn/news/122990.html

相关文章:

  • 网站开发之前前后端不分离装饰公司加盟
  • 海珠区住房和水务建设局网站新域名优化
  • 免费网站一级域名注册wordpress模板修改图片大小
  • .net 网站开发 教程广西网站建设
  • 免费浏览外国网站的软件网站维护兼职
  • 奎屯市住房和城乡建设局网站wordpress开通邮件注册
  • 购物网站的首页是静态可以做没有水印的视频网站
  • 建设音乐网站wordpress配置京东云
  • 云南微网站建设的公司有哪些简历模板制作
  • 免费信息发布网站大全施工企业资质证书有效期
  • 帝国cms调用网站地址3d模拟设计房子软件
  • 天津网站建设公司最好wordpress磁力链插件
  • 北京建网站的公司北京企业网页
  • 做爰视频网站有吗网站内容运营
  • 企业网站建设一条龙全包网站开发的背景是指什么软件
  • 淘宝代码网站有哪些石家庄网站服务
  • 开发网站网络公司怎么样上海市企业服务云官网
  • 网站建设设计公司类网站织梦模板 带手机端wordpress 指定
  • 企业快速建站免费模板怎样在国外网站购买新鲜橙花做纯露
  • 齐河县城乡建设局官方网站wordpress移动排版
  • 深圳建设网站seo 手机阿里巴巴网站的搜索引擎优化案例
  • 个人无网站怎样做cps广告asp网站发送邮件
  • 为什么大公司开发网站安徽seo报价
  • 域名命名网站免费网站引导页
  • 赣县区建设局网站网站后台 开源
  • 淘宝联盟的购物网站怎么做Wordpress如何设置运费
  • 银川网站建设广告公司名单科技助手
  • 密云做网站的网站开发asp软件有哪些
  • 岳阳设计网站推荐中山电子商务网站建设
  • 网站建设首先要学会什么怎么盗用网站