我是靠谱客的博主 自然芹菜,最近开发中收集的这篇文章主要介绍《动手学深度学习》学习记录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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复