前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动手学深度学习(一)——线性回归(gluon)

动手学深度学习(一)——线性回归(gluon)

作者头像
Tyan
发布2019-05-25 23:34:29
3610
发布2019-05-25 23:34:29
举报
文章被收录于专栏:SnailTyanSnailTyanSnailTyan

版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://cloud.tencent.com/developer/article/1434117

文章作者:Tyan

博客:noahsnail.com | CSDN | 简书

注:本文为李沐大神的《动手学深度学习》的课程笔记!

创建数据集

# 导入mxnet
import random
import mxnet as mx

# 导入mxnet的gluon, ndarray, autograd
from mxnet import gluon
from mxnet import autograd
from mxnet import ndarray as nd

# 设置随机种子
mx.random.seed(1)
random.seed(1)

# 训练数据的维度
num_inputs = 2

# 训练数据的样本数量
num_examples = 1000

# 实际的权重w
true_w = [2, -3.4]

# 实际的偏置b
true_b = 4.2

# 随机生成均值为0, 方差为1, 服从正态分布的训练数据X, 
X = nd.random_normal(shape=(num_examples, num_inputs))

# 根据X, w, b生成对应的输出y
y = true_w[0] * X[:, 0] + true_w[1] * X[:, 1] + true_b 

# 给y加上随机噪声
y += 0.01 * nd.random_normal(shape=y.shape)

数据展示

%matplotlib inline
import matplotlib.pyplot as plt

# 绘制数据的散点图 
plt.scatter(X[:, 1].asnumpy(), y.asnumpy())
plt.show()

数据读取

# 训练时的批数据大小
batch_size = 10

# 创建数据集
dataset = gluon.data.ArrayDataset(X, y)

# 读取数据
data_iter = gluon.data.DataLoader(dataset, batch_size, shuffle=True)
# 查看数据
for data, label in data_iter:
    print data, label
    break
[[-2.11255503  0.61242002]
 [ 2.18546367 -0.48856559]
 [ 0.91085583  0.38985687]
 [-0.56097323  1.44421673]
 [ 0.31765923 -1.75729597]
 [-0.57738042  2.03963804]
 [-0.91808975  0.64181799]
 [-0.20269176  0.21012937]
 [-0.22549874  0.19895147]
 [ 1.42844415  0.06982213]]
<NDArray 10x2 @cpu(0)> 
[ -2.11691356  10.22533131   4.70613146  -1.82755637  10.82125568
  -3.88111711   0.17608714   3.07074499   3.06542921   6.82972908]
<NDArray 10 @cpu(0)>

定义模型

# 定义一个空的模型
net = gluon.nn.Sequential()

# 加入一个Dense层
net.add(gluon.nn.Dense(1))

初始化模型参数

net.initialize()

定义损失函数

square_loss = gluon.loss.L2Loss()

优化

trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.01})

训练

# 定义训练的迭代周期
epochs = 5

# 训练
for epoch in xrange(epochs):
    # 总的loss
    total_loss = 0
    for data, label in data_iter:
        # 记录梯度
        with autograd.record():
            # 计算预测值
            output = net(data)
            # 计算loss
            loss = square_loss(output, label)
        # 根据loss进行反向传播计算梯度
        loss.backward()
        # 更新权重, batch_size用来进行梯度平均
        trainer.step(batch_size)
        # 计算总的loss
        total_loss += nd.sum(loss).asscalar()

    print "Epoch %d, average loss: %f" % (epoch, total_loss/num_examples)
Epoch 0, average loss: 7.403182
Epoch 1, average loss: 0.854247
Epoch 2, average loss: 0.099864
Epoch 3, average loss: 0.011887
Epoch 4, average loss: 0.001479

代码地址

https://github.com/SnailTyan/gluon-practice-code

参考资料

代码地址

https://github.com/SnailTyan/gluon-practice-code

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年02月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建数据集
  • 数据展示
  • 数据读取
  • 定义模型
  • 初始化模型参数
  • 定义损失函数
  • 优化
  • 训练
  • 代码地址
  • 参考资料
  • 代码地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档