我是靠谱客的博主 自然芹菜,最近开发中收集的这篇文章主要介绍《动手学深度学习》学习记录01:Chapter03_1:linear regression,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

模型:

  

  其中w1和?2是权重(weight),?是偏差(bias),且均为标量。它们是线性回归模型的参数(parameter)。输出?̂ 是对真实价格?的预测(估计)。通常允许它们之间有一定误差。

 对于第 i 个训练数据来说,有:

  

损失函数:

  对于单个数据(乘1/2是为了求导后的形式更简单):

  

  通常用其平均值衡量模型预测效果:

  

  所以,最终的目的为:

  

优化算法:

  B为总样本的一个小批量:

  

矢量表示式:

  有以下数据

   

  则,线性回归的矢量计算表达式为:

  

  

  

  所以小批量随机梯度下降为:

  

  其中,

  

 

              代码实现              

实现步骤:

1、生成数据

2、读取数据

3、定义模型

4、初始化模型

5、损失函数

6、优化算法

7、训练模型

 1 #《动手学深度学习》学习记录01:Chapter03_1:linear regression 
 2 #从零开始
 3 from matplotlib import pyplot as plt
 4 from mxnet import autograd,nd
 5 import random
 6 
 7 #生成数据
 8 num_inputs = 2
 9 num_examples = 1000
10 true_w = [2,-3.4]
11 true_b = 4.2
12 features = nd.random.normal(scale=1, shape=(num_examples,num_inputs))
13 labels = true_w[0] * features[:,0] + true_w[1] * features[:,1]+ true_b
14 labels += nd.random.normal(scale=0.01, shape=labels.shape)
15 # ~ plt.scatter(features[:,1].asnumpy(),labels.asnumpy())
16 # ~ plt.show()
17 
18 #读取数据
19 def data_iter(batch_size,features,labels):
20     num_examples = len(features)             
21     indices = list(range(num_examples))
22     random.shuffle(indices)        #打乱索引
23     for i in range(0, num_examples, batch_size):
24         j = nd.array( indices[i:min(i+batch_size,num_examples)] )
25         yield features.take(j),labels.take(j) #索引集j对应元素
26 
27 batch_size = 10
28 for X,y in data_iter(batch_size, features, labels):
29     print(X,y)
30     break
31 
32 #定义模型
33 def linreg(X,w,b):
34     return nd.dot(X,w)+ b 
35 
36 #初始化模型参数
37 w = nd.random.normal(scale=0.01, shape=(num_inputs,1))
38 b = nd.zeros(shape=(1,))
39 w.attach_grad()
40 b.attach_grad()
41 
42 #损失函数
43 def squared_loss(y_hat,y):
44     return (y_hat - y.reshape(y_hat.shape))**2/2
45 
46 #优化算法
47 def sgd(params, lr, batch_size):
48     for param in params:
49         param[:] = param - lr*param.grad/batch_size
50 
51 #训练模型
52 lr = 0.03
53 num_epochs = 3
54 net = linreg
55 loss = squared_loss
56 
57 for epoch in range(num_epochs):
58     for X,y in data_iter(batch_size, features, labels):
59         with autograd.record():
60             l = loss(net(X,w,b),y)
61         l.backward()
62         sgd([w,b],lr,batch_size)
63     train_l = loss(net(features,w,b),labels)    #求整个训练集上的loss
64     print('epoch %d, loss %f' % (epoch+1,train_l.mean().asnumpy()))
65 
66 
67 #结果输出
68 print(true_w,w)
69 print(true_b,b)
线性回归:从零开始

 

 1 #《动手学深度学习》学习记录01:Chapter03_1:linear regression
 2 #简洁版
 3 from matplotlib import pyplot as plt
 4 from mxnet import autograd,nd
 5 import random
 6 
 7 #生成数据
 8 num_inputs = 2
 9 num_examples = 1000
10 true_w = [2,-3.4]
11 true_b = 4.2
12 features = nd.random.normal(scale=1, shape=(num_examples,num_inputs))
13 labels = true_w[0] * features[:,0] + true_w[1] * features[:,1]+ true_b
14 labels += nd.random.normal(scale=0.01, shape=labels.shape)
15 # ~ plt.scatter(features[:,1].asnumpy(),labels.asnumpy())
16 # ~ plt.show()
17 
18 #读取数据
19 from mxnet.gluon import data as gdata
20 
21 batch_size = 10
22 dataset = gdata.ArrayDataset(features,labels)
23 data_iter = gdata.DataLoader(dataset,batch_size,shuffle=True)
24 
25 #定义模型
26 from mxnet.gluon import nn
27 net = nn.Sequential()
28 net.add(nn.Dense(1))
29 
30 #初始化模型参数
31 from mxnet import init
32 net.initialize(init.Normal(sigma=0.01))
33 
34 #损失函数
35 from mxnet.gluon import loss as gloss
36 loss = gloss.L2Loss()
37 
38 #优化算法
39 from mxnet import gluon
40 trainer = gluon.Trainer(net.collect_params(),'sgd',{'learning_rate':0.03})
41 
42 #训练模型
43 num_epochs = 3
44 for epoch in range(1, num_epochs+1):
45     for X,y in data_iter:
46         with autograd.record():
47             l = loss(net(X),y)
48         l.backward()
49         trainer.step(batch_size)
50     l = loss(net(features),labels)
51     print('epoch %d, loss: %f' % (epoch, l.mean().asnumpy()))
52 
53 #结果
54 print(true_w,net[0].weight.data())
55 print(true_b,net[0].bias.data())
线性回归:简洁版

 

 

 

 

转载于:https://www.cnblogs.com/RaspberryFarmer/p/11331355.html

最后

以上就是自然芹菜为你收集整理的《动手学深度学习》学习记录01:Chapter03_1:linear regression的全部内容,希望文章能够帮你解决《动手学深度学习》学习记录01:Chapter03_1:linear regression所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部