[MxNet]Lecture01-线性回归从零实现
2018-01-09 21:32
796 查看
import mxnet.ndarray as nd import mxnet.autograd as ag import random num_examples=100 num_inputs=2 w_true=[2,-3.4] b_true=4.2 x=nd.random_normal(shape=(num_examples,num_inputs)) y=w_true[0]*x[:,0]+w_true[1]*x[:,1]+b_true y+=.01*nd.random_normal(shape=y.shape) batch_size=10 def data_iter(): idx=list(range(num_examples)) random.shuffle(idx) for i in range(0,num_examples,batch_size): j=nd.array(idx[i:min(num_examples,i+batch_size)]) yield nd.take(x,j), nd.take(y,j) w=nd.random_normal(shape=(num_inputs,1)) #初始化为符合正态分布的随机数 b=nd.zeros((1,)) #注意不能在后面加0,如果加了0,就是二维了,但是目前是一维 params=[w,b] for param in params: param.attach_grad()#不要漏了括号 def net(x): return nd.dot(x,w)+b def square_loss(yhat,y): return((yhat-y.reshape(yhat.shape))**2) #让二者的形态相同,以免触发广播 def sgd(params,lr): for param in params: param[:]=param-lr*param.grad #这里要注意要有个切片,因为param之一是w,而w是ndarray epoch=15 lr=0.01 for i in range(epoch): total_loss=0 for data, label in data_iter(): with ag.record(): output=net(data) loss=square_loss(output,label)#loss是是个一维向量 loss.backward() #不要漏了括号 其等同于 loss.sum().backward() sgd(params,lr) total_loss+=nd.sum(loss).asscalar() print('epoch: %d, average loss: %f'%(i,total_loss/num_examples))
相关文章推荐
- [MxNet]Lecture01-线性回归的gluon实现
- [MXNet]lecture01-多类逻辑回归gluon实现
- [MXNet]lecture01-多类逻辑回归从零开始
- 用Mxnet对California房地产数据做线性回归分析
- MXnet实战之线性回归
- MxNet+R︱用R语言实现深度学习(单CPU/API接口,一)
- 用Python实现机器学习算法:线性回归
- MXNet学习8——自己写operator实现Logistic Regression
- 用PHP实现的简单线性回归
- 【Stanford|斯坦福-机器学习:线性回归-单特征梯度下降+动态图】python3实现
- 线性回归理解(附纯python实现)
- 线性回归的java实现
- 李沐等:MXNet设计和实现简介
- Linear Regression 线性回归sklearn python实现
- MXnet代码实战之多类逻辑回归
- 局部加权线性回归及岭回归之Python实现
- 线性回归,最小二乘法 C语言实现
- 多变量线性回归程序实现
- 线性回归原理与spark/sklearn实现
- mxnet(gluon) 实现DQN简单小例子