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

园林绿化东莞网站建设网站维护服务器

园林绿化东莞网站建设,网站维护服务器,深圳网络营销推广排名,如何做h5 网站文章目录 回顾Google NetInception1*1卷积Inception模块的实现网络构建完整代码 ResNet残差模块 Resedual Block残差网络的简单应用残差实现的代码 练习 回顾 这是一个简单的线性的卷积神经网络 然而有很多更为复杂的卷积神经网络。 Google Net Google Net 也叫Inception V… 文章目录 回顾Google NetInception1*1卷积Inception模块的实现网络构建完整代码 ResNet残差模块 Resedual Block残差网络的简单应用残差实现的代码 练习 回顾 这是一个简单的线性的卷积神经网络 然而有很多更为复杂的卷积神经网络。 Google Net Google Net 也叫Inception V1是由Inception模块堆叠而成的卷积神经网络。 详情请见我的另一篇博客 Inception 基本思想 首先通过1x1卷积来降低通道数把信息聚集再进行不同尺度的特征提取以及池化得到多个尺度的信息最后将特征进行叠加输出官方说法可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能 主要过程在3x3卷积和5x5卷积前面、3x3池化后面添加1x1卷积将信息聚集且可以有效减少参数量称为瓶颈层下一层block就包含1x1卷积3x3卷积5x5卷积3x3池化(使用这样的尺寸不是必需的可以根据需要进行调整)。这样网络中每一层都能学习到“稀疏”3x3、5x5或“不稀疏”1x1的特征既增加了网络的宽度也增加了网络对尺度的适应性通过按深度叠加deep concat在每个block后合成特征获得非线性属性。注在进行卷积之后都需要进行ReLU激活这里默认未注明。 1*1卷积 1*1卷积卷积核大小为1的卷积主要用于改变通道数而不会改变特征图W、H。也可以用于进行特征融合。在执行计算昂贵的 3 x 3 卷积和 5 x 5 卷积前往往会使用 1 x 1 卷积来减少计算量。 Inception模块的实现 注意只有所有特征图大小一样W、H一样才能进行拼接通道数可以不同。 网络构建 # design model using class class InceptionA(nn.Module):def __init__(self, in_channels):super(InceptionA, self).__init__()self.branch1x1 nn.Conv2d(in_channels, 16, kernel_size1)#1*1卷积self.branch5x5_1 nn.Conv2d(in_channels, 16, kernel_size1)#1*1卷积self.branch5x5_2 nn.Conv2d(16, 24, kernel_size5, padding2)#padding2,大小不变self.branch3x3_1 nn.Conv2d(in_channels, 16, kernel_size1)#1*1卷积self.branch3x3_2 nn.Conv2d(16, 24, kernel_size3, padding1)#padding1大小不变self.branch3x3_3 nn.Conv2d(24, 24, kernel_size3, padding1)#padding1大小不变self.branch_pool nn.Conv2d(in_channels, 24, kernel_size1)#1*1卷积def forward(self, x):branch1x1 self.branch1x1(x)branch5x5 self.branch5x5_1(x)branch5x5 self.branch5x5_2(branch5x5)branch3x3 self.branch3x3_1(x)branch3x3 self.branch3x3_2(branch3x3)branch3x3 self.branch3x3_3(branch3x3)branch_pool F.avg_pool2d(x, kernel_size3, stride1, padding1)branch_pool self.branch_pool(branch_pool)outputs [branch1x1, branch5x5, branch3x3, branch_pool]return torch.cat(outputs, dim1) # b,c,w,h c对应的是dim1class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 nn.Conv2d(1, 10, kernel_size5)self.incep1 InceptionA(in_channels10) # 与conv1 中的10对应self.conv2 nn.Conv2d(88, 20, kernel_size5) # 88 24x3 16self.incep2 InceptionA(in_channels20) # 与conv2 中的20对应self.mp nn.MaxPool2d(2)self.fc nn.Linear(1408, 10)#140888*4*4是x展开之后的值其实可以不用自己计算def forward(self, x):in_size x.size(0)x F.relu(self.mp(self.conv1(x)))#W、H12x self.incep1(x)x F.relu(self.mp(self.conv2(x)))#W、H4x self.incep2(x)x x.view(in_size, -1)x self.fc(x)return x完整代码 import numpy as np import torch import torch.nn as nn from matplotlib import pyplot as plt from torchvision import transforms from torchvision import datasets from torch.utils.data import DataLoader import torch.nn.functional as F import torch.optim as optim# prepare datasetbatch_size 64 transform transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]) # 归一化,均值和方差train_dataset datasets.MNIST(rootdataset, trainTrue, downloadTrue, transformtransform) train_loader DataLoader(train_dataset, shuffleTrue, batch_sizebatch_size) test_dataset datasets.MNIST(rootdataset, trainFalse, downloadTrue, transformtransform) test_loader DataLoader(test_dataset, shuffleFalse, batch_sizebatch_size)# design model using class class InceptionA(nn.Module):def __init__(self, in_channels):super(InceptionA, self).__init__()self.branch1x1 nn.Conv2d(in_channels, 16, kernel_size1)#1*1卷积self.branch5x5_1 nn.Conv2d(in_channels, 16, kernel_size1)#1*1卷积self.branch5x5_2 nn.Conv2d(16, 24, kernel_size5, padding2)#padding2,大小不变self.branch3x3_1 nn.Conv2d(in_channels, 16, kernel_size1)#1*1卷积self.branch3x3_2 nn.Conv2d(16, 24, kernel_size3, padding1)#padding1大小不变self.branch3x3_3 nn.Conv2d(24, 24, kernel_size3, padding1)#padding1大小不变self.branch_pool nn.Conv2d(in_channels, 24, kernel_size1)#1*1卷积def forward(self, x):branch1x1 self.branch1x1(x)branch5x5 self.branch5x5_1(x)branch5x5 self.branch5x5_2(branch5x5)branch3x3 self.branch3x3_1(x)branch3x3 self.branch3x3_2(branch3x3)branch3x3 self.branch3x3_3(branch3x3)branch_pool F.avg_pool2d(x, kernel_size3, stride1, padding1)branch_pool self.branch_pool(branch_pool)outputs [branch1x1, branch5x5, branch3x3, branch_pool]return torch.cat(outputs, dim1) # b,c,w,h c对应的是dim1class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 nn.Conv2d(1, 10, kernel_size5)self.incep1 InceptionA(in_channels10) # 与conv1 中的10对应self.conv2 nn.Conv2d(88, 20, kernel_size5) # 88 24x3 16self.incep2 InceptionA(in_channels20) # 与conv2 中的20对应self.mp nn.MaxPool2d(2)self.fc nn.Linear(1408, 10)#140888*4*4是x展开之后的值其实可以不用自己计算def forward(self, x):in_size x.size(0)x F.relu(self.mp(self.conv1(x)))#W、H12x self.incep1(x)x F.relu(self.mp(self.conv2(x)))#W、H4x self.incep2(x)x x.view(in_size, -1)x self.fc(x)return xmodel Net()device torch.device(cuda:0 if torch.cuda.is_available() else cpu) #定义device如果有GPU就用GPU否则用CPUmodel.to(device) # 将所有模型的parameters and buffers转化为CUDA Tensor.criteriontorch.nn.CrossEntropyLoss() optimizertorch.optim.SGD(model.parameters(),lr0.01,momentum0.5) def train(epoch):running_loss0.0for batch_id,data in enumerate(train_loader,0):inputs,targetdatainputs,targetinputs.to(device),target.to(device)#将数据送到GPU上optimizer.zero_grad()# forward backward updateoutputsmodel(inputs)losscriterion(outputs,target)loss.backward()optimizer.step()running_loss loss.item()if batch_id% 300299:print([%d,%5d] loss: %.3f % (epoch1,batch_id,running_loss/300))running_loss0.0accracy [] def test():correct0total0with torch.no_grad():for data in test_loader:inputs,targetdatainputs,targetinputs.to(device),target.to(device)#将数据送到GPU上outputsmodel(inputs)predictedtorch.argmax(outputs.data,dim1)totaltarget.size(0)correct(predictedtarget).sum().item()print(Accuracy on test set : %d %% [%d/%d]%(100*correct/total,correct,total))accracy.append([100*correct/total])if __name__ __main__:for epoch in range(10):train(epoch)test()xnp.arange(10)plt.plot(x, accracy)plt.xlabel(Epoch)plt.ylabel(Accuracy)plt.grid()plt.show() 训练结果 ResNet 卷积层是不是越多越好 在CIFAR数据集上利用20层卷积和56层卷积进行训练56层卷积的loss还要大一些。这是因为网络层数太多可能会出现梯度消失和梯度爆炸。梯度消失和梯度爆炸是在反向传播计算梯度时梯度太小或者太大随着网络层数不断加深梯度值是呈现指数增长变得趋近于0或者很大。比如说 0. 4 n 0.4^n 0.4n,n100时值就已结很小了比如说 1. 5 n 1.5^n 1.5nn100时也非常大了。 残差模块 Resedual Block **残差连接 **很简单就是一个跳连接将输入X和卷积之后的特征图相加就行了,即yxf(x)。相加需要两个特征图的大小和通道数都一样。可以获得更丰富的语义特征避免梯度消失和爆炸。非常常用是必须学会的一个小技巧。 残差连接可以跨层进行跳连接发挥创造力炼丹吧 残差网络的简单应用 残差实现的代码 class ResidualBlock(torch.nn.Module):def __init__(self,channels):super(ResidualBlock,self).__init__()self.channelschannelsself.conv1torch.nn.Conv2d(channels,channels,kernel_size3,padding1)#保证输出输入通道数都一样self.conv2torch.nn.Conv2d(channels,channels,kernel_size3,padding1)self.conv3torch.nn.Conv2d(channels,channels,kernel_size1)def forward(self,x):yF.relu(self.conv1(x))yself.conv2(y)return F.relu(xy)接下来笔交给你了 我的训练结果 Accuracy on test set : 98 % [9872/10000] [7, 299] loss: 0.027 [7, 599] loss: 0.032 [7, 899] loss: 0.032 Accuracy on test set : 98 % [9874/10000] [8, 299] loss: 0.028 [8, 599] loss: 0.026 [8, 899] loss: 0.026 Accuracy on test set : 99 % [9901/10000] [9, 299] loss: 0.022 [9, 599] loss: 0.025 [9, 899] loss: 0.027 Accuracy on test set : 99 % [9900/10000] [10, 299] loss: 0.024 [10, 599] loss: 0.019 [10, 899] loss: 0.027 Accuracy on test set : 98 % [9895/10000] 练习 请实现以下两种残差结构并用他们构建网络跑模型。
http://www.w-s-a.com/news/841002/

相关文章:

  • 怎么给钓鱼网站做防红网站建设相关的
  • 教育培训的网站建设湖南网站建设小公司
  • 福建南平网站建设创意交易平台网
  • 做直播网站要哪些技术内容营销理论
  • 价格划算的网站开发怎么找有赞做网站
  • 做网站店铺图片用什么软件网络营销方案格式
  • 做外贸要自己建网站吗有效的网络营销方式
  • 精通网站开发书籍做网站获取手机号码
  • 论坛做视频网站有哪些济南新站seo外包
  • 哪类型网站容易做冷水滩做微网站
  • 搭建企业网站流程保定徐水网站建设
  • 建设单位到江川区住房和城乡建设局网站伦敦 wordpress 设计
  • 响应式网站的服务麦德龙网站建设目标
  • 做国外单的网站叫什么海南省海口市网站建设
  • 杭州响应式网站案例wordpress5.2.2
  • 网站建设运营维护合同wordpress资源搜索插件
  • 国外网站流量查询东莞网站建设教程
  • 餐饮类网站建设达到的作用东莞工程建设交易中心网
  • 网站设计 知识产权湖北网站建设xiduyun
  • 猫咪网站模版下载中国风 古典 红色 网站源代码
  • 个人网站备案模板制作网站首页
  • 潍坊正规建设网站网站建设设计作业
  • 推荐一下网站谢谢辽宁住房城乡建设部官方网站
  • 网站文件大小英选 网站开发
  • 济南建网站哪家好wordpress编辑器排行
  • 在福州做搬家网站多少钱画册设计网站有哪些
  • 如何让别人浏览我做的网站哪些方法可以建设网站
  • 网站建设与管理网络推广的优点
  • 美食网站的设计与制作做网站的电销话术
  • 中国档案网站建设现状研究陕西建设厅执业资格注册中心网站