MXNet学习2——Module

mmdnn实现模型转换 1、转IR mmtoir/python3 -m mmdnn.conversion._script.convertToIR python3 -m mmdnn.conversion._script.convertToIR -f mxnet -n model-symbol.json -w model-0000.params --inputShape 3,112,112 -o IR34 输出: U... 阅读详情

概要

本节介绍MXNet中一个重要的概念,Module(模块),涉及到的内容包括简单的神经网络,模型的构造,参数的训练以及更新,模型预测等。通过本节大概了解Module中一些重要的属性和方法,对于MXNet的机制有初步的了解,需要注意的是本节代码跳过了官方tutorial中存储部分,有些说明部分没有摘录,感兴趣请参考官方的教程
http://mxnet.io/tutorials/python/module.html

正文

import mxnet as mx
from data_iter import SyntheticData

###神经网络连接的构造
net = mx.sym.Variable('data')
net = mx.sym.FullyConnected(net, name='fc1',num_hidden=64)
net = mx.sym.Activation(net, name='relu1', act_type='relu')
net = mx.sym.FullyConnected(net, name='fc2', num_hidden=10)
net = mx.sym.SoftmaxOutput(net, name='softmax')

data = SyntheticData(10, 128)
mx.viz.plot_network(net).view()

此处本机测试图片没有softmax_label

###一个最基本的module需要包含一个Symbol,context定义在哪种设备上,data_names和label_names用来寻找训练数据以及对应的标注。需要注意的是名称十分重要!
mod = mx.mod.Module(symbol=net,context=mx.cpu(), data_names=['data'], label_names=['softmax_label'])

import logging
logging.basicConfig(level=logging.INFO)

batch_size=32
###一个简单的fit即可完成所有的训练,结束之后参数均已经训练完毕,接下来就可以预测了。不需要额外的bind和初始化,详见API。'sgd','acc'分别表示使用随机梯度下降算法和准确率的评价标准,num_epoch表示迭代的次数
mod.fit(data.get_iter(batch_size), eval_data=data.get_iter(batch_size), optimizer_params={'learning_rate':0.1}, optimizer='sgd', eval_metric='acc', num_epoch=5)

###predict返回所有的预测值,batch_size=32,num_batchs=10,label=10
y = mod.predict(data.get_iter(batch_size))
print('shape of predict: %s' % (y.shape,))

‘shape of predict: (320L, 10L)’

# 对于iter_predict,官网API给出说明:pred is a list of outputs from the module # i_batch is a integer # batch is the data batch from the data iterator

###preds[0]是个二维数组,第一维是batch_size,即预测的个数,第二维对应的是预测的值,每个值对应的概率,0~9每个数字对应的概率,所以shape=(batch_size,10)
for preds,i_batch,batch in mod.iter_predict(data.get_iter(batch_size)):
    pred_label = preds[0].asnumpy().argmax(axis=1)
    label = batch.label[0].asnumpy().astype('int32')
    print('batch %d, accuracy %f' % (i_batch, float(sum(pred_label==label))/len(label)))

batch 0, accuracy 0.062500
batch 1, accuracy 0.156250
batch 2, accuracy 0.187500
batch 3, accuracy 0.000000
batch 4, accuracy 0.062500
batch 5, accuracy 0.000000
batch 6, accuracy 0.062500
batch 7, accuracy 0.093750
batch 8, accuracy 0.062500
batch 9, accuracy 0.062500

###mx.metric.create定义一个评价指标,mse表示均方误差,acc表示准确率
metric = [mx.metric.create('mse'), mx.metric.create('acc')]
mod.score(data.get_iter(batch_size), metric)
print([metric[0].get(),metric[1].get()])

[(‘mse’, 27.438781929016113), (‘accuracy’, 0.115625)]

上述介绍的是Module最基本的训练操作,下面介绍的是复杂的使用方法

一个Module具有如下几种状态

  • Initial state:内存还没有分配,还没有准备好进行计算
  • Binded:输入、输出、参数的维度都已经知道,内存已经分配,准备好计算了
  • Parameter initialized:参数已经初始化,如果没有初始化将可能得到未定义的结果
  • Optimizer installed:优化方法已经确定;确定后,参数值在梯度计算后根据优化算法进行更新(forward-backward).

mod = mx.mod.Module(symbol=net)

train_iter = data.get_iter(batch_size)
mod.bind(data_shapes=train_iter.provide_data, label_shapes=train_iter.provide_label)
###使用bind的话,init_params和init_optimizer是必须要的

###Xavier是一种初始化方式类似高斯,这里不细讲
mod.init_params(initializer=mx.init.Xavier(magnitude=2.))

mod.init_optimizer(optimizer='sgd', optimizer_params=(('learning_rate',0.1),))

###metric至少需要一个,否则参数更新没有依据
metric = mx.metric.create('acc')

for batch in train_iter:
     mod.forward(batch,is_train=True)
     mod.update_metric(metric, batch.label)
     mod.backward()
     mod.update()
"""
forward是计算输出,从前往后直到output,is_train表示是否训练,或者说参数是否更新,不更新训练就没有意义了,默认是None,这时值就取self.for_training,而self.for_training在bind时默认设置为True了
update_metric更新(累加)评价指标,比如准确率,label来确定是哪一种
backward计算梯度
update更新参数,比如w,b
"""
print(metric.get())

(‘accuracy’, 0.59375)

除了上述的操作,Module还提供大量有用的信息,以下不涉及复杂操作,且简单易懂就不翻译了

basic names:

  • data_names: list of string indicating the names of the required data.
  • output_names: list of string indicating the names of the outputs.

state information

  • binded: bool, indicating whether the memory buffers needed for
    computation has been allocated.
  • for_training: whether the module is binded for training (if binded).
  • params_initialized: bool, indicating whether the parameters of this modules has been initialized.
  • optimizer_initialized: bool, indicating whether an optimizer is defined and initialized.
  • inputs_need_grad: bool, indicating whether gradients with respect to the input data is needed. Might be useful when implementing composition of modules.

input/output information

  • data_shapes: a list of (name, shape). In theory, since the memory is allocated, we could directly provide the data arrays. But in the case of data parallelization, the data arrays might not be of the same shape as viewed from the external world.
  • label_shapes: a list of (name, shape). This might be [] if the module does not need labels (e.g. it does not contains a loss function at the top), or a module is not binded for training.
  • output_shapes: a list of (name, shape) for outputs of the module. parameters (for modules with parameters)
  • get_params(): return a tuple (arg_params, aux_params). Each of those is a dictionary of name to NDArray mapping. Those NDArray always lives on CPU. The actual parameters used for computing might live on other devices (GPUs), this function will retrieve (a copy of) the latest parameters.
  • get_outputs(): get outputs of the previous forward operation.
  • get_input_grads(): get the gradients with respect to the inputs
    computed in the previous backward operation.
print((mod.data_shapes, mod.label_shapes, mod.output_shapes))
print(mod.get_params())


([DataDesc[data,(32, 128),<type 'numpy.float32'>,NCHW]], [DataDesc[softmax_label,(32,),<type 'numpy.float32'>,NCHW]], [('softmax_output', (32, 10L))])
({'fc2_bias': <NDArray 10 @cpu(0)>, 'fc2_weight': <NDArray 10x64 @cpu(0)>, 'fc1_bias': <NDArray 64 @cpu(0)>, 'fc1_weight': <NDArray 64x128 @cpu(0)>}, {})
insightface源码中arcface代码段理解 在看insightface源码中,遇到arcface损失函数的实现,感觉非常难以理解,参考了下面的博客,自己进行了一波强势自我解释,目前理解一部分,谨在此进行记录,以防忘记。 博客地址:http://www.cnblogs.com/darkknightzh/p/8525287.html 代码原文如下: all_label = mx.symbol.Variable('softmax_label'... 阅读详情

相关推荐

【MXNet学习19】3.3 Module

在MXNet框架中,Module是一个高级的封装模块,可用来执行通过Symbol模块定义的网络模型的训练,与Module相关的接口介绍都可以参考Module的官方文档地址:https://mxnet.apache.org/api/python/module/module.html。Module接口提供了许多非常方便的方法用于模型训练,只需要将准备好的数据、超参数等传给对应的方法就能启动训练。 在3.2节,我们用Symbol接口定义了一个网络结构sym,接下来我们将基于这个网络结构介绍Module模块,首先

qq_35091353的博客 280

【MXNet官方教程4】Module - 神经网络训练和预测

训练一个神经网络需要一些步骤。比如指定训练数据的输入,模型参数初始化,执行前向和后向计算,梯度下降并更新参数,模型的保存和恢复等。在预测的时候,这些步骤也需要进行多次。对于初学者和经验丰富的开发者来说,这些都是能让人头疼的问题。 幸运的是,MXNet把这些常用的操作模块化在Module包内。Module提供高层和中间层API来操作定义好的网络。我们可以切换使用这些方法,这篇文章将介绍这些方法的使...

xiang_freedom的专栏 2851

【MXNet学习3】Module - 神经网络训练和预测

训练一个神经网络需要一些步骤。比如指定训练数据的输入,模型参数初始化,执行前向和后向计算,梯度下降并更新参数,模型的保存和恢复等。在预测的时候,这些步骤也需要进行多次。对于初学者和经验丰富的开发者来说,这些都是能让人头疼的问题。幸运的是,MXNet把这些常用的操作模块化在Module包内。Module提供高层和中间层API来操作定义好的网络。我们可以切换使用这些方法,这篇文章将介绍这些方法的使用。 1、准备 在这篇教程里我们将在 UCI letter recognition(英文字母识别)数据集上训练一个多

qq_35091353的博客 721

Mxnet Module API

Module API, 定义在module包里面, 提供了一个中间和高-level的接口, 对于用符号运算。可以把module想像成为一个能够执行由symbol来定义的一个程序。比如 mod = mx.mod.Module(out), 这个out是前面的symbol计算的最终,可以理解为神经网络出来的结果。神经网络到此基本上完成'计算图'的构建, 后面要给数据,初始化。。。。在此基础上可以进行以下...

共同学习 1641

【极市】邓健康-CVPR2019 ArcFace 构建高效的人脸识别系统.pdf

邓健康-CVPR2019 ArcFace 构建高效的人脸识别系统

OpenClaw与Ollama本地AI部署指南

AI模型本地化部署是当前企业数字化转型的关键技术,通过开源框架Ollama可以在消费级硬件上运行大语言模型。本文以OpenClaw多智能体系统为例,详解从环境配置到模型优化的全流程实践,特别针对国内开发者遇到的网络问题提供了镜像加速等解决方案。这种私有化部署方案尤其适合金融数据分析、企业知识管理等对数据安全要求高的场景,通过模块化设计实现多智能体协作,同时保持对NVIDIA显卡和普通CPU的兼容性。

weixin_34302561的博客 399

MXNet的训练实现脚本:module.py

前面一篇博客:MXNet的训练基础脚本:base_module.py提到MXNet中很重要的一个脚本base_module.py,这里面定义了基本的BaseModule类,而本篇博客提到的module.py脚本中的Module类则是继承BaseModule类,然后进行了具体的实现,比如forward方法,update_metric方法等。在创建模型的时候用的是mx.mod.Module这个类,比如:

AI之路 6732

CSI Tools 工具的安装 Intel 5300 + Ubuntu14.04

在 ubuntu14 系统上面安装 CSI Tools,2020最新教程,亲测可用,只要保证和我做法一致绝对可以安装好。

WS的小屋 1万+

如何使用MXNet在树莓派上搭建实时目标识别系统 AWS

https://cloud.tencent.com/developer/article/1118784 亚马逊的开源深度学习引擎 Apache MXNet 除了支持多 GPU 训练和部署复杂模型外,还可以生成非常轻量级的神经网络模型。我们也可以将这些模型表征部署到有限内存和计算力的移动端中。这就令 MXNet 可以完美地在树莓派中运行深度学习模型。 在本文中,我们将使用 MXNet ...

weixin_30321709的博客 632

抖音最新风控体系研究

小编从技术角度对抖音的风控史和落地目标,跟大家聊一聊抖音,包括海外版抖音TikTok的现状与生态。 1、非常非常早的时期,抖音刚出来的时候,没有任何封禁,这个阶段,导入一个开发库,加上一个请求头,咵咵咵的数据随便拿。 2、2018-2019年,抖音加入了设备id和xg机制,在绝大多数的接口中,携带了设备id参数,同时在请求头中加入了xg,如今的apk市场,能追溯到的最早xg是0200打头的,而小编见过的最早的xg是0000打头的。这个时期的接口,这些参数都还只是预设,没有实际的用处,设备随便写,

qq517348412的博客 1万+

BMS | 从一串到几百串硬件架构简介

锂电池在生活中越来越多的方面扮演能源的角色,除了大家熟知的电动汽车行业,在一些消费类,工业类电子产品比如手机,电动自行车,电动工具中都有应用,追本溯源今天我们一起来学习下最基础的BMS架构。 1~4串架构 以S8241为代表的无通信/无固件/模拟器件 可实现过充保护、过放保护、过流/短路,参数由器件后缀代码决定;通信类手持设备供电系统;1~4节电池保护板架构 如图使用S-8241系列保护IC,一对充放电MOS管控制充放电的回路的切断和接通,系统供电来自于电芯电压,VM引脚用于检测过...

ningvay的博客 9919

Mxnet入门2 - 认识Executor 和 Module

介绍 初看mxnet 对 基于module的mxnet非常费解,这里首先根据本人摸索经验,总结对于基于module入门的顺序应该如下: 熟悉基于Symbol的网络设计 熟悉基于Executor的网络前传反传计算 熟悉基于Module的网络训练 上面入门顺序回答了深度学习开发者使用框架最关心的三个问题,同时也列出了对应的mxnet中面向这三个问题所设计的class,下面介绍 Moudle 和...

qq_25379821的博客 690

系统设计---算法与架构

这片文章对系统设计的具体步骤及相关知识进行介绍,主要分为四部分:算法设计、IC系统架构设计、基于systemC的IC系统设计、系统设计工具SPW简介。 (一)算法设计 系统设计的第一步是给出清晰的系统规范,该规范写明了系统的功能、性能、费用、开发时间等。接下来创建一个系统行为模型,并且可以用来初步验证设计的性能。再下来,对行为模型进行细化,即进行算法设计。算法设计大致分为三步: 1)给出浮点

正在努力的ICer的博客 4374

《深度学习》No module named ‘d2lzh‘/No module named ‘mxnet‘

第一次在jupyter notebook执行深度学习的代码。报错:No module named 'd2lzh' 执行pip install d2lzh命令即可。 接着运行,又报错: 大同小异:执行pip install mxnet 命令即可、下载有点久、耐心等待。 持续更新。。 ...

weixin_41950078的博客 8287

SerDes学习笔记:均衡技术详解 01

本文系统阐述了高速SerDes链路中均衡技术的应用原理与实现方法。重点介绍了发射端预加重/FIR均衡和接收端CTLE/DFE/FFE等主流均衡方案,详细探讨了各类均衡器的频域特性、时域效果及硬件实现架构。

一只豌豆象的博客 1304

如何借助Gemini 3 Pro完成一篇文献精读?(劝收藏)

金句必须是原文的完整句子,并附上该句子在文中的大致位置。你是一名资深科研文献评估专家,请根据我提供的文献信息(标题、作者、期刊、时间、引用、摘要、结论、图表)依次输出:①影响力评估:按期刊、作者、时间、引用、问题重要性给出1–10分及简述;用上述方法再结合Gemini 3 Pro的辅助,原本需要3小时才能读完一篇文献,现在只需50分钟,不管是顶刊论文还是领域内冷门论文,都可以用这套方法,另外七哥设计的高阶精读提示词,需根据自己的文献内容做调整,希望这篇文章的方法能帮你高效精读文献,掌握文献的精华内容。

智能AI让学术科研更容易 1302

我的第一本书《MXNet深度学习实战》

这篇博客介绍下我即将出版的第一本书:《MXNet深度学习实战》,欢迎大家多多支持。 为什么写这本书 2018年3月,华章图书的杨老师在博客上联系我,问我是否有出书意向,内容是深度学习框架方面的实战教学。当时的我使用MXNet和PyTorch框架也有一段时间了,虽然说不上精通,但是用起来还算熟悉,再加上我本人一直以来都喜欢和他人交流算法,并且想完善下自己在深度学习框架方面的知识体系,于是经过一段时间...

AI之路 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【MXNet】MXNet学习笔记

MXNet中经常会用到三个接口:NDArray、Symbol和Module NDarray采用的是命令式编程的方式,可以简单地认为是运行在GPU上的Numpy Array。 Symbol是MXNet中用于构建网络层的模块,采用的是符号式编程的方式(是MXNet实现快速训练和节省显存的关键模块)。 符号式编程需要先用Symbol接口定义好计算图,这个计算图同时包含定义好的输入和输出格式,然后将准备好的数据输入该计算图完成计算。 命令式编程中,计算过程可以逐步来步实现。 完全可以仅仅通过NDArray来定义和使

qq_36643449的博客 1401

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Import mxnet FileNotFoundError Could not find module libmxnet.dll

参考Import mxnet for mxnet-cu92 fails · Issue #17887 · apache/incubator-mxnet (github.com)https://github.com/apache/incubator-mxnet/issues/17887 libmxnet.dll unable to load with python 3.8 - win10 · Issue #18276 · apache/incubator-mxnet (github.com)https:..

Ayka的博客 2323

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Jupyter无法加载MXNET模块问题“No module named 'mxnet”

历尽千辛万苦在集群上装好anaconda3、conda、cuda、cuDNN、mxnet,以为终于可以开始动手深度学习了,却发现在控制台能顺畅的使用mxnet(如图一),但是打开Jupyter却发现无法加载mxnet(如图二)。 翻了很多网上的教程,找到一篇最清晰实用的,是这么解释的:“安装完Anaconda利用conda创建了虚拟环境,但是启动jupyter notebook之后却找不到虚拟...

m0_37723587的博客 1万+

MxNet使用总览

写这篇博文的初衷是希望能整理下自己在使用MxNet过程中对这个框架的理解。详细的介绍都给出了链接,这篇相当于一个概括,希望能对这个框架有一个总的认识,内容会不断补充,有疑问的欢迎交流,谢谢。1、下载MxNet并编译 MxNet的官方网址:http://mxnet.io/get_started/install.html 我这里选择如下安装方式:然后按照 Build the MXNet core s

AI之路 1万+

MXNet的安装以及一些常见错误处理

mxnet的安装以及在这过程种会遇到的一些问题处理,虚拟环境的创建,Jupyter Notebook不能加载MXNet的解决办法,

深度学习领域优质创作者,优快云博客专家 1万+

MxNet学习【2】初识(二)

MXNet学[2]Module - 神经网络训练和预测 文章目录MXNet学[2]Module - 神经网络训练和预测1.数据准备2.创建一个Module3.中间层接口4.高层接口4.1、训练4.2、预测和评价4.3、保存和加载模型   训练一个神经网络需要一些步骤。比如指定训练数据的输入,模型参数初始化,执行前向和后向计算,梯度下降并更新参数,模型的保存和恢复等。在预测的时候,这些步骤也需要进行多次。对于初学者和经验丰富的开发者来说,这些都是能让人头疼的问题。幸运的是,MXNet把这些常用的操作模块化在M

weekdayh的博客 324

MXNet的训练基础脚本:base_module.py

写在前面:在MXNet中有一个很重要的脚本:base_module.py,这个脚本中的BaseModule类定义了和模型实现相关的框架。另外还有一个脚本module.py会在另外一篇博客中讲,这个类继承BaseModule类,并进行了具体的实现,比如forward方法,update_metric方法等。在创建模型的时候用的是mx.mod.Module这个类,比如:model = mx.mod.Mod

AI之路 3223

MXNET学习笔记(一):Module类(1)

mxnet : Module 类(一)Module 是 mxnet 提供给用户的一个高级封装的类。有了它,我们可以很容易的来训练模型。Module 包含以下单元的一个 wraper symbol : 用来表示网络前向过程的 symbol。 optimizer: 优化器,用来更新网络。 exec_group: 用来执行 前向和反向计算。 … 所以 Module 可以帮助我们做 前向计算,(由 exec

Keith 2479
上一篇: MXNet学习1——数据模拟
下一篇: MXNet学习3——Symbol
bleuHY
博客等级 码龄12年 16粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值