1. 下载教程

可以用浏览器下载zip格式并解压,在解压目录文件资源管理器的地址栏输入cmd进入命令行模式。

也可以

git pull https://github.com/mli/gluon-tutorials-zh

2.安装gluon CPU

添加源:

# 优先使用清华conda镜像
conda config --prepend channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ # 也可选用科大conda镜像
conda config --prepend channels http://mirrors.ustc.edu.cn/anaconda/pkgs/free/

cmd中安装

conda env create -f environment.yml
activate gluon # 注意Windows下不需要 source

可更新教程:

conda env update -f environment.yml

3.安装GPU版本

先卸载CPU

pip uninstall mxnet

然后

pip install --pre mxnet-cu75 # CUDA 7.5
pip install --pre mxnet-cu80 # CUDA 8.0

【可选项】国内用户可使用豆瓣pypi镜像加速下载:

pip install --pre mxnet-cu75 -i https://pypi.douban.com/simple # CUDA 7.5
pip install --pre mxnet-cu80 -i https://pypi.douban.com/simple # CUDA 8.0

查看安装

import pip
for pkg in ['mxnet', 'mxnet-cu75', 'mxnet-cu80']:
pip.main(['show', pkg])

4.查看教程

然后安装notedown,运行Jupyter并加载notedown插件:

pip install https://github.com/mli/notedown/tarball/master
jupyter notebook --generate-config
jupyter notebook --NotebookApp.contents_manager_class='notedown.NotedownContentsManager'

5.教程简记

跟NumPy的转换

from mxnet import ndarray as nd
import numpy as np
x = np.ones((2,3))
y = nd.array(x) # numpy -> mxnet
z = y.asnumpy() # mxnet -> numpy
print([z, y])

自动求导

import mxnet.autograd as ag

假设我们想对函数 $f = 2*x^2$ 求关于 $x$的导数。

1.创建变量

x = nd.array([[1, 2], [3, 4]])

2.通过NDArray的方法attach_grad()来要求系统申请梯度空间

x.attach_grad()

3.定义函数 f

with ag.record():
y = x * 2
z = y * x

4.反向传播,求梯度

z.backward()

5.梯度:

print('x.grad: ', x.grad)

线性回归,从零开始

#coding=utf-8
"""线性回归,从零开始""" from mxnet import ndarray as nd
from mxnet import autograd
import matplotlib.pyplot as plt
import random # 1.创建数据集
# y[i] = 2 * X[i][0] - 3.4 * X[i][1] + 4.2 + noise
# y = X*w + b + n
num_inputs = 2
num_examples = 1000 true_w = [2, -3.4]
true_b = 4.2 X = nd.random_normal(shape=(num_examples, num_inputs))
y = true_w[0] * X[:,0] + true_w[1] * X[:,1] + true_b
y += 0.01 * nd.random_normal(shape=y.shape) # plt.scatter(X[:,1].asnumpy(), y.asnumpy())
# plt.show() # 2.数据读取
batch_size = 10
def data_iter():
# 产生一个随机索引
idx = list(range(num_examples))
random.shuffle(idx)
for i in range(0, num_examples, batch_size):
j = nd.array(idx[i:min(i+batch_size, num_examples)])
yield nd.take(X, j), nd.take(y, j) # for data, label in data_iter():
# print (data, label)
# break # 3.初始化模型参数
w = nd.random_normal(shape=(num_inputs,1))
b = nd.zeros((1,))
params = [w, b] # print (params)
# 创建梯度空间
for param in params:
param.attach_grad() # 4.定义模型
def net(X):
return nd.dot(X, w) + b # 5.定义损失函数
def square_loss(yhat, y):
# 注意这里将y变形成yhat的形状来避免矩阵的broadcasting
return (yhat - y.reshape(yhat.shape)) ** 2 # 6.优化
def SGD(params, lr):
for param in params:
param[:] = param - lr * param.grad # 7.训练
# 模型函数
def real_fn(X):
return 2 * X[:, 0] - 3.4 * X[:, 1] + 4.2
# 绘制损失随训练次数降低的折线图,以及预测值和真实值的散点图
def plot(losses, X, sample_size=100):
xs = list(range(len(losses)))
fig, axes = plt.subplots(1, 2)
axes[0].set_title('Loss during training')
axes[0].plot(xs, losses, '-r')
axes[1].set_title('Estimated vs real function')
axes[1].plot(X[:sample_size, 1].asnumpy(),
net(X[:sample_size, :]).asnumpy(), 'or', label='Estimated')
axes[1].plot(X[:sample_size, 1].asnumpy(),
real_fn(X[:sample_size, :]).asnumpy(), '*g', label='Real')
axes[1].legend()
plt.show() epochs = 5
learning_rate = 0.001
niter = 0
losses = []
moving_loss = 0
smoothing_constant = 0.01 # 训练
for e in range(epochs):
total_loss = 0
# 每个epoch
for data, label in data_iter():
with autograd.record():
output = net(data) # 前向传播
loss = square_loss(output, label)
loss.backward() # 反向传播
SGD(params, learning_rate) # 更新参数
iter_loss = nd.sum(loss).asscalar() / batch_size
total_loss += nd.sum(loss).asscalar() # 记录损失变化
niter += 1
curr_loss = nd.mean(loss).asscalar()
moving_loss = (1 - smoothing_constant) * moving_loss + smoothing_constant * curr_loss losses.append(iter_loss)
if (niter + 1) % 100 == 0:
print("Epoch %s, batch %s. Average loss: %f" % (e, niter, total_loss / num_examples))
plot(losses, X)

使用GPU

a = nd.array([1,2,3], ctx=mx.gpu())
b = nd.zeros((3,2), ctx=mx.gpu())

可以通过copytoas_in_context来在设备直接传输数据。

y = x.copyto(mx.gpu())
z = x.as_in_context(mx.gpu())

这两个函数的主要区别是,如果源和目标的context一致,as_in_context不复制,而copyto总是会新建内存:

这类似与caffe中的cuda操作

float* tmp_transform_bbox = NULL;
CUDA_CHECK(cudaMalloc(&tmp_transform_bbox, * sizeof(Dtype) * rpn_pre_nms_top_n));//修改retained_anchor_num
cudaMemcpy(tmp_transform_bbox, &transform_bbox_[transform_bbox_begin], rpn_pre_nms_top_n * sizeof(Dtype) * , cudaMemcpyDeviceToDevice);

参数获取

w = net[0].weight
b = net[0].bias
print 'name: ', net[0].name, '\nweight: ', w, '\nbias: ', b print('weight:', w.data())
print('weight gradient', w.grad())
print('bias:', b.data())
print('bias gradient', b.grad())
params = net.collect_params()
print(params)
print(params['sequential0_dense0_bias'].data())
print(params.get('dense0_weight').data())

参数初始化

from mxnet import init
params = net.collect_params()
params.initialize(init=init.Normal(sigma=0.02), force_reinit=True)
print(net[0].weight.data(), net[0].bias.data())

6.使用中错误解决

1.python2打印权重报错

w = net[0].weight
b = net[0].bias
print('name: ', net[0].name, '\nweight: ', w, '\nbias: ', b)

把C:\Anaconda2\envs\gluon\Lib\site-packages\mxnet\gluon\parameter.py 119行改为

s = 'Parameter {name} (shape={_shape}, dtype={dtype})'

同时,如果是Python2需要把print后去掉括号。。。

win10 + gluon + GPU的更多相关文章

  1. Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置

    最近入手一台GTX 1070的笔记本,手痒想在win10上试下GPU跑模型,所以就有了接下来的安装GPU版mxnet的坎坷历程,经过多重试验终于搞定了python和R安装mxnet,现将主要点记录如下 ...

  2. win10+caffe+GPU

    由于学习需要,决定安装caffe,之前用的都是基于theano的keras.听说win下caffe很难配置,经过一个下午和晚上的配置终于成功,以此记录. 我的电脑:win10 64位,N卡GTX950 ...

  3. win10 caffe GPU环境搭建

    一.准备 系统:win10 显卡:gtx1050Ti 前期的一些必要软件安装,包括python3.5.matlab2016.vs2015.git, 可参考:win10+vs2015编译caffe的cp ...

  4. TensorFlow 安装 Win10 Python+GPU

    前叙:有灵魂的程序都是每一个程序员的最终目标.TensorFlow了解下? 打算花几个月学机器学习,TensorFlow是很好的选择,折腾了会环境,略有心得分享下. 环境:win10 Python:3 ...

  5. win10+Theano+GPU

    1. cuda + cudnn 首先还是要先安装GPU库,具体和caffe安装中一样. 2. Theano 为防止下载速度慢,配置清华镜像 conda config --add channels ht ...

  6. win10+tensorflow+CUDA 心酸采坑之路

    最近准备学习机器学习和深度学习,所以入坑Tensorflow,之前一直使用的是Anaconda3的cpu版本的Tensorflow,但是这次作死一直想用GPU版本的,主要是不想浪费我的1080ti,但 ...

  7. Windows安装TensorFlow

    1.下载安装Anaconda 官方地址:https://www.continuum.io/downloads/镜像地址:https://mirrors.tuna.tsinghua.edu.cn/ana ...

  8. TensorFlow目标检测(object_detection)api使用

    https://github.com/tensorflow/models/tree/master/research/object_detection 深度学习目标检测模型全面综述:Faster R-C ...

  9. win10 + cuda10 +cudnn + GLUON 环境搭建

    1. <动手学深度学习> 由于新型非典型肺炎扩散,上班日期挪到2.10 日了,在家比较无聊决定了解一下深度学习. 在github 上找到一个资源,可以动手学深度学习,便打算按照这本书的内容 ...

随机推荐

  1. MFC笔记5

    1.MessageBox()             引用自(http://www.douban.com/note/40199603/) 一 函数原型及参数 function MessageBox(h ...

  2. 查看oracle的执行计划

    基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分 ...

  3. springboot @scheduled 并发

    本文介绍如何使用springboot的sheduled实现任务的定时调度,并将调度的任务实现为并发的方式. 1.定时调度配置scheduled 1)注册定时任务 package com.xiaoju. ...

  4. 解决HighChart开发遇到的2个问题

    需求很简单,显示一条24小时的变化曲线 写完代码效果是只有一条直线,连时间轴都没有 第1个错误  Highcharts error #12 当通过要绘制的点超过1000个时就会报这个错,我按分钟计算间 ...

  5. Pandas重塑和轴向旋转

    重塑和轴向旋转 Se import pandas as pd import numpy as np from pandas import Series data=pd.DataFrame(np.ara ...

  6. 373. Find K Pairs with Smallest Sums 找出求和和最小的k组数

    [抄题]: You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. D ...

  7. [leetcode]6. ZigZag Conversion字符串Z形排列

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  8. 利用maven将项目打包成一个可以运行的独立jar包

    目标:希望把Java项目打包成一个完整的jar包,可以独立运行,不需要再依赖其他jar包. 我们在用eclipse中mvn创建mvn项目的时候,选择非webapp,会默认的以jar打包形式,如下图: ...

  9. Linux 6上使用UDEV绑定共享存储

    1.硬盘的查看方式 [root@cl6-11gr2-rac1 ~]# ls -ltr /dev/sd* brw-rw----. 1 root disk 8, 48 8月 16 13:34 /dev/s ...

  10. Python踩坑之 sys.argv[-1]代表什么

    平台:win10+python 3.7.0 一.sys说明: sys.argv这个函数是我们写python脚本中最常用的一个函数. sys是Python的一个「标准库」,也就是官方出的「模块」,是「S ...