win10 + gluon + GPU
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())
可以通过copyto和as_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的更多相关文章
- Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
最近入手一台GTX 1070的笔记本,手痒想在win10上试下GPU跑模型,所以就有了接下来的安装GPU版mxnet的坎坷历程,经过多重试验终于搞定了python和R安装mxnet,现将主要点记录如下 ...
- win10+caffe+GPU
由于学习需要,决定安装caffe,之前用的都是基于theano的keras.听说win下caffe很难配置,经过一个下午和晚上的配置终于成功,以此记录. 我的电脑:win10 64位,N卡GTX950 ...
- win10 caffe GPU环境搭建
一.准备 系统:win10 显卡:gtx1050Ti 前期的一些必要软件安装,包括python3.5.matlab2016.vs2015.git, 可参考:win10+vs2015编译caffe的cp ...
- TensorFlow 安装 Win10 Python+GPU
前叙:有灵魂的程序都是每一个程序员的最终目标.TensorFlow了解下? 打算花几个月学机器学习,TensorFlow是很好的选择,折腾了会环境,略有心得分享下. 环境:win10 Python:3 ...
- win10+Theano+GPU
1. cuda + cudnn 首先还是要先安装GPU库,具体和caffe安装中一样. 2. Theano 为防止下载速度慢,配置清华镜像 conda config --add channels ht ...
- win10+tensorflow+CUDA 心酸采坑之路
最近准备学习机器学习和深度学习,所以入坑Tensorflow,之前一直使用的是Anaconda3的cpu版本的Tensorflow,但是这次作死一直想用GPU版本的,主要是不想浪费我的1080ti,但 ...
- Windows安装TensorFlow
1.下载安装Anaconda 官方地址:https://www.continuum.io/downloads/镜像地址:https://mirrors.tuna.tsinghua.edu.cn/ana ...
- TensorFlow目标检测(object_detection)api使用
https://github.com/tensorflow/models/tree/master/research/object_detection 深度学习目标检测模型全面综述:Faster R-C ...
- win10 + cuda10 +cudnn + GLUON 环境搭建
1. <动手学深度学习> 由于新型非典型肺炎扩散,上班日期挪到2.10 日了,在家比较无聊决定了解一下深度学习. 在github 上找到一个资源,可以动手学深度学习,便打算按照这本书的内容 ...
随机推荐
- CentOS7下安装Gitlab社区版【安装步骤、IP改域名、修改端口】
这两天一直在给公司的服务器配置Gitlab(10.5.4).过程很是痛苦,所以把过程记录一下. 1.安装CentOS7 从官网上下载了最新版CentOS-7-x86_64-DVD-1708.iso.用 ...
- java处理url中的特殊字符%等
java处理url中的特殊字符(如&,%...) URL(Uniform Resoure Locator,统一资源定位器)是Internet中对资源进行统一定位和管理的标志.一个完整的URL包 ...
- Servlet中获取Spring管理的bean
描述: 在Servlet中调用Spring管理的接口,可以使Dao/Service/ServiceImpl. 前提是在调用的bean中有注解: @Repository("beanName&q ...
- AngularJS学习笔记(二)
一.AngularJS Select(选择框) 1.使用 ng-options 创建选择框 <div ng-app="myApp" ng-controller="m ...
- Linux 网络配置文件解析
Linux 网络配置文件解析 网络配置文件路径/etc/sysconfig/network-scripts/ifcfg-* *代表网卡名 vim /etc/sysconfig/network- ...
- 【转载】在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问,并可修改MySQL密码
在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问,并可修改MySQL密码 2018年08月 ...
- Shell 数值、字符串比较
Shell脚本中,数值与字符串比较是不同的,因此要注意(注意[]括号内参数和括号之间有一个空格). 一.数值比较 -eq 等于,如: if [ $a -eq $b ] -ne 不等于,如: if ...
- 正则RegExp的懒惰性和贪婪性; 分组捕获;
1.正则的懒惰性??? 每次在它的方法exec中捕获的时候,只捕获第一次匹配的内容,而不往下捕获,我们把这种情况称为正则的懒惰性 且每一次捕获的位置都是从索引0开始 正则的实例对象上有一个lastin ...
- C# 检测证书是否安装、 安装证书
检测是否存在指定的证书: /// <summary> /// 检测是否存在指定的证书 /// </summary> /// <returns></return ...
- concurrent.futures模块(进程池/线程池)
需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...