python中mxnet_mxnet Python 笔记

1、查看mxnet的版本

import mxnet as mx

mx.__version__

2、扩展nd的维度

image_data = mx.random.normal(shape = (3, 112, 112))

image_data.expand_dims(axis = 0)

3、装载网络结构

import mxnet as mx

train_net = mx.gluon.model_zoo.get_model("ResNet34_V1",pretrianed = False)

4、修改预装载的网络结构

from mxnet.gluon import nn

train_net = ....(参考3)

conv_0 = nn.Conv2d(channels = 64, kernel_size = (3, 3), strides =(1,1), padding = (1, 1), use_bais = False)

conv_0.collect_params().initialize(mx.init.Xavier())

train_net.features.register_child(conv_0, "0")

train_net.features.hybridize()

5、画出网络结构

x =mx.sym.var('data')

mx.viz.plot_network(train_net(x), shape = {'data':(1, 3, 112, 112)} ).view()

6、上下文

num_gpus = 0

ctx = [mx.gpu(i) for i in range(num_gpus) ] if num_gpus > 0 else [mx.cpu(0)]

train_net = mx.gluon.model_zoo.get_model("ResNet34_V1",pretrianed = False,ctx = ctx)

conv_0.collect_params().initialize(mx.init.Xavier(),ctx = ctx)

train_net.collect_params().initialize(mx.init.Xavier(), ctx = ctx )

7、读图片文件,并展示

image = mx.image.imread(filename)

plt.imshow(image.asnumpy())

8、获取GPU个数

num_gpus = mx.context.num_gpus()

9、获取模型,并初始化

finetune_net = resnet50_v2(pretrained=True, ctx=ctx)

# change last softmax layer since number of classes are different

with finetune_net.name_scope():

finetune_net.output = nn.Dense(classes)

finetune_net.output.initialize(init.Xavier(), ctx=ctx)

# hybridize for better performance

finetune_net.hybridize()

10 主要的类图关系如下图

11、官方例子

12、例子

13、读数据

image_channels = 3

image_height = 112

image_width = 96

path_root=r'E:\samplebase'

path_imglist=r'E:\samplebase\1_10000_1.lst'

train_dataiter = mx.image.ImageIter(batch_size= batch_size,

data_shape= (image_channels, image_height, image_width),

path_root = path_root,

path_imglist = path_imglist,

shuffle = True,

rand_mirror = True,

#rand_resize = True,

#resize = 96,

rand_crop = True,

# brightness = 0.1,

# contrast = 0.1,

# saturation = 0.1,

pca_noise = 0.1)

train_dataiter.reset()

image_batch = train_dataiter.next()

for i in range(batch_size):

plt.subplot(1, 4, i + 1)

plt.imshow(image_batch.data[0][i].asnumpy().astype('uint8').transpose((1,2,0)))

plt.show()

14 训练最后一层(FC7)

15 多迭代器https://github.com/khetan2/MBEM/blob/master/resnet.py#L131​github.com

16 预测

17 图片左右翻转

18 读取文件夹下的jpg文件

19 定义人脸关键点可视化函数

for _, w in b_net.collect_params().items():

w.grad_req = 'null'

21 mxnet支持累积gradient的。

由于batch_size太小了,所以想实现caffe中iter_size这样一个功能,就是处理iter_size * batch_size个样本以后在更新网络参数。由于对loss.backward()和trainer.step这两个函数的底层是如何实现的不太清楚,所以想请教一下

22 迁移学习

迁移学习有两种,微调(fine-tuning)和冻结(freezing)。

前者会对预训练层也进行权重更新,这时候需要设置两个学习率,较小的用于对预训练层进行更新,较大的用于对分类层进行更新;

后者保持预训练层的权重不变,只训练分类层。通常在自己的数据集不大的时候,用 freezing,如果自己的数据集足够大且自己的数据集与预训练数据集有较大差异时,用 fine-tuning。

通常 fine-tuning 的效果优于freezing,不过 freezing 可以快速得到一个不错的结果,主要适合小数据集且数据集差异不大的情况。

在建立模型的时候,注意看 API 里的参数,比如 pretrained=True 这样的。

model.collect_params()['conv1_weight'].set_data(mx.nd.array([...]))

我有4个识别任务,现在希望用一个带有多个输出的网络实现。类似于multi-task,区别是我希望每次只训练一个任务,也就是说一个输入对应一个输出。共享层会被4个不同的任务更新,输出层的参数则只被对应的单一任务更新。

可以,你把4个loss加起来,一起训练就行了。你可以用4个独立的输出层。四个loss一起backward

autograd.backward([loss1, loss2, …])

和直接加是等价的

26: >>> nd_iter = mx.io.NDArrayIter(data={'data':mx.nd.ones((100,10))},

... label={'softmax_label':mx.nd.ones((100,))},

... batch_size=25)

27:

28 例子:

29:convert Pytorch pretrain model to MXNET symbol modelPyTorch to ONNX to MXNet Tutorial​docs.aws.amazon.com

30 安装mxnet

pip install mxnet-cu90mkl --pre --upgrade

pip install gluoncv --pre --upgrade

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值