简单处理API 读取图像: image.imdecode(open('../img/cat1.jpg', 'rb').read()) 图像类型转换: img.astype('float32') 图像增强流程 具体增强方式教程有很详细的示意,不再赘述 辅助函数,用于将增强函数应用于单张图片: def apply_aug_list(img, augs): for f in augs: img = f(img) return img 对于训练图片我们随机水平翻转和剪裁.对于测试图片仅仅就是中心剪裁.我…
一.不含参数层 通过继承Block自定义了一个将输入减掉均值的层:CenteredLayer类,并将层的计算放在forward函数里, from mxnet import nd, gluon from mxnet.gluon import nn class CenteredLayer(nn.Block): def __init__(self, **kwargs): super(CenteredLayer, self).__init__(**kwargs) def forward(self, x)…
一.符号分类 符号对我们想要进行的计算进行了描述, 下图展示了符号如何对计算进行描述. 我们定义了符号变量A, 符号变量B, 生成了符号变量C, 其中, A, B为参数节点, C为内部节点! mxnet.symbol.Variable可以生成参数节点, 用于表示计算时的输入. 二.常用符号方法 一个Symbol具有的属性和方法如下图所示: 关联节点查看 list_arguments()用来检查计算图的输入参数; list_outputs()返回此Symbol的所有输出,输出的自动命名遵循一定的规…
全流程地址 一.辅助API介绍 mxnet.image.ImageDetIter 图像检测迭代器, from mxnet import image from mxnet import nd data_shape = 256 batch_size = 32 rgb_mean = nd.array([123, 117, 104]) def get_iterators(data_shape, batch_size): """256, 32""" cla…
想学习MXNet的同学建议看一看这位博主的博客,受益良多. 在本节中,我们将学习如何在MXNet中预处理和加载图像数据. 在MXNet中加载图像数据有4种方式. 使用 mx.image.imdecode 加载原始数据文件 使用在Python中实现的mx.img.ImageIter ,很方便自定义. 它可以从.rec(RecordIO)文件和原始图像文件读取. 使用C ++实现的MXNet后端的mx.io.ImageRecordIter . 对于自定义不太灵活,但提供了多种语言绑定. 创建自定义的…
一.Gluon数据加载 下面的两个dataset处理类一般会成对出现,两个都可做预处理,但是由于后面还可能用到原始图片,.ImageFolderDataset不加预处理的话可以满足,所以建议在.DataLoader预处理 图片数据(含标签)加载函数:gluon.data.vision.ImageFolderDataset .synsets,标签名列表list,因为实际存储位置是数字 .__len__ 给出ImageFolderDataset类的描述, Init signature: mxnet.…
一.符号式编程 1.命令式编程和符号式编程 命令式: def add(a, b): return a + b def fancy_func(a, b, c, d): e = add(a, b) f = add(c, d) g = add(e, f) return g fancy_func(1, 2, 3, 4) 符号式: def add_str(): return ''' def add(a, b): return a + b ''' def fancy_func_str(): return '…
MXNet中含有init包,它包含了多种模型初始化方法. from mxnet import init, nd from mxnet.gluon import nn net = nn.Sequential() net.add(nn.Dense(256, activation='relu')) net.add(nn.Dense(10)) net.initialize() x = nd.random.uniform(shape=(2,20)) y = net(x) 一.访问模型参数 我们知道可以通过…
https://www.cnblogs.com/hellcat/p/9084894.html 目录 一.符号式编程 1.命令式编程和符号式编程 2.MXNet的符号式编程 二.惰性计算 用同步函数实际计算出结果 三.自动并行 回到顶部 一.符号式编程 1.命令式编程和符号式编程 命令式: 1 2 3 4 5 6 7 8 9 10 def add(a, b):     return a + b   def fancy_func(a, b, c, d):     e = add(a, b)     …
一.简单数学操作 1.逐元素操作 t.clamp(a,min=2,max=4)近似于tf.clip_by_value(A, min, max),修剪值域. a = t.arange(0,6).view(2,3) print("a:",a) print("t.cos(a):",t.cos(a)) print("a % 3:",a % 3) # t.fmod(a, 3) print("a ** 2:",a ** 2) # t.po…
Tensor存储结构如下, 如图所示,实际上很可能多个信息区对应于同一个存储区,也就是上一节我们说到的,初始化或者普通索引时经常会有这种情况. 一.几种共享内存的情况 view a = t.arange(0,6) print(a.storage()) b = a.view(2,3) print(b.storage()) print(id(a.storage())==id(b.storage())) a[1] = 10 print(b) 上面代码,我们通过.storage()可以查询到Tensor…
在PyTorch中计算图的特点可总结如下: autograd根据用户对variable的操作构建其计算图.对变量的操作抽象为Function. 对于那些不是任何函数(Function)的输出,由用户创建的节点称为叶子节点,叶子节点的grad_fn为None.叶子节点中需要求导的variable,具有AccumulateGrad标识,因其梯度是累加的. variable默认是不需要求导的,即requires_grad属性默认为False,如果某一个节点requires_grad被设置为True,那…
资料原文 一.概述思路 假设一台机器上有个GPU.给定需要训练的模型,每个GPU将分别独立维护一份完整的模型参数. 在模型训练的任意一次迭代中,给定一个小批量,我们将该批量中的样本划分成份并分给每个GPU一份. 然后,每个GPU将分别根据自己分到的训练数据样本和自己维护的模型参数计算模型参数的梯度. 接下来,我们把k个GPU上分别计算得到的梯度相加,从而得到当前的小批量梯度. 之后,每个GPU都使用这个小批量梯度分别更新自己维护的那一份完整的模型参数. 二.网络以及辅助函数 使用“卷积神经网络—…
一.封装新的PyTorch函数 继承Function类 forward:输入Variable->中间计算Tensor->输出Variable backward:均使用Variable 线性映射 from torch.autograd import Function class MultiplyAdd(Function): # <----- 类需要继承Function类 @staticmethod # <-----forward和backward都是静态方法 def forward(…
查看非叶节点梯度的两种方法 在反向传播过程中非叶子节点的导数计算完之后即被清空.若想查看这些变量的梯度,有两种方法: 使用autograd.grad函数 使用hook autograd.grad和hook方法都是很强大的工具,更详细的用法参考官方api文档,这里举例说明基础的使用.推荐使用hook方法,但是在实际使用中应尽量避免修改grad的值. 求z对y的导数 x = V(t.ones(3)) w = V(t.rand(3),requires_grad=True) y = w.mul(x) z…
一.普通索引 示例 a = t.Tensor(4,5) print(a) print(a[0:1,:2]) print(a[0,:2]) # 注意和前一种索引出来的值相同,shape不同 print(a[[1,2]]) # 容器索引 3.3845e+15 0.0000e+00 3.3846e+15 0.0000e+00 3.3845e+15 0.0000e+00 3.3845e+15 0.0000e+00 3.3418e+15 0.0000e+00 3.3845e+15 0.0000e+00 3…
一.创建Tensor 特殊方法: t.arange(1,6,2)t.linspace(1,10,3)t.randn(2,3) # 标准分布,*size t.randperm(5) # 随机排序,从0到n t.normal(means=t.arange(0, 11), std=t.arange(1, 0, -0.1)) 概览: """创建空Tensor""" a = t.Tensor(2, 3) # 创建和b大小一致的Tensor c = t.Te…
MXNet文档 MXNet官方教程 持久化模型 框架介绍 『MXNet』第一弹_基础架构及API 『MXNet』第二弹_Gluon构建模型 『MXNet』第三弹_Gluon模型参数 『MXNet』第四弹_Gluon自定义层 『MXNet』第五弹_MXNet.image图像处理 『MXNet』第六弹_Gluon性能提升 『MXNet』第七弹_多GPU并行程序设计 『MXNet』第八弹_数据处理API_上 『MXNet』第九弹_分类器以及迁移学习DEMO 『MXNet』第十弹_物体检测SSD 『MX…
关于『进击的Markdown』:第五弹 建议缩放90%食用 路漫漫其修远兮,吾将上下而求索.  我们要接受Mermaid的考验了呢  Markdown 语法真香(一如既往地安利) ( 进击吧!Markdown!) Markdown进阶系列向你开炮,请注意接收 我们就不废话了   又双叕要为大家带来 (正当时的) Markdown了呢~   注:编者用的是CSDN-Markdown编辑器(没错我还是没换, 这个编辑器真的适合小白使用, 再推荐一款"作业部落 Cmd Markdown",(…
关于『HTML』:第三弹 建议缩放90%食用 盼望着, 盼望着, 第三弹来了, HTML基础系列完结了!! 一切都像刚睡醒的样子(包括我), 欣欣然张开了眼(我没有) 敬请期待Markdown语法系列(旧坑填完挖新坑) 开始正文之前又提一个问题:昨天有人偷听牛郎织女吗?我昨天找了个葡萄架子啥也没听着(哼唧). OK废话结束, 开始正文   又双要为大家带来(过时的)HTML了呢~   正文开始 注: !DOCTYPE 声明 <!DOCTYPE>声明有助于浏览器中正确显示网页. 网络上有很多不同…
首更: 由于TensorFlow的奇怪形式,所以载入保存的是sess,把会话中当前激活的变量保存下来,所以必须保证(其他网络也要求这个)保存网络和载入网络的结构一致,且变量名称必须一致,这是caffe...好吧,caffe也没有这种python风格的设定... 废话少说,导入包: import numpy as np import tensorflow as tf 保存会话: W = tf.Variable([[1,2,3],[4,5,6]],dtype=tf.float32) b = tf.V…
『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上 # Author : Hellcat # Time : 2018/2/11 import torch as t import torch.nn as nn import torch.nn.functional as F class LeNet(nn.Module): def __init__(self): super(LeNet,self).__init__() self.conv1 = nn.Conv2d(3, 6, 5)…
『PyTorch』第三弹_自动求导 torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现 Varibale包含三个属性: data:存储了Tensor,是本体的数据 grad:保存了data的梯度,本事是个Variable而非Tensor,与data形状一致 grad_fn:指向Function对象,用于反向传播的梯度计算之用 data import torch as t from torch.autograd import…
RNN基础: 『cs231n』作业3问题1选讲_通过代码理解RNN&图像标注训练 TensorFlow RNN: 『TensotFlow』基础RNN网络分类问题 『TensotFlow』基础RNN网络回归问题 『TensotFlow』深层循环神经网络 『TensotFlow』LSTM古诗生成任务总结 对于torch中的RNN相关类,有原始和原始Cell之分,其中RNN和RNNCell层的区别在于前者一次能够处理整个序列,而后者一次只处理序列中一个时间点的数据,前者封装更完备更易于使用,后者更具灵…
解压文件命令: with zipfile.ZipFile('../data/kaggle_cifar10/' + fin, 'r') as zin: zin.extractall('../data/kaggle_cifar10/') 拷贝文件命令: shutil.copy(原文件, 目标文件) 一.整理数据 我们有两个文件夹'../data/kaggle_cifar10/train'和'../data/kaggle_cifar10/test',一个记录了文件名和类别的索引文件 我们的目的是在新的…
上节用了Sequential类来构造模型.这里我们另外一种基于Block类的模型构造方法,它让构造模型更加灵活,也将让你能更好的理解Sequential的运行机制. 回顾: 序列模型生成 层填充 初始化模型参数 net = gluon.nn.Sequential() with net.name_scope(): net.add(gluon.nn.Dense(1)) net.collect_params().initialize(mx.init.Normal(sigma=1)) # 模型参数初始化…
MXNet是基础,Gluon是封装,两者犹如TensorFlow和Keras,不过得益于动态图机制,两者交互比TensorFlow和Keras要方便得多,其基础操作和pytorch极为相似,但是方便不少,有pytorch基础入门会很简单.注意和TensorFlow不同,MXNet的图片维度是 batch x channel x height x width . MXNet的API主要分为3层,最基础的时mxnet.ndarray(NDArray API),它以近似numpy数组的形式记录了诸多基…
上一节我们已经谈到了计算节点,但是即使是官方文档介绍里面相关内容也过于简略,我们使用Faster-RCNN代码中的新建节点为例,重新介绍一下新建节点的调用栈. 1.调用新建节点 参数分为三部分,op_type是节点名称,对应于辅助class的装饰器的输入:其他参数一部分传递给辅助class的初始化函数(这部分参数的虚参名和初始化函数的需参名要对应上),一部分直接作为一个list传给节点定义class的forward函数的in_data参数. group = mx.symbol.Custom(ro…
一.im2rec用法简介 首先看文档: usage: im2rec.py [-h] [--list] [--exts EXTS [EXTS ...]] [--chunks CHUNKS] [--train-ratio TRAIN_RATIO] [--test-ratio TEST_RATIO] [--recursive] [--no-shuffle] [--pass-through] [--resize RESIZE] [--center-crop] [--quality QUALITY] [-…
添加记录节点 -> 汇总记录节点 -> run汇总节点 -> [书写器生成]书写入文件 [-> 刷新缓冲区] 可视化关键点: 注意, 1.with tf.name_scope('str'):上下文环境,每一个name_scope内的张量被统一到一个可展开的节点中,且可以嵌套,而带'name'属性的张量会成为可视化图中最小的节点. 2.超参数是张量,使用tf.summary.histogram(layer_name + '/biases', biases)记录,在网页的HISTOGR…