还能坚持
这个作者很懒,什么都没留下…
展开
-
深度学习思想汇总与常见算法汇总
1 反向传播1.1 反向传播算法推导过程(非常详细)链接:https://blog.youkuaiyun.com/BieberChen/article/details/1000591021.2 四张图彻底搞懂CNN反向传播算法链接:https://blog.youkuaiyun.com/BieberChen/article/details/1006270421. 3 前向传播与反向传播的理解与推导过程链接:https://mp.weixin.qq.com/s/exG3_jNdrl0U1Oq1i5M–w1.4 LSTM原创 2021-04-24 16:18:28 · 194 阅读 · 1 评论 -
【MXNet学习27】mxnet+gluon快速入门
import numpy as npimport mxnet as mximport logginglogging.getLogger().setLevel(logging.DEBUG) # logging to stdout1、mxnet基本数据结构1.1 ndarrayndarray是mxnet中最基本的数据结构,ndarray和mxnet的关系与tensor和pytorch的关系类似。该数据结构可以看成numpy的一种变体,基本上numpy的操作ndarray都可以实现。与ndarra转载 2021-04-15 20:54:58 · 1441 阅读 · 0 评论 -
【MXNet学习26】MXNet autograd 自动求导
MXNet 提供 autograd 包来⾃动化求导过程。MXNet 的 autograd 包可以对正常的命令式程序进⾏求导。from mxnet import autograd,nd #创建变量,并复制x = nd.arange(4).reshape((4,1)) #先使用attach_grad()为变量梯度申请内存x.attach_grad() #定义有关变量x的函数。默认条件下,为了减少计算和内存开销,MXNet不会记录用于求梯度的计算图。我们需要调用record函数来要求MXN.转载 2021-04-12 23:44:13 · 723 阅读 · 0 评论 -
【MXNet学习25】4.4 测试代码详细解读
4.3节通过代码清单4-2给出了完整的测试代码,与训练代码相比,测试代码相对要简单一些,整体而言只需要导入模型后执行模型的前向计算即可,不涉及损失的反向传播、参数更新等过程。通过4.3节的介绍,相信你对整个测试代码有了一个直观的认识,接下来我将详细介绍测试代码的内容,主要包含模型导入、数据读取和预测输出三个部分。4.4.1 模型导入MXNet框架在训练深度学习模型过程中会保存两个主要文件,即“.params文件”和“.json文件”,前者是模型的参数,后者是模型的网络结构,因此在导入模型时需要同时导入原创 2021-04-11 18:45:56 · 239 阅读 · 0 评论 -
【MXNet学习24】4.3 测试代码初探
在训练得到一个模型后,一般可以通过一个测试代码测试模型在指定输入图像时的输出结果,从而判断训练得到的模型是否有效。有时候测试代码也被称为demo,可以用来展示模型训练的效果,因此测试代码是一个完整项目必不可少的部分。完整的测试代码如代码清单4-2所示,主要包含模型导入、数据读取和预测输出3个部分,下面假设这些代码都保存在test_mnist_code4-2.py脚本中。代码清单4-2 MNIST手写数字体分类测试代码 import mxnet as mximport numpy as npdef原创 2021-04-11 18:21:36 · 172 阅读 · 0 评论 -
【MXNet学习23】4.2 训练代码详细解读
4.1节中介绍了一个完整的MNIST手写数字体分类代码,这几乎是每一个入门深度学习的人都会运行的实验。一个比较好的代码阅读习惯既可以是从全局到局部,也可以是从局部到全局,这样才能建立起对代码的完整认识。目前开源的深度学习相关的项目非常多,但不论这些项目的代码量如何,基本上每个项目的代码都是分模块维护的,比如专门的数据读取模块、模型构建模块、参数配置模块等,这对于阅读复杂项目的代码尤其有帮助。因此希望读者能够逐渐养成这样的习惯,并应用在今后的代码书写中。通过4.1节的介绍,相信你对整个训练代码有了一个直观的原创 2021-04-11 17:40:50 · 375 阅读 · 0 评论 -
【MXNet学习22】4.1 训练代码初探
为了让读者对训练代码有一个直观的认识,首先我们完整地看一下训练代码,如代码清单4-1所示。代码清单4-1中的代码主要分为训练参数配置、数据读取、网络结构搭建和训练模型四大部分,这四个部分在接下来几节中将进行详细介绍。 代码清单4-1 MNIST手写数字体分类训练代码 import mxnet as mximport argparseimport numpy as npimport gzipimport structimport loggingdef get_network(num_clas原创 2021-04-11 17:05:04 · 149 阅读 · 0 评论 -
【MXNet学习21】 4 MNIST手写数字体分类
相信很多读者在刚刚入门深度学习时都会运行一下MNIST数据集,MNIST数据集链接地址为:http://yann.lecun.com/exdb/mnist/。MNIST是一个手写数字的数据集,该数据集中包括训练集和测试集两部分,训练集包含了60000个样本,测试集包含了10000个样本,图4-1显示了MNIST数据集的图像样例,本章讲介绍如何使用MXNet框架实现MNIST手写数字体的分类。计算机对图像的认知并没有人类对图像的认知那么直观,那么计算机看到的图像到底是什么样的呢?其实图像数据对于计算机而言原创 2021-04-11 16:33:01 · 326 阅读 · 0 评论 -
【MXNet学习20】 本章小结
本章主要介绍了MXNet框架中最常用到的三个模块:NDArray、Symbol和Module,对比了三者之间的联系并通过简单的代码对这三个模块的使用有了大致的认识。NDArray是MXNet框架中最基础的数据结构,借鉴了NumPy中array的思想且能在GPU上运行,同时采取命令式编程的NDArray在代码调试上非常灵活。NDArray提供了与NumPy array相似的方法及属性,因此熟悉NumPy array的用户应该能够很快上手NDArray的操作,而且二者之间的转换也非常方便。Symbol是MX原创 2021-04-11 15:18:59 · 122 阅读 · 0 评论 -
【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模块,首先原创 2021-04-11 15:18:23 · 234 阅读 · 0 评论 -
【MXNet学习18】3.2 Symbol
Symbol是MXNet框架中用于构建网络层的模块,Symbol的官方文档地址是:https://mxnet.apache.org/api/python/symbol/symbol.html,与Symbol相关的接口都可以在该文档中查询。与采用了命令式编程(imperative programming)的NDArray不同的是,Symbol采用的是符号式编程(symbolic programming),其是MXNet框架实现快速训练和节省显存的关键模块。之前我们介绍过符号式编程的含义,简单来说就是,符号式编原创 2021-04-11 14:32:07 · 361 阅读 · 0 评论 -
【MXNet学习17】3.1 NDArray
MXNet框架中的三大马车:NDArray、Symbol和Module。做一个简单的比喻,假如讲从搭建到训练一个算法的过程比作是一栋房子从建造到装修的过程,那么NDArray就相当于是钢筋水泥这样的部件,Symbol就相当于是房子每一层的设计,Module就相当于是房子整体框架的搭建。这一节主要讲解的是NDArray...原创 2021-04-09 19:42:34 · 147 阅读 · 0 评论 -
【MXNet学习16】在MXNet中使用Dropout
1、Dropout层应该加在什么地方做分类的时候,Dropout 层一般加在全连接层后(输出层的全连接层后不用drop了),防止过拟合,提升模型泛化能力,而很少见到卷积层后接Dropout (原因主要是 卷积参数少,不易过拟合)2、Dropout层作用分析2.1、参考文献Dropout是Srivastava等人在2014年的一篇论文中提出的一种针对神经网络模型的正则化方法 Dropout: A Simple Way to Prevent Neural Networks from Overfitti原创 2021-01-22 13:44:27 · 407 阅读 · 0 评论 -
【MXNet学习15】MXNet中自动求导与stop_gradient详解
1、stop_gradient()方法在构建神经网络的时候,有时候我们并不想计算某个节点的梯度,在mxnet的symbol模块中提供了一个stop_gradient方法可以设置不计算某个NDArray的梯度,此时如果对设置的NDArray计算梯度时,会返回0。import mxnet as mxv1 = mx.nd.array([[1, 2]])v2 = mx.nd.array([[0, 1]])v3 = mx.nd.array([[5, 4]])# 创建两个symbol变量aa = mx.原创 2020-12-30 11:04:46 · 258 阅读 · 0 评论 -
MXNet符号编程
1、构成符号:符号对我们想要进行的计算进行了描述, 下图展示了符号如何对计算进行描述. 下图定义了符号变量A, 符号变量B, 生成了符号变量C, 其中, A, B为参数节点, C为内部节点!,mxnet.symbol.Variable可以生成参数节点, 用于表示计算时的输入.一个Symbol具有的属性和方法如下图所示:2、对神经网络进行配置:一个Symbol的list_argument()属性可以用来检查计算图的输入参数; list_output()属性可以返回此Symbol的所有输出! 输出的转载 2020-09-10 15:20:46 · 206 阅读 · 0 评论 -
【MXNet学习1】初学习
1、mxnet加载模型训练得到的mxnet模型(.params是二进制参数文件,.json是文本网络结构文件)之后,拿模型来进行预测也是工程中重要的工作。 # mx.model.load_checkpoint()函数是加载模型,两个参数分别是模型文件名的前缀和epoch数目; sym, arg_params, aux_params = mx.model.load_checkpoint(prefix, epoch) print(sym) # print(arg_params)原创 2020-09-11 23:08:33 · 490 阅读 · 0 评论 -
【MXNet学习】SoftmaxOutput源码
1、翻译Computes the gradient of cross entropy loss with respect to softmax output.该函数的作用是用输softmax输出,计算交叉熵损失的梯度This operator computes the gradient in two steps. 计算梯度的操作分为两步。The cross entropy loss does not actually need to be computed. 实际上没有计算交叉熵损失(只是计算了交叉原创 2020-09-14 11:10:33 · 376 阅读 · 0 评论 -
【MXNet学习2】Symbol -神经网络图和自动区分
1、符号编程MXNet提供了Symbol API,一个用于符号编程的接口。所谓符号编程,相比于传统的一步步计算,我们首先会定义一个计算图。计算图中包含规定的输入和输出的占位符。然后编译它,并与NDArray绑定起来进行计算。符号编程的另一个优点是我们可以在使用它之前就优化。例如,当以指令式编程计算一个表达式时,我们不知道下一步需要什么数据。但是在符号编程里,我们已经预先定义好了需要的输出。这意味着在一边计算的时候,可以一边将中间步骤的内存回收掉。并且相同的网络下,Symbol API占用更少的内存。参见原创 2020-09-17 19:58:53 · 394 阅读 · 0 评论 -
【MXNet学习3】Module - 神经网络训练和预测
训练一个神经网络需要一些步骤。比如指定训练数据的输入,模型参数初始化,执行前向和后向计算,梯度下降并更新参数,模型的保存和恢复等。在预测的时候,这些步骤也需要进行多次。对于初学者和经验丰富的开发者来说,这些都是能让人头疼的问题。幸运的是,MXNet把这些常用的操作模块化在Module包内。Module提供高层和中间层API来操作定义好的网络。我们可以切换使用这些方法,这篇文章将介绍这些方法的使用。1、准备在这篇教程里我们将在 UCI letter recognition(英文字母识别)数据集上训练一个多转载 2020-09-17 20:12:26 · 592 阅读 · 0 评论 -
【MXNet学习4】训练入口,fit()源码详解
1、MXNet fit介绍在MXNet中,Module提供了训练模型的接口。使用symbol将计算图建好之后,用Module包装一下(Module继承自BaseModule,所以有fit()方法),就可以通过fit()方法对其进行训练,fit()方法同时是MXNet的fine-tune.py中启动训练的入口,非常值得读一读源码。最核心的还是Module类的fit方法(model.fit()就是Module类的对象在调用fit方法),总的来讲,fit()这个方法是作者包装好的训练入口,包含训练的一些配置,导原创 2020-09-23 17:39:27 · 824 阅读 · 0 评论 -
【MXNet学习5】MXNet的预训练:fine-tune.py源码详解
1、mxnet框架下resnet18/34/50/100/152预训练模型和json下载路径https://blog.youkuaiyun.com/u010205128/article/details/1052189922、Fine-Tuning微调原理https://blog.youkuaiyun.com/weixin_42137700/article/details/107836802在MXNet框架下,如果要在一个预训练的模型上用你的数据fine-tune一个模型(或者叫迁移学习,即你的模型的参数的初始化不再原创 2020-12-22 17:10:33 · 216 阅读 · 0 评论 -
【MXNet学习6】MXNet Data Iterator
1、MXNet Data Iterator(数据迭代器)本文先就DataBatch、DataDesc、DataIter三个主要用到的类进行介绍,然后引出Mxnet中常见的迭代器。最后介绍一种为通用数据格式设计的数据迭代器DataLoaderIter。2、DataBatch2.1、介绍MXNet中的数据迭代器Data iterator类似于Python迭代器对象。在Python中,函数iter()允许通过对可iterable对象(如Python列表)调用next()按顺序获取item。数据迭代器提供了转载 2020-09-24 10:59:14 · 819 阅读 · 0 评论 -
【MXNet学习7】mx.sym.BlockGrad理解
1、解释我们知道现在深度学习的框架是计算图,由节点和路径组成。在前向和反向的时候都是通过图路径传递的,那么这个函数是用在反向传播的时候,字面意思就是阻塞梯度传播。2、示例输入两个点,输出一个点,如下图所示:2.1、正常反向传播上图表示的公式是:y=3a+4b,在正常的反向传播时,a的偏导就是3,b的偏导为4(假设都是标量的情况下)。代码测试:v1 = np.array([[1, 2]])v2 = np.array([[0, 1]])a = mx.sym.Variable('a')b =原创 2020-09-25 10:59:55 · 453 阅读 · 0 评论 -
【MXNet学习8】获取指定层的权重、输出结果,和相关的梯度
1、通过Module的方法1.1、Module.get_outputs()获取选定层的输出结果##################sym, arg_params, aux_params = mx.model.load_checkpoint('resnet-18', 0) # 载入模型args = sym.get_internals().list_outputs() # 获得所有中间输出print(args)internals = sym.get_internals()fc1 = inter原创 2020-09-25 11:29:52 · 604 阅读 · 1 评论 -
【MXNet学习9】MXNet框架如何自定义evaluation metric
1、评价标准(Evaluation Metric)使用深度学习框架训练模型的时候都需要用到评价标准,比如准确率等,那么在MXNet框架下,这些评价标准(Evaluation Metric)是怎么实现的呢?如果我们要自定义一个不一样的评价标准要怎么做?一起来了解下吧。首先来看看在MXNet框架下关于evaluation metric的最基本的类和脚本。mxnet.metric.EvalMetric是MXNet框架中计算评价标准(evaluation metric)的基础类,这个基础类是在MXNet项目的/转载 2020-09-26 11:34:47 · 548 阅读 · 0 评论 -
【MXNet学习10】mxnet中自定义loss fuction
1、自定义损失函数mxnet中使用MakeLoss自定义损失函数2、MakeLoss()方法def MakeLoss(data=None, grad_scale=_Null, valid_thresh=_Null, normalization=_Null, name=None, attr=None, out=None, **kwargs): r"""Make your own loss function in network construction. This operator原创 2020-09-27 16:45:23 · 340 阅读 · 1 评论 -
【MXNet学习11】opencv实现mxnet均值归一化
1、均值归一化在一般的图像预处理过程中都会对图像进行减去mean,除以std操作。需要注意的是:一定要用训练集计算出均值和方差,否则违背了深度学习的原则(即模型训练仅能从训练数据中获取信息)。对于得到的mean值,训练集、验证集和测试集都要分别减去均值。2、为什么要均值归一化在计算机视觉领域中,一定免不了的就是图像预处理中的 逐个样本减去mean值的过程,那么为什么一定要做这一步呢?其主要的原因就是,对于自然图像,其是一种平稳的数据分布【即图像的每一维都服从相同的分布】。所以通过减去数原创 2020-10-04 11:39:59 · 673 阅读 · 1 评论 -
【MXNet学习12】学习率的设定
1、学习率目前深度学习使用的都是非常简单的一阶收敛算法,梯度下降法,不管有多少自适应的优化算法,本质上都是对梯度下降法的各种变形,所以,初始学习率对深层网络的收敛起着决定性的作用,下面就是梯度下降法的公式:α\alphaα 就是学习率,如果学习率太小,会导致网络loss下降非常慢,如果学习率太大,那么参数更新的幅度就非常大,就会导致网络收敛到局部最优点,或不会收敛或者loss直接开始增加;如下图所示:学习率的选择策略在网络的训练过程中是不断在变化的,在刚开始的时候,参数比较随机,所以我们应该选择相原创 2020-10-05 16:36:56 · 367 阅读 · 0 评论 -
【MXNet学习13】全连接层的认识
说明全连接层的本质两个二维矩阵的相乘举例原创 2020-10-27 21:47:03 · 195 阅读 · 0 评论 -
【MXNet学习14】TensorFlow、Keras、MXNet、Torch中adam参数设置
TensorFlow:learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08.Keras:lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0.Blocks:learning_rate=0.002, beta1=0.9, beta2=0.999, epsilon=1e-08, decay_factor=1.Lasagne:learning_rate=0.001, beta.转载 2020-11-30 11:07:35 · 601 阅读 · 0 评论 -
ubuntu安装MXNet GPU版本
1、安装推荐pip安装mxnet,gpu版本:pip install mxnet-cu19==1.0.0豪华至尊gpu+mkl版本pip install mxnet-cu90mkl==1.0.02、验证使用系统python验证,命令行中输入:pythonCPU:from mxnet import ndx = nd.array([1,2,3])x.contextcpu(0)GPUfrom mxnet import nda = nd.array([1,2,3], ctx原创 2020-09-05 15:18:49 · 1349 阅读 · 0 评论