一、mxnet相关函数用法
mxnet.nd用法对标numpy库
(1) nd.concat
from mxnet import nd
nd.concat(X, Y ,dim=0)
nd.concat(X, Y, dim=1)
X, Y为两个矩阵nd.concat为连接矩阵,dim表示连接的维度,若原来两个矩阵为(4,3),dim=0就表示 新生成矩阵为(8,3)
dim=1表示 新生成矩阵为(4,6)
(2) y += x
y = y + x
这样的算法会新开内存
y += x
而这种算法就可以减少运算的内存开销, 与上面那个式子的含义是一样的都是对y用x进行累加
(3) x.aumpy()
通过 .asumpy() 用法可以使得nd实例转换为 numpy实例
X.asumpy() 就使得X变为 numpy实例
(4) y.backward() xu 修正
若果函数为 y = 2 * x
先设定x
x = nd.array([2])
再调⽤attach_grad函数来申请存储梯度所需要的内存
x.attcach_grad()
调⽤record函数来要求MXNet记录与求梯度有关的计算
with autograd.record():
y = 2 * x
y.backward()则是对其进行反向传播算梯度
x.grad 就是 梯度的值
注意:要先对y进行y.backward(), 才会有x.grad
(5)x.asscalar()
X.asscalar()
将向量X转换成标量,且向量X只能为一维含单个元素的向量
(6)nd.random.normal(0, 1, shape=)
nd.random.normal(0, 1, shape=(3, 4))
是创建⼀个形状为(3,4)的NDArray。它的每个元素都随机采样于均值为0、标准差为1的正态分布。
(7) 查阅文档
http://mxnet.apache.org/ 访问MXNet网站,点击网页顶部的下拉菜单“API”可查阅各个前端语言的接口。此外,也可以在网页右上方含“Search”字样的搜索框中直接搜索函数或类名称。
二、线性回归
线性回归输出是⼀个连续值,因此适⽤于回归问题。回归问题在实际中很常见,如预测房屋价格、气温、销售额等连续值的问题。
简单的来说 就是一个 多元多次方程 , 每一个元 代表一种特征。
我们举个拿房价模型举个例子就是 假设 y(房价) = w1x1(第一种特征,面积) + w2x2(第二种特征,房龄) + b
也就是我们假设,房价可能受 房屋面积和 房龄 的影响, w1 ,w2 都为系数,也就是影响程度,b表示偏差
然后 我们手上有一组 真实的数据集(包含房价,面积和房龄),我们将每组的面积和房龄代入到我们设定的模型当中,得出y_hat(也就是预测值)
y_hat(i)(预测值) = x(i)1 w1 + x(i)2 w2 + b
然后 对 y_hat 和 y(真实的房价,我们也叫做标签)进行误差估计,
这时候,我们会引入 损失函数,来代表 误差的大小, 这次我们使用平方误差函数
误差 = 0.5 * (y - y_hat) ** 2
最后对所有误差进行加总 然后除以 样本个数n
我们最终的目的就是希望通过不变改变 w1, w2以及 b的值 ,来使得 这个误差最小
这样我们就可以得到一个 置信度比较高的房价模型, 对其他房子的价值进行估计。
简单看来 我们这个就像是 一组 多元多次方程 ,可以直接用公式求解。然而很多情况 我们并没有办法求解,所以这里我们又引入一个 **随机梯度下降(批量,小批量,单个)**的方法 来求近似解,就是通过多次对 系数值的 迭代使其逼近最优解。
也就是对 每个方程进行求导,然后让系数值往 导数值相反的方向 (负梯度) 进行一定大小的缩减,最终使其逼近极值点。(这里会有局部最优,也就是有多个极值点的情况,涉及到凸优化,不展开)
注意:这里我们推荐对标签和 特征值都放到矩阵中, 进行矩阵运算, 会大大加快运算速度
图片引用来源:动手学深度学习
以下是从零实现线性回归:
%matplotlib inline
fro