mxnet实现线性回归模型 发表于 2019-04-26 | 分类于 deeplearn mxnet线性回归demo1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192from IPython import displayfrom matplotlib import pyplot as plt from mxnet import autograd, ndimport random# 特征个数num_inputs = 2# 样本个数num_examples = 1000# 权重true_w=[2,-3.4]# 偏差true_b=4.2# y=Xw+b+c 简单线性回归 c为噪音# 生成行长度为2的向量features = nd.random.normal(scale=1, shape=(num_examples, num_inputs))lables = true_w[0]*features[:, 0]+true_w[1]*features[:, 1] + true_blables += nd.random.normal(scale=0.01, shape=lables.shape)def use_svg_display(): display.set_matplotlib_formats('svg')def set_figsize(figsize=(3.5,2.5)): use_svg_display() plt.rcParams['figure.figsize'] = figsizeset_figsize((7,5))# 画图显示点之间的关系# plt.scatter(features[:,1].asnumpy(), lables.asnumpy(), 1);# plt.show()def data_iter(batch_size, features, lables): num_examples = len(features) indices = list(range(num_examples)) # 生成features长度的索引列表 并用shuffle打乱 random.shuffle(indices) for i in range(0, num_examples, batch_size): j = nd.array(indices[i: min(i+batch_size, num_examples)]) # 获取i到i+batch_size对应长度的索引值列表 # 根据提供的索引值列表使用take获取对应的数组值 yield features.take(j), lables.take(j)batch_size = 10# for x,y in data_iter(batch_size, features, lables):# print(x, y)# break;# 初始化权重 标准差0.01 均值0w = nd.random.normal(scale=0.01, shape=(num_inputs, 1))# 偏差0 b = nd.zeros(shape=(1,))# 创建梯度w.attach_grad()b.attach_grad()# 定义线性回归模型def linreg(X, w, b): return nd.dot(X, w) + b # 定义损失函数def squared_loss(y_hat, y): return (y_hat - y.reshape(y_hat.shape)) ** 2 /2# 定义sgd迭代模型进行随机梯度下降def sgd(params, lr, batch_size): for param in params: param[:] = param - lr*param.grad/batch_size #?# 模型训练lr = 0.03 #学习率num_epochs = 3 #迭代周期net = linregloss = squared_lossfor epoch in range(num_epochs): for X, y in data_iter(batch_size, features, lables): with autograd.record(): # autograd模块⾃动化计算求导 l = loss(net(X, w, b), y)# 一个批量的损失 l.backward() # 计算梯度 反向传播函数处理 sgd([w,b], lr, batch_size) # 优化w 和 b # 将回归模型得到的解析解的值与标准值进行比较 train_l = loss(net(features, w, b), lables) print('epoch %d, loss %f' % (epoch+1, train_l.mean().asnumpy()))## 比较模型与真实值的 权重 与 偏差print(true_w, w)print(true_b, b) 感谢你对我的支持 让我继续努力分享有用的技术和知识点. 打赏 微信支付 支付宝 本文作者: rudder 本文链接: https://irudder.github.io/2019-04-26/mxnet_practice_1/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!