前言
学习书籍选择
《动手学深度学习》
豆瓣链接:https://book.douban.com/subject/33450010/
在线网站
本文包含内容
1.算法内容
2.代码分析
正文
算法及代码分析
线性回归模型
所对应代码:
def linreg(x, w, b):
return nd.dot(x, w) + b
参数优化
所对应代码:
def sgd(params, lr, batch_size):
for param in params:
param[:] = param - lr * param.grad / batch_size
损失函数
其中常数1/2是为了在求导后形式上更为简洁。
代码如下:
def squared_loss(y_hat, y):
return (y_hat - y.reshape(y_hat.shape)) ** 2 / 2
通常我们使用所有样本的平均值作为损失函数值。
也即:
绘制不同学习率的损失函数值下降速率
所用到的库
from matplotlib import pyplot as plt
import numpy
绘制函数
def plot(x, y, condition):
plt.plot(range(x), y, label='lr=' + str(condition)) # 加上标签
plt.legend(loc='upper right') # 绘制图例:左上方
获取学习率0.01到0.05步进为0.01的三轮学习后的损失函数值并绘制:
for lr in numpy.arange(0.01, 0.05, 0.01):
print('when learnrate = %f:' % lr)
# 重置参数
w = nd.random.normal(scale=0.01, shape=(num_input, 1)) # 标准差为scale
b = nd.zeros(shape=(1,)) # 偏移量为零
w.attach_grad()
b.attach_grad()
loss_list = train_wb(w, b)
plot(num_epochs, loss_list, lr)
plt.show()
绘制结果