代码为深度学习一书线性回归使用python库版本的代码,使用gpu时首先将数据全部存储在gpu,注意在提取小批量数据集时的函数默认将生成的数据存储在cpu,所以需要在使用时转到gpu,具体为代码
y = y.copyto(mx.gpu())#数据传到gpu
全部代码
from mxnet import autograd,nd
from mxnet.gluon import data as gdata
from mxnet.gluon import loss as gloss
from mxnet.gluon import nn
from mxnet import gluon
from mxnet import init
import mxnet as mx
#生成数据集
nums_input = 2#特征数
num_examples = 1000#数据个数
true_w = [2,-3.4]#真实权重w
true_b = 4.2#真实权重b
features = nd.random.normal(scale=1,shape=(num_examples,nums_input),ctx=mx.gpu())#标准差为1
labels = true_w[0] * features[:,0] + true_w[1] * features[:,1] + true_b
labels += nd.random.normal(scale=0.01,shape=labels.shape,ctx=mx.gpu())#噪声
#读取小批量数据集
batch_size = 10
#将训练数据的特征和标签结合
dataset = gdata.ArrayDataset(features,labels)
#随机读取小批量,shuffle随机
data_iter = gdata.DataLoader(dataset,batch_size,shuffle=True)
#定义模型
net = nn.Sequential()
#全连接层-输出层
net.add(nn.Dense(1))
#参数初始化
net.initialize(init.Normal(sigma=0.01),ctx=mx.gpu())
#定义损失函数
loss = gloss.L2Loss()
#定义优化算法
trainer = gluon.Trainer(net.collect_params(),'sgd',{'learning_rate': 0.03})
num_epochs = 3
#训练模型
for epoch in range(1, num_epochs+1):
#每一个迭代周期,使用训练集所有样本一次
for X,y in data_iter:
y = y.copyto(mx.gpu())#数据传到gpu
with autograd.record():
l = loss(net(X),y)
l.backward()
trainer.step(batch_size)
l = loss(net(features),labels)
print('epoch %d, loss %f' % (epoch,l.mean().asnumpy()))