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

怎样做一个免费的网站上海外贸论坛

怎样做一个免费的网站,上海外贸论坛,com域名注册多少钱,网络服务平台1. 引言 在现代计算机视觉领域#xff0c;深度学习已经成为了一个核心技术#xff0c;其影响力远超过了传统的图像处理方法。但深度学习#xff0c;特别是卷积神经网络#xff08;CNN#xff09;在计算机视觉的主导地位并不是从一开始就有的。在2012年之前#xff0c;计…1. 引言 在现代计算机视觉领域深度学习已经成为了一个核心技术其影响力远超过了传统的图像处理方法。但深度学习特别是卷积神经网络CNN在计算机视觉的主导地位并不是从一开始就有的。在2012年之前计算机视觉的许多任务都是由一系列手工设计的特征和浅层的机器学习模型完成的。 2012年一个特殊的网络结构名为AlexNet在ImageNet Large Scale Visual Recognition ChallengeILSVRC上取得了出色的成果这一结果震惊了整个计算机视觉和机器学习社区。AlexNet不仅在分类精度上大幅领先更重要的是它开启了一个全新的时代——深度学习的时代。 2. AlexNet背景与重要性 在深度学习成为主流之前计算机视觉任务主要依赖于手工设计的特征如SIFT、HOG等与浅层机器学习模型相结合如SVM。这些方法虽然在某些任务上有所成功但总体上受限于其手工设计的特征提取和有限的模型容量。 为了推进计算机视觉的发展ImageNet项目应运而生这是一个包含数百万张标注图像的大型数据库。基于此ImageNet Large Scale Visual Recognition ChallengeILSVRC被创建出来旨在激励研究人员开发更好的图像分类方法。ILSVRC迅速成为了计算机视觉领域的标杆比赛。 2012年由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton合作设计的AlexNet在ILSVRC中大放异彩它的错误率比第二名低了10%以上这在当时是一个令人震惊的进步。它使用的深度卷积神经网络架构和其他创新技术标志着深度学习在计算机视觉领域的崛起。 深度结构 与之前的模型相比AlexNet具有更深的网络结构这使得它能够学习到更复杂的特征表示。 GPU计算 AlexNet的训练利用了GPU并行计算的优势从而大大加速了深度网络的训练速度。 创新性技术 如ReLU激活函数、Dropout等技术都首次在这样的大规模图像任务中显示了其效果和价值。 启发后续研究 AlexNet的成功激励了更多的研究人员转向深度学习导致了后续的VGG、GoogLeNet、ResNet等一系列网络的诞生。 3. 网络结构详解 3.1. 卷积层 卷积层是CNN中的核心部分它通过卷积操作提取输入图像的特征。AlexNet包含多个卷积层这些卷积层的过滤器数量和大小各异以捕捉不同级别的特征。 滤波器 AlexNet使用了大小为11x11、5x5和3x3的滤波器。 步长与填充初始的卷积层使用了较大的步长如步长为4的11x11滤波器这有助于减少网络的计算复杂性。 3.2. 激活函数: ReLU ReLURectified Linear Unit在AlexNet中首次在大规模网络中获得了广泛应用因为它帮助网络更快地收敛并减轻了梯度消失的问题。 特性ReLU的定义为f(x) max(0, x)它是非线性的但计算简单。 优势相较于Sigmoid或Tanh激活函数ReLU可以加速SGD的收敛速度。 3.3. 池化 池化层在CNN中用于降低特征的空间维度从而减少计算量。同时它还能增加特征的平移不变性。 类型AlexNet主要使用最大池化。 池化窗口与步长在AlexNet中池化窗口为3x3步长为2。 3.4 全连接层 AlexNet包含3个全连接层它们用于将前面的特征图汇集到一起为分类做最后的决策。 神经元数量前两个全连接层包含4096个神经元而最后一个全连接层输出层根据类别数量决定在ImageNet挑战中为1000个类别。 3.5 正则化Dropout Dropout是一种正则化技巧它在训练期间随机“丢弃”神经元从而防止网络过拟合。 位置AlexNet在前两个全连接层之后应用了Dropout。 丢弃率训练期间每个神经元被丢弃的概率为0.5。 4. 主要特点与创新 4.1 深度结构 相较于其它前期的网络模型AlexNet有着更深的层次结构包括五个卷积层接着是三个全连接层。这种深度结构允许网络学习更丰富和复杂的特征表示。 4.2 ReLU激活函数 之前的神经网络主要采用sigmoid或tanh作为激活函数。AlexNet采用ReLU作为其激活函数这一简单的变动大大加速了网络的训练并提高了模型的表现。 4.3 GPU并行计算 由于其深度结构AlexNet的计算需求远超过当时的CPU能力。为了解决这个问题设计者利用了两个GPU进行并行计算。这不仅大大加速了训练速度而且开启了后续深度学习模型利用GPU进行训练的趋势。 4.4 局部响应归一化 (LRN) 虽然后续的研究表明LRN可能不是必要的但在AlexNet中作者介绍了局部响应归一化作为一种规范化技术它在某种程度上模拟了生物神经元的侧抑制机制有助于增强模型的泛化能力。 4.5 Dropout 为了防止这样一个大型网络过拟合AlexNet引入了Dropout技术。通过随机关闭一部分神经元Dropout可以在训练过程中有效地模拟集成学习从而增强模型的泛化性。 4.6 大数据和数据增强 AlexNet在ImageNet上训练该数据集包含超过1500万的高分辨率图像和1000个类别。此外为了进一步扩充数据并提高模型的鲁棒性设计者还采用了多种数据增强技术如图像旋转、裁剪和翻转。 4.7 叠加的卷积层 与之前的网络设计不同AlexNet在没有池化的情况下叠加了多个卷积层这允许模型捕捉更为复杂的特征组合。 5. 实践搭建AlexNet 5.1 model import torch.nn as nn import torchclass AlexNet(nn.Module):def __init__(self, num_classes1000, init_weightsFalse):super(AlexNet, self).__init__()# 特征提取层self.features nn.Sequential(# 第一卷积层nn.Conv2d(3, 48, kernel_size11, stride4, padding2),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size3, stride2),# 第二卷积层nn.Conv2d(48, 128, kernel_size5, padding2),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size3, stride2),# 第三、四、五卷积层nn.Conv2d(128, 192, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(192, 192, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(192, 128, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size3, stride2),)# 分类层self.classifier nn.Sequential(# Dropout层可以减少过拟合nn.Dropout(p0.5),# 全连接层nn.Linear(128 * 6 * 6, 2048),nn.ReLU(inplaceTrue),nn.Dropout(p0.5),nn.Linear(2048, 2048),nn.ReLU(inplaceTrue),nn.Linear(2048, num_classes),)if init_weights:self._initialize_weights()def forward(self, x):# 通过特征提取层x self.features(x)# 展平特征图x torch.flatten(x, start_dim1)# 通过分类层x self.classifier(x)return xdef _initialize_weights(self):# 初始化权重for m in self.modules():if isinstance(m, nn.Conv2d):nn.init.kaiming_normal_(m.weight, modefan_out, nonlinearityrelu)if m.bias is not None:nn.init.constant_(m.bias, 0)elif isinstance(m, nn.Linear):nn.init.normal_(m.weight, 0, 0.01)nn.init.constant_(m.bias, 0) 5.2 train import os import sys import json import torch import torch.nn as nn from torchvision import transforms, datasets, utils import torch.optim as optim from tqdm import tqdm from model import AlexNet# 配置参数 BATCH_SIZE 32 EPOCHS 10 LR 0.0002 SAVE_PATH ./AlexNet.pthdef load_data(data_root):加载数据集data_transform {train: transforms.Compose([transforms.RandomResizedCrop(224),transforms.RandomHorizontalFlip(),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]),val: transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])}train_dataset datasets.ImageFolder(rootos.path.join(data_root, train), transformdata_transform[train])validate_dataset datasets.ImageFolder(rootos.path.join(data_root, val), transformdata_transform[val])nw min([os.cpu_count(), BATCH_SIZE if BATCH_SIZE 1 else 0, 8])train_loader torch.utils.data.DataLoader(train_dataset, batch_sizeBATCH_SIZE, shuffleTrue, num_workersnw)validate_loader torch.utils.data.DataLoader(validate_dataset, batch_size4, shuffleFalse, num_workersnw)return train_loader, validate_loaderdef save_class_indices(dataset, save_pathclass_indices.json):保存类别和对应的编码到json文件中flower_list dataset.class_to_idxcla_dict dict((val, key) for key, val in flower_list.items())with open(save_path, w) as f:json.dump(cla_dict, f, indent4)def train_one_epoch(net, data_loader, optimizer, loss_function, device):训练一个epochnet.train()running_loss 0.0for images, labels in tqdm(data_loader, filesys.stdout):optimizer.zero_grad()outputs net(images.to(device))loss loss_function(outputs, labels.to(device))loss.backward()optimizer.step()running_loss loss.item()return running_loss / len(data_loader)def validate(net, data_loader, device):验证模型net.eval()acc 0.0with torch.no_grad():for images, labels in tqdm(data_loader, filesys.stdout):outputs net(images.to(device))predict_y torch.max(outputs, dim1)[1]acc torch.eq(predict_y, labels.to(device)).sum().item()return acc / len(data_loader.dataset)def main():device torch.device(cuda:0 if torch.cuda.is_available() else cpu)print(fUsing {device} device.)data_root os.path.abspath(os.path.join(os.getcwd(), ./..))image_path os.path.join(data_root, data_set, flower_data)assert os.path.exists(image_path), f{image_path} path does not exist.train_loader, validate_loader load_data(image_path)save_class_indices(train_loader.dataset)print(fUsing {len(train_loader.dataset)} images for training, {len(validate_loader.dataset)} images for validation.)net AlexNet(num_classes5, init_weightsTrue).to(device)loss_function nn.CrossEntropyLoss()optimizer optim.Adam(net.parameters(), lrLR)best_acc 0.0for epoch in range(EPOCHS):train_loss train_one_epoch(net, train_loader, optimizer, loss_function, device)val_acc validate(net, validate_loader, device)if val_acc best_acc:best_acc val_acctorch.save(net.state_dict(), SAVE_PATH)print(fEpoch {epoch 1}/{EPOCHS} - Train loss: {train_loss:.4f} - Val Accuracy: {val_acc:.4f})print(Finished Training)if __name__ __main__:main() 5.3 predict import os import json import argparseimport torch from PIL import Image from torchvision import transforms import matplotlib.pyplot as pltfrom model import AlexNet# 定义命令行参数解析函数 def parse_args():parser argparse.ArgumentParser(description预测输入图片的分类)parser.add_argument(img_path, help待预测图片的路径)parser.add_argument(--model_path, default./AlexNet.pth, help已训练的AlexNet模型的路径)parser.add_argument(--class_indices, default./class_indices.json, help类别索引的json文件路径)return parser.parse_args()# 加载和预处理图片 def load_image(img_path, transform):img Image.open(img_path)img transform(img)return torch.unsqueeze(img, dim0)# 加载模型 def load_model(model_path, device, num_classes5):model AlexNet(num_classesnum_classes).to(device)model.load_state_dict(torch.load(model_path))return model# 使用模型进行预测 def predict_image(img, model, class_indict, device):model.eval()with torch.no_grad():output torch.squeeze(model(img.to(device))).cpu()probabilities torch.softmax(output, dim0)predicted_class torch.argmax(probabilities).numpy()return predicted_class, probabilitiesdef main():args parse_args() # 解析命令行参数device torch.device(cuda:0 if torch.cuda.is_available() else cpu)# 定义图片预处理操作transform transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])img load_image(args.img_path, transform) # 加载图片# 从json文件中读取类别索引with open(args.class_indices, r) as f:class_indict json.load(f)model load_model(args.model_path, device) # 加载模型# 使用模型预测图片predicted_class, probabilities predict_image(img, model, class_indict, device)print(预测类别: {} 概率: {:.3}.format(class_indict[str(predicted_class)],probabilities[predicted_class].numpy()))# 打印所有类别的预测概率for i in range(len(probabilities)):print(类别: {:10} 概率: {:.3}.format(class_indict[str(i)],probabilities[i].numpy()))plt.imshow(Image.open(args.img_path)) # 显示图片plt.title(预测结果: {}.format(class_indict[str(predicted_class)]))plt.show()if __name__ __main__:main()
http://www.hkea.cn/news/14591137/

相关文章:

  • 南通网站排名团队如何查看一个网站做的外链
  • 牛商网营销型网站多少钱企业网站建设方案 word
  • 深圳网站建设方案书上海高玩seo
  • 大学 英文网站建设网站如何建设目录结构
  • 速贝cms建站系统温州网站升级
  • 山东济南公司网站韩雪冬网站
  • 有网站代码 如何建设网站深圳做外贸网站公司
  • wordpress站点统计插件山西建设公司网站
  • 徐州网站建设哪家专业河北建设厅网站首页
  • 商城网站建设排名iis网站服务器安全隐患
  • asp连接数据库做登录网站完整下载厦门正规的网站建设公司
  • 网站编辑工具购物网站建设与开发
  • 论坛网站太难做没人在线高清观看免费ppt
  • 湖南外贸网站建设山东东营市房价
  • 网站制作好如何上线网站用的字体
  • 网站哪些数据数字营销经理岗位职责
  • 网站内的搜索怎么做的免费网站建设apk
  • 苏州专业高端网站建设公司哪家好梦幻创意北京网站建设
  • 中国建设网站轨道自检验收报告表动漫设计公司
  • 大气学校网站模板做百度线上推广
  • 怎样制作网站教程外贸公司网站建设哪家好
  • 网站怎么产品做推广怎么修改错误 wordpress
  • 沧州南皮手机网站建设灰色词seo排名
  • 合肥教育平台网站建设《网站设计与建设》电子书
  • 城市建设投资公司网站软件是如何开发的
  • 网站运营方案模板wordpress页面调试分类文章
  • 哪个网站做logo设计九天智能建站软件
  • 网站系统平台建设如何建设简易网站
  • 简洁大气的网站首页事务所网站制作方案
  • 甘肃网站建设推广wordpress title description