DEEPLearning——线性回归的简单实现
2020/7/4 6:26:22
本文主要是介绍DEEPLearning——线性回归的简单实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
自己生成数据集
其中features是训练数据特征,
labels是标签
from mxnet import autograd,nd num_inputs =2 #二维数据 num_examples =1000 #数据总量 true_w =[2,-3.4] #W实际值 true_b=4.2 # b实际值 features = nd.random.normal(scale=1,shape=(num_examples,num_inputs)) #随机生成1000个标准差为1的数据 labels=true_w[0]*features[:,0]+true_w[1]*features[:,1]+true_b #实际函数定义为上述 labels +=nd.random.normal(scale=0.01,shape=labels.shape) # 同时添加噪音(标准差为0.01,大小就是labes的样子(因为是矩阵乘法所以可知))进去 复制代码
经过操作以后features就是符合输入格式的输入值
labels 就是实验结果用来调整w用
读取数据集
from mxnet.gluon import data as gdata batch_size =10 # 将训练数据的特征和标签组合 dataset = gdata.ArrayDataset(features,labels) # 随机读取小批量 data_iter = gdata.DataLoader(dataset,batch_size,shuffle=True) #shuffle随机排序 复制代码
定义模型
nn就是神经网络模块,Sequential是一个串联各个层的容器。在构建的时候就是往里面加层。当数据输入时,容器中的每一层都将以此计算并将输出作为下一层的输入。
from mxnet.gluon import nn net =nn.Sequential() net.add(nn.Dense(1))#线性回归的输出层又叫全连接层。顾连接层是一个Dense实例,我们定义该输出个数为1 复制代码
初始化模型参数
将权重参数初始化为均值为0,标准差为0.01的正太分布。 偏差参数默认值为0.00
from mxnet import init net.initialize(init.Normal(sigma=0.01)) 复制代码
定义损失函数
from mxnet.gluon import loss as gloss loss = gloss.L2Loss() 复制代码
选用平方损失又称为L2范数损失
定义优化算法
利用gluon创造Trainer实例,用collect_params获取全部参数,
选用sgd(小批量随机梯度下降)优化算法
from mxnet import gluon 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: with autograd.record(): l = loss(net(X),y) l.backward() #l.backward()就是求其雅克比矩阵,各参数的梯度,以此学习 trainer.step(batch_size) l= loss(net(features),labels) print("epoch %d, loos:%f" % (epoch,l.mean().asnumpy())) 复制代码
把l.backward()删除后
UserWarning Traceback (most recent call last) <ipython-input-14-dd30099604ae> in <module> 5 l = loss(net(X),y) 6 ----> 7 trainer.step(batch_size) 8 l= loss(net(features),labels) 9 print("epoch %d, loos:%f" % (epoch,l.mean().asnumpy())) c:\programdata\miniconda3\envs\gluon\lib\site-packages\mxnet\gluon\trainer.py in step(self, batch_size, ignore_stale_grad) 289 290 self._allreduce_grads() --> 291 self._update(ignore_stale_grad) 292 293 def allreduce_grads(self): c:\programdata\miniconda3\envs\gluon\lib\site-packages\mxnet\gluon\trainer.py in _update(self, ignore_stale_grad) 371 "call step with ignore_stale_grad=True to suppress this " 372 "warning and skip updating of Parameters with stale gradient" \ --> 373 %(param.name, str(data.context))) 374 375 if self._kvstore and self._update_on_kvstore: UserWarning: Gradient of Parameter `dense0_weight` on context cpu(0) has not been updated by backward since last `step`. This could mean a bug in your model that made it only use a subset of the Parameters (Blocks) for this iteration. If you are intentionally only using a subset, call step with ignore_stale_grad=True to suppress this warning and skip updating of Parameters with stale gradient 复制代码
这篇关于DEEPLearning——线性回归的简单实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27揭秘Fluss 与 Kafka、Paimon 的区别与联系
- 2024-12-27顶级情感分析接口:7个高效API推荐
- 2024-12-26从零开始学习贪心算法
- 2024-12-26线性模型入门教程:基础概念与实践指南
- 2024-12-25探索随机贪心算法:从入门到初级应用
- 2024-12-25树形模型进阶:从入门到初级应用教程
- 2024-12-25搜索算法进阶:新手入门教程
- 2024-12-25算法高级进阶:新手与初级用户指南
- 2024-12-25随机贪心算法进阶:初学者的详细指南
- 2024-12-25贪心算法进阶:从入门到实践