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

微信如何做网站什么是外链

微信如何做网站,什么是外链,网站对比app还有优势吗,国内最新军事新闻打卡 目录 打卡 ShuffleNet 网络介绍 ShuffleNet 模型架构 Pointwise Group Convolution Channel Shuffle ShuffleNet模块 ShuffleNet 模块代码 构建ShuffleNet网络 模块代码 模型训练和评估 模型训练 模型评估 模型预测 ShuffleNet 网络介绍 ShuffleNetV1是旷视科…打卡 目录 打卡 ShuffleNet 网络介绍 ShuffleNet 模型架构 Pointwise Group Convolution Channel Shuffle ShuffleNet模块 ShuffleNet 模块代码 构建ShuffleNet网络 模块代码 模型训练和评估 模型训练 模型评估 模型预测 ShuffleNet 网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型和MobileNet, SqueezeNet等一样主要应用在移动端所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作Pointwise Group Convolution 和 Channel Shuffle这在保持精度的同时大大降低了模型的计算量。因此ShuffleNetV1和MobileNet类似都是通过设计更高效的网络结构来实现模型的压缩和加速。 ShuffleNet在保持不低的准确率的前提下将参数量几乎降低到了最小因此其运算速度较快单位参数量对模型准确率的贡献非常高。了解ShuffleNet更多详细内容详见论文ShuffleNet。 ShuffleNet 模型架构 ShuffleNet最显著的特点在于对不同通道进行重排来解决Group Convolution带来的弊端。通过改进ResNet 的 Bottleneck单元在较小的计算量的情况下达到了较高的准确率。 Pointwise Group Convolution Group Convolution分组卷积原理如下图。分组卷积的每一组的卷积核大小为in_channels/g*k*k一共有g组所有组共有 (in_channels/g*k*k)*out_channels 个参数是正常卷积参数的1/g。分组卷积中每个卷积核只处理输入特征图的一部分通道其优点在于参数量会有所降低但输出通道数仍等于卷积核的数量。Depthwise Convolution深度可分离卷积将组数g分为和输入通道相等的in_channels然后对每一个in_channels做卷积操作每个卷积核只处理一个通道记卷积核大小为1*k*k则卷积核参数量为in_channels*k*k得到的feature maps通道数与输入通道数相等Pointwise Group Convolution逐点分组卷积在分组卷积的基础上令每一组的卷积核大小为 1×1 卷积核参数量为(in_channels/g*1*1)*out_channels。 Channel Shuffle Group Convolution的弊端在于不同组别的通道无法进行信息交流堆积 GConv 层后一个问题是不同组之间的特征图是不通信的这就好像分成了g个互不相干的道路每一个人各走各的这可能会降低网络的特征提取能力。这也是XceptionMobileNet等网络采用密集的1x1卷积Dense Pointwise Convolution的原因。 为了解决不同组别通道“近亲繁殖”的问题ShuffleNet优化了大量密集的1x1卷积在使用的情况下计算量占用率达到了惊人的93.4%引入Channel Shuffle机制通道重排。这项操作直观上表现为将不同分组通道均匀分散重组使网络在下一层能处理不同组别通道的信息。 如下图所示对于g组每组有n个通道的特征图首先reshape成g行n列的矩阵再将矩阵转置成n行g列最后进行flatten操作得到新的排列。这些操作都是可微分可导的且计算简单在解决了信息交互的同时符合了ShuffleNet轻量级网络设计的轻量特征。 ShuffleNet模块 如下图ShuffleNet对ResNet中的Bottleneck结构进行由(a)到(b), (c)的更改 将开始和最后的1×1 卷积模块降维、升维改成 Point Wise Group Convolution 为了进行不同通道的信息交流再降维之后进行Channel Shuffle 降采样模块中3×3 Depth Wise Convolution的步长设置为2长宽降为原来的一般因此shortcut中采用步长为2的3×3 平均池化并把相加改成拼接。 ShuffleNet 模块代码 class ShuffleV1Block(nn.Cell):def __init__(self, inp, oup, group, first_group, mid_channels, ksize, stride):super(ShuffleV1Block, self).__init__()self.stride stridepad ksize // 2self.group groupif stride 2:outputs oup - inpelse:outputs oupself.relu nn.ReLU()branch_main_1 [GroupConv(in_channelsinp, out_channelsmid_channels,kernel_size1, stride1, pad_modepad, pad0,groups1 if first_group else group),nn.BatchNorm2d(mid_channels),nn.ReLU(),]branch_main_2 [nn.Conv2d(mid_channels, mid_channels, kernel_sizeksize, stridestride,pad_modepad, paddingpad, groupmid_channels,weight_initxavier_uniform, has_biasFalse),nn.BatchNorm2d(mid_channels),GroupConv(in_channelsmid_channels, out_channelsoutputs,kernel_size1, stride1, pad_modepad, pad0,groupsgroup),nn.BatchNorm2d(outputs),]self.branch_main_1 nn.SequentialCell(branch_main_1)self.branch_main_2 nn.SequentialCell(branch_main_2)if stride 2:self.branch_proj nn.AvgPool2d(kernel_size3, stride2, pad_modesame)def construct(self, old_x):left old_xright old_xout old_xright self.branch_main_1(right)if self.group 1:right self.channel_shuffle(right)right self.branch_main_2(right)if self.stride 1:out self.relu(left right)elif self.stride 2:left self.branch_proj(left)out ops.cat((left, right), 1)out self.relu(out)return outdef channel_shuffle(self, x):batchsize, num_channels, height, width ops.shape(x)group_channels num_channels // self.groupx ops.reshape(x, (batchsize, group_channels, self.group, height, width))x ops.transpose(x, (0, 2, 1, 3, 4))x ops.reshape(x, (batchsize, num_channels, height, width))return x 构建ShuffleNet网络 ShuffleNet网络结构如下图。以输入图像 224×224组数3g 3为例首先通过数量24卷积核大小为3×3 stride为2的卷积层输出特征图大小为112×112 channel为24然后通过stride为2的最大池化层输出特征图大小为56×56 channel数不变再堆叠3个ShuffleNet模块Stage2, Stage3, Stage4三个模块分别重复4次、8次、4次其中每个模块开始先经过一次下采样模块上图(c)使特征图长宽减半channel翻倍Stage2的下采样模块除外将channel数从24变为240随后经过全局平均池化输出大小为1×1×960 再经过全连接层和softmax得到分类概率。 模块代码 class ShuffleNetV1(nn.Cell):def __init__(self, n_class1000, model_size2.0x, group3):super(ShuffleNetV1, self).__init__()print(model size is , model_size)self.stage_repeats [4, 8, 4]self.model_size model_sizeif group 3:if model_size 0.5x:self.stage_out_channels [-1, 12, 120, 240, 480]elif model_size 1.0x:self.stage_out_channels [-1, 24, 240, 480, 960]elif model_size 1.5x:self.stage_out_channels [-1, 24, 360, 720, 1440]elif model_size 2.0x:self.stage_out_channels [-1, 48, 480, 960, 1920]else:raise NotImplementedErrorelif group 8:if model_size 0.5x:self.stage_out_channels [-1, 16, 192, 384, 768]elif model_size 1.0x:self.stage_out_channels [-1, 24, 384, 768, 1536]elif model_size 1.5x:self.stage_out_channels [-1, 24, 576, 1152, 2304]elif model_size 2.0x:self.stage_out_channels [-1, 48, 768, 1536, 3072]else:raise NotImplementedErrorinput_channel self.stage_out_channels[1]self.first_conv nn.SequentialCell(nn.Conv2d(3, input_channel, 3, 2, pad, 1, weight_initxavier_uniform, has_biasFalse),nn.BatchNorm2d(input_channel),nn.ReLU(),)self.maxpool nn.MaxPool2d(kernel_size3, stride2, pad_modesame)features []for idxstage in range(len(self.stage_repeats)):numrepeat self.stage_repeats[idxstage]output_channel self.stage_out_channels[idxstage 2]for i in range(numrepeat):stride 2 if i 0 else 1first_group idxstage 0 and i 0features.append(ShuffleV1Block(input_channel, output_channel,groupgroup, first_groupfirst_group,mid_channelsoutput_channel // 4, ksize3, stridestride))input_channel output_channelself.features nn.SequentialCell(features)self.globalpool nn.AvgPool2d(7)self.classifier nn.Dense(self.stage_out_channels[-1], n_class)def construct(self, x):x self.first_conv(x)x self.maxpool(x)x self.features(x)x self.globalpool(x)x ops.reshape(x, (-1, self.stage_out_channels[-1]))x self.classifier(x)return x 模型训练和评估 采用CIFAR-10数据集对ShuffleNet进行预训练。 CIFAR-10共有60000张32*32的彩色图像均匀地分为10个类别其中50000张图片作为训练集10000图片作为测试集。使用 mindspore.dataset.Cifar10Dataset 接口下载并加载CIFAR-10的训练集。目前仅支持二进制版本CIFAR-10 binary version。 from download import download import mindspore as ms from mindspore.dataset import Cifar10Dataset from mindspore.dataset import vision, transformsurl https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/cifar-10-binary.tar.gzdownload(url, ./dataset, kindtar.gz, replaceTrue)def get_dataset(train_dataset_path, batch_size, usage):image_trans []if usage train:image_trans [vision.RandomCrop((32, 32), (4, 4, 4, 4)),vision.RandomHorizontalFlip(prob0.5),vision.Resize((224, 224)),vision.Rescale(1.0 / 255.0, 0.0),vision.Normalize([0.4914, 0.4822, 0.4465], [0.2023, 0.1994, 0.2010]),vision.HWC2CHW()]elif usage test:image_trans [vision.Resize((224, 224)),vision.Rescale(1.0 / 255.0, 0.0),vision.Normalize([0.4914, 0.4822, 0.4465], [0.2023, 0.1994, 0.2010]),vision.HWC2CHW()]label_trans transforms.TypeCast(ms.int32)dataset Cifar10Dataset(train_dataset_path, usageusage, shuffleTrue)dataset dataset.map(image_trans, image)dataset dataset.map(label_trans, label)dataset dataset.batch(batch_size, drop_remainderTrue)return datasetdataset get_dataset(./dataset/cifar-10-batches-bin, 128, train) batches_per_epoch dataset.get_dataset_size() ## 390 模型训练 用随机初始化的参数做预训练。 1首先调用ShuffleNetV1定义网络参数量选择2.0x并定义损失函数为交叉熵损失学习率经过4轮的warmup后采用余弦退火优化器采用Momentum。 2最后用train.model中的Model接口将模型、损失函数、优化器封装在model中并用model.train()对网络进行训练。将ModelCheckpoint、CheckpointConfig、TimeMonitor和LossMonitor传入回调函数中将会打印训练的轮数、损失和时间并将ckpt文件保存在当前目录下。 import time import mindspore import numpy as np from mindspore import Tensor, nn from mindspore.train import ModelCheckpoint, CheckpointConfig, TimeMonitor, LossMonitor, Model, Top1CategoricalAccuracy, Top5CategoricalAccuracydef train():mindspore.set_context(modemindspore.PYNATIVE_MODE, device_targetAscend)net ShuffleNetV1(model_size2.0x, n_class10)loss nn.CrossEntropyLoss(weightNone, reductionmean, label_smoothing0.1)min_lr 0.0005base_lr 0.05lr_scheduler mindspore.nn.cosine_decay_lr(min_lr,base_lr,batches_per_epoch*250,batches_per_epoch,decay_epoch250)lr Tensor(lr_scheduler[-1])optimizer nn.Momentum(paramsnet.trainable_params(), learning_ratelr, momentum0.9, weight_decay0.00004, loss_scale1024)loss_scale_manager ms.amp.FixedLossScaleManager(1024, drop_overflow_updateFalse)model Model(net, loss_fnloss, optimizeroptimizer, amp_levelO3, loss_scale_managerloss_scale_manager)callback [TimeMonitor(), LossMonitor()]save_ckpt_path ./config_ckpt CheckpointConfig(save_checkpoint_stepsbatches_per_epoch, keep_checkpoint_max5)ckpt_callback ModelCheckpoint(shufflenetv1, directorysave_ckpt_path, configconfig_ckpt)callback [ckpt_callback]print( Starting Training )start_time time.time()# 由于时间原因epoch 5可根据需求进行调整model.train(5, dataset, callbackscallback)use_time time.time() - start_timehour str(int(use_time // 60 // 60))minute str(int(use_time // 60 % 60))second str(int(use_time % 60))print(total time: hour h minute m second s)print( Train Success )if __name__ __main__:train() 模型评估 设置好评估模型的路径后加载数据集并设置Top 1, Top 5的评估标准最后用model.eval()接口对模型进行评估。 from mindspore import load_checkpoint, load_param_into_netdef test():mindspore.set_context(modemindspore.GRAPH_MODE, device_targetAscend)dataset get_dataset(./dataset/cifar-10-batches-bin, 128, test)net ShuffleNetV1(model_size2.0x, n_class10)param_dict load_checkpoint(shufflenetv1-5_390.ckpt)load_param_into_net(net, param_dict)net.set_train(False)loss nn.CrossEntropyLoss(weightNone, reductionmean, label_smoothing0.1)eval_metrics {Loss: nn.Loss(), Top_1_Acc: Top1CategoricalAccuracy(),Top_5_Acc: Top5CategoricalAccuracy()}model Model(net, loss_fnloss, metricseval_metrics)start_time time.time()res model.eval(dataset, dataset_sink_modeFalse)use_time time.time() - start_timehour str(int(use_time // 60 // 60))minute str(int(use_time // 60 % 60))second str(int(use_time % 60))log result: str(res) , ckpt: ./shufflenetv1-5_390.ckpt \ , time: hour h minute m second sprint(log)filename ./eval_log.txtwith open(filename, a) as file_object:file_object.write(log \n)if __name__ __main__:test() 模型预测 import mindspore import matplotlib.pyplot as plt import mindspore.dataset as dsnet ShuffleNetV1(model_size2.0x, n_class10) show_lst [] param_dict load_checkpoint(shufflenetv1-5_390.ckpt) load_param_into_net(net, param_dict) model Model(net) dataset_predict ds.Cifar10Dataset(dataset_dir./dataset/cifar-10-batches-bin, shuffleFalse, usagetrain) dataset_show ds.Cifar10Dataset(dataset_dir./dataset/cifar-10-batches-bin, shuffleFalse, usagetrain) dataset_show dataset_show.batch(16) show_images_lst next(dataset_show.create_dict_iterator())[image].asnumpy() image_trans [vision.RandomCrop((32, 32), (4, 4, 4, 4)),vision.RandomHorizontalFlip(prob0.5),vision.Resize((224, 224)),vision.Rescale(1.0 / 255.0, 0.0),vision.Normalize([0.4914, 0.4822, 0.4465], [0.2023, 0.1994, 0.2010]),vision.HWC2CHW()] dataset_predict dataset_predict.map(image_trans, image) dataset_predict dataset_predict.batch(16) class_dict {0:airplane, 1:automobile, 2:bird, 3:cat, 4:deer, 5:dog, 6:frog, 7:horse, 8:ship, 9:truck} # 推理效果展示(上方为预测的结果下方为推理效果图片) plt.figure(figsize(16, 5)) predict_data next(dataset_predict.create_dict_iterator()) output model.predict(ms.Tensor(predict_data[image])) pred np.argmax(output.asnumpy(), axis1) index 0 for image in show_images_lst:plt.subplot(2, 8, index1)plt.title({}.format(class_dict[pred[index]]))index 1plt.imshow(image)plt.axis(off) plt.show()
http://www.hkea.cn/news/14443354/

相关文章:

  • 荆州公司网站建设东莞建设网官方网站首页
  • jsp 交互网站开发技术 西安交通大学出版社 2005.10广东网站推广
  • 上海建设三类人员网站网站必须做诚信认证吗
  • 做网站软文怎么弄腾讯云可以做网站
  • 郑州门户网站制作健康门户网站源码
  • 旅游网站建设参考文献wordpress编辑器添加下拉按钮
  • 国内优秀网站欣赏一站式网站建设
  • 公司网站后台维护怎么做制作网页之前必须先建立什么
  • 重庆公司网站搭建公司推荐吴江seo网站优化软件
  • 网站开发交什么税深圳广告公司电话
  • 常德德山经开区建设局网站linux下安装wordpress
  • 内网网站建设方面政策呼叫中心
  • 河南网站建设找工作客户关系管理概念
  • 网站每年续费给谁wordpress网站防采集
  • 电子商务网站建设工资烟台网络公司排名
  • 网站被黑了怎么恢复开网站需要钱吗
  • 社交网站上的商城怎么做和wordpress类似的
  • 偃师建网站那家公司好大理建设学校官方网站
  • 有没有专门做外贸的网站杭州软件公司排名
  • 迅速让一个wordpress济南seo外包服务
  • 网站开发 维护岗位职责中小微企业查询网站
  • 网站营销软件网页版微信登录入口账号登陆
  • 养殖场在哪个网站做环评备案梦幻西游网页微信版
  • 中国建设银行网站首页joy权威发布是指什么
  • 青岛seo建站医疗器械一类二类三类
  • 公司网站建设需要的材料网站有备案 去掉备案
  • 做网站的运营维护都要学什么运行两个wordpress
  • 怎样建立自己的网站qq浏览器收录网站提交入口
  • 公司做网站百度可以搜到吗山东网页制作网站
  • 网站关键词怎么优化排名wordpress目录的绝对路径