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

郴州网站建设案例门户网站模式

郴州网站建设案例,门户网站模式,广西壮族自治区简称,赣州网页制作公司文章目录 1. LeNet历史背景1.1 早期神经网络的挑战1.2 LeNet的诞生背景 2. LeNet详细结构2.1 总览2.2 卷积层与其特点2.3 子采样层#xff08;池化层#xff09;2.4 全连接层2.5 输出层及激活函数 3. LeNet实战复现3.1 模型搭建model.py3.2 训练模型train.py3.3 测试模型test… 文章目录 1. LeNet历史背景1.1 早期神经网络的挑战1.2 LeNet的诞生背景 2. LeNet详细结构2.1 总览2.2 卷积层与其特点2.3 子采样层池化层2.4 全连接层2.5 输出层及激活函数 3. LeNet实战复现3.1 模型搭建model.py3.2 训练模型train.py3.3 测试模型test.py 4. LeNet的变种与实际应用4.1 LeNet-5及其优化4.2 从LeNet到现代卷积神经网络 1. LeNet历史背景 1.1 早期神经网络的挑战 早期神经网络面临了许多挑战。首先它们经常遇到训练难题例如梯度消失和梯度爆炸特别是在使用传统激活函数如sigmoid或tanh时。另外当时缺乏大规模、公开的数据集导致模型容易过拟合并且泛化性能差。再者受限于当时的计算资源模型的大小和训练速度受到了很大的限制。最后由于深度学习领域还处于萌芽阶段缺少许多现代技术来优化和提升模型的表现。 1.2 LeNet的诞生背景 LeNet的诞生背景是为了满足20世纪90年代对手写数字识别的实际需求特别是在邮政和银行系统中。Yann LeCun及其团队意识到对于图像这种有结构的数据传统的全连接网络并不是最佳选择。因此他们引入了卷积的概念设计出了更适合图像处理任务的网络结构即LeNet。 2. LeNet详细结构 2.1 总览 2.2 卷积层与其特点 卷积层是卷积神经网络CNN的核心。这一层的主要目的是通过卷积操作检测图像中的局部特征。 特点 局部连接性 卷积层的每个神经元不再与前一层的所有神经元相连接而只与其局部区域相连接。这使得网络能够专注于图像的小部分并检测其中的特征。权值共享 在卷积层中一组权值在整个输入图像上共享。这不仅减少了模型的参数而且使得模型具有平移不变性。多个滤波器 通常会使用多个卷积核滤波器以便在不同的位置检测不同的特征。 2.3 子采样层池化层 池化层是卷积神经网络中的另一个关键组件用于缩减数据的空间尺寸从而减少计算量和参数数量。 主要类型 最大池化Max pooling 选择覆盖区域中的最大值作为输出。平均池化Average pooling 计算覆盖区域的平均值作为输出。 2.4 全连接层 在卷积神经网络的最后经过若干卷积和池化操作后全连接层用于将提取的特征进行“拼接”并输出到最终的分类器。 特点 完全连接 全连接层中的每个神经元都与前一层的所有神经元相连接。参数量大 由于全连接性此层通常包含网络中的大部分参数。连接多个卷积或池化层的特征 它的主要目的是整合先前层中提取的所有特征。 2.5 输出层及激活函数 输出层 输出层是神经网络的最后一层用于输出预测结果。输出的数量和类型取决于特定任务例如对于10类分类任务输出层可能有10个神经元。 激活函数 激活函数为神经网络提供了非线性使其能够学习并进行复杂的预测。 Sigmoid 取值范围为(0, 1)。Tanh 取值范围为(-1, 1)。ReLU (Rectified Linear Unit) 最常用的激活函数将所有负值置为0。Softmax 常用于多类分类的输出层它返回每个类的概率。 3. LeNet实战复现 3.1 模型搭建model.py import torch from torch import nn# 自定义网络模型 class LeNet(nn.Module):# 1. 初始化网络(定义初始化函数)def __init__(self):super(LeNet, self).__init__()# 定义网络层self.Sigmoid nn.Sigmoid()self.c1 nn.Conv2d(in_channels1, out_channels6, kernel_size5, padding2)self.s2 nn.AvgPool2d(kernel_size2, stride2)self.c3 nn.Conv2d(in_channels6, out_channels16, kernel_size5)self.s4 nn.AvgPool2d(kernel_size2, stride2)self.c5 nn.Conv2d(in_channels16, out_channels120, kernel_size5)# 展开self.flatten nn.Flatten()self.f6 nn.Linear(120, 84)self.output nn.Linear(84, 10)# 2. 前向传播网络def forward(self, x):x self.Sigmoid(self.c1(x))x self.s2(x)x self.Sigmoid(self.c3(x))x self.s4(x)x self.c5(x)x self.flatten(x)x self.f6(x)x self.output(x)return xif __name__ __main__:x torch.rand([1, 1, 28, 28])model LeNet()y model(x)3.2 训练模型train.py import torch from torch import nn from model import LeNet from torch.optim import lr_scheduler from torchvision import datasets, transforms import os# 数据转换为tensor格式 data_transformer transforms.Compose([transforms.ToTensor() ])# 加载训练的数据集 train_dataset datasets.MNIST(root./data, trainTrue, transformdata_transformer, downloadTrue) train_dataloader torch.utils.data.DataLoader(datasettrain_dataset, batch_size16, shuffleTrue)# 加载测试的数据集 test_dataset datasets.MNIST(root./data, trainFalse, transformdata_transformer, downloadTrue) test_dataloader torch.utils.data.DataLoader(datasettest_dataset, batch_size16, shuffleTrue)# 使用GPU进行训练 device cuda if torch.cuda.is_available() else cpu# 调用搭好的模型将模型数据转到GPU上 model LeNet().to(device)# 定义一个损失函数(交叉熵损失) loss_fn nn.CrossEntropyLoss()# 定义一个优化器 optimizer torch.optim.SGD(model.parameters(), lr0.01, momentum0.9)# 学习率每隔10轮, 变换原来的0.1 lr_scheduler lr_scheduler.StepLR(optimizer, step_size10, gamma0.1)# 定义训练函数 def train(dataloader, model, loss_fn, optimizer):loss, current, n 0.0, 0.0, 0for batch, (x, y) in enumerate(dataloader):# 前向传播x, y x.to(device), y.to(device)output model(x)cur_loss loss_fn(output, y)_, pred torch.max(output, axis1)cur_acc torch.sum(y pred)/output.shape[0]optimizer.zero_grad()cur_loss.backward()optimizer.step()loss cur_loss.item()current cur_acc.item()n n 1print(train_loss str(loss/n))print(train_acc str(current/n))# 定义测试函数 def val(dataloader, model, loss_fn):model.eval()loss, current, n 0.0, 0.0, 0with torch.no_grad():for batch, (x, y) in enumerate(dataloader):# 前向传播x, y x.to(device), y.to(device)output model(x)cur_loss loss_fn(output, y)_, pred torch.max(output, axis1)cur_acc torch.sum(y pred) / output.shape[0]loss cur_loss.item()current cur_acc.item()n n 1print(val_loss str(loss / n))print(val_acc str(current / n))return current/n# 开始训练 epoch 50 min_acc 0for t in range(epoch):print(fepoch{t1}\n-----------------------------------------------------------)train(train_dataloader, model, loss_fn, optimizer)a val(test_dataloader, model, loss_fn)# 保存最好的模型权重if a min_acc:folder sava_modelif not os.path.exists(folder):os.mkdir(sava_model)min_acc aprint(sava best model)torch.save(model.state_dict(), sava_model/best_model.pth) print(Done!) 3.3 测试模型test.py import torch from model import LeNet from torchvision import datasets, transforms from torchvision.transforms import ToPILImage# 数据转换为tensor格式 data_transformer transforms.Compose([transforms.ToTensor() ])# 加载训练的数据集 train_dataset datasets.MNIST(root./data, trainTrue, transformdata_transformer, downloadTrue) train_dataloader torch.utils.data.DataLoader(datasettrain_dataset, batch_size16, shuffleTrue)# 加载测试的数据集 test_dataset datasets.MNIST(root./data, trainFalse, transformdata_transformer, downloadTrue) test_dataloader torch.utils.data.DataLoader(datasettest_dataset, batch_size16, shuffleTrue)# 使用GPU进行训练 device cuda if torch.cuda.is_available() else cpu# 调用搭好的模型将模型数据转到GPU上 model LeNet().to(device)# 加载模型权重并设置为评估模式 model.load_state_dict(torch.load(./sava_model/best_model.pth)) model.eval()# 获取结果 classes [0,1,2,3,4,5,6,7,8,9, ]# 把tensor转换为图片, 方便可视化 show ToPILImage()# 进入验证 for i in range(5):x, y test_dataset[i]show(x).show()x torch.unsqueeze(x, dim0).float().to(device)with torch.no_grad():pred model(x)predicted, actual classes[torch.argmax(pred[0])], classes[y]print(fPredicted: {predicted}, Actual: {actual}) 4. LeNet的变种与实际应用 4.1 LeNet-5及其优化 LeNet-5是由Yann LeCun于1998年设计的并被广泛应用于手写数字识别任务。它是卷积神经网络的早期设计之一主要包含卷积层、池化层和全连接层。 结构 输入层接收32×32的图像。卷积层C1使用5×5的滤波器输出6个特征图。池化层S22x2的平均池化。卷积层C3使用5×5的滤波器输出16个特征图。池化层S42x2的平均池化。卷积层C5使用5×5的滤波器输出120个特征图。全连接层F6。输出层10个单元对应于0-9的手写数字。 激活函数Sigmoid或Tanh。 优化 ReLU激活函数 原始的LeNet-5使用Sigmoid或Tanh作为激活函数但现代网络更喜欢使用ReLU因为它的训练更快且更少受梯度消失的影响。更高效的优化算法 如Adam或RMSProp它们通常比传统的SGD更快、更稳定。批量归一化 加速训练并提高模型的泛化能力。Dropout 在全连接层中引入Dropout可以增强模型的正则化效果。 4.2 从LeNet到现代卷积神经网络 从LeNet-5开始卷积神经网络已经经历了巨大的发展。以下是一些重要的里程碑 AlexNet (2012) 在ImageNet竞赛中取得突破性的成功。它具有更深的层次使用ReLU激活函数以及Dropout来防止过拟合。VGG (2014) 由于其统一的结构仅使用3×3的卷积和2x2的池化而闻名拥有多达19层的版本。GoogLeNet/Inception (2014) 引入了Inception模块可以并行执行多种大小的卷积。ResNet (2015) 引入了残差块使得训练非常深的网络变得可能。通过这种方式网络可以达到上百甚至上千的层数。DenseNet (2017) 每层都与之前的所有层连接导致具有非常稠密的特征图。
http://www.hkea.cn/news/14403633/

相关文章:

  • 海口建站平台html交易网站设计实例
  • 西安哪家网站公司做的比较好北京有哪些软件公司
  • 营销网站设计与规划方案网站建设打造
  • 佛山免费建站模板dede做英文网站优化
  • 微信网站开发rem px创业做软件还是做网站
  • 网站网页设计制作教程外包网站都有哪些
  • 网站没服务器行吗百度快速排名平台
  • 做网站流程、免费建网上商城
  • 网站成本费用甘肃城乡建设厅网站
  • 湖南网站建设推广优化注册网站填写不了地区
  • 网站制作的基础专业手机网站定制
  • 做网站电商云数据库有用吗提升学历官网
  • 怎样让网站做301处理做自媒体的有哪些素材网站
  • 杭州模板建站软件全国中高风险地区
  • 做网站录入和查询需求wordpress格子广告插件
  • 网站开发基本步骤惠州网站制作计划
  • 海口网站建设解决方案做网站是什么软件
  • 南宁学网站建设福州制作公司网站
  • 农业局网站建设实施方案网站开发公司排行
  • 河北省建设监理协会网站网站设计师是做什么的
  • 广州网站设计实力乐云seowordpress asp
  • 网站建设网站需要什么医疗创意小产品设计
  • html5网站制作编辑源码北京电脑培训班零基础
  • 商城网站建设机构桌面百度
  • 什么是网站解析域名查询备案查询
  • 做网站用哪种代码比较好推广网站建设时间安排
  • 盐城公司网站建设大型企业网站开发
  • 兰州构建公司青岛网站优化联系方式
  • 网站制作学习网站工作室建设与管理思路与设想
  • 一地址和二地址百度优化seo