人工智能实战2019 第三次作业 续连元
项目 | 内容 |
---|---|
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/buaa/BUAA-AI-2019 |
这个作业的要求在哪里 | https://edu.cnblogs.com/campus/buaa/BUAA-AI-2019/homework/2787 |
我在这个课程的目标是 | 学习,了解并实践深度学习的实际工程应用 |
这个作业在哪个具体方面帮助我实现目标 | 感受梯度下降法的思路及实现步骤 |
作业正文 | 如下 |
参考文献 | 示例代码 |
正文
一、python实现
- 在本代码中,考虑学习率为0.01,0.05,010,0.15的值下,batch_size取5,10,15的效果,最终结果如图。
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path
times = 100
LR = [0.01,0.05,0.1,0.15]
def ReadData():
Xfile = Path('TemperatureControlXData.dat')
Yfile = Path('TemperatureControlYData.dat')
if Xfile.exists() & Yfile.exists():
X = np.load(Xfile)
Y = np.load(Yfile)
return X,Y
else:
return None,None
def mini_batch_train(batch_size,LR,X,Y):
w = 0
b = 0
Loss = np.zeros(times)
Index = np.array(range(0,200))
for i in range(times):
batch_index = np.random.choice(Index, batch_size,replace=False)
batch_x = X[batch_index]
batch_y = Y[batch_index]
z = np.dot(w,batch_x) + b
dz = z - batch_y
w = w - LR/batch_size*(np.dot(dz,batch_x))
b = b - LR/batch_size*dz.sum()
temp = np.dot(dz,dz)
loss_i = temp.sum()
Loss[i] = loss_i
return Loss
if __name__ == '__main__':
X,Y = ReadData()
for i in LR:
plt.figure()
x = np.linspace(0, times, 100)
plt.xlabel("times")
plt.ylabel("loss")
LOSS_5 = mini_batch_train(5,i,X,Y)
LOSS_10 = mini_batch_train(10,i,X,Y)
LOSS_15 = mini_batch_train(15,i,X,Y)
plt.title("learing_rate = %.2f"% i)
plt.plot(x, LOSS_5, label="batch_size=5")
plt.plot(x, LOSS_10, label="batch_size=10")
plt.plot(x, LOSS_15, label="batch_size=15")
plt.legend(loc='upper right')
plt.show()
-运行结果
二、问题解答:
- 问题二:为什么是椭圆而不是圆?如何把这个图变成一个圆?
答:1)均方误差的表达式中有w乘b项,其在空间直角坐标系中为椭圆抛物面,故而对应在xy平面上投影为椭圆。
2)若改变误差的表达式,去掉w乘b项并使w2与b2的系数相同,则投影变为圆。 - 问题三:为什么中心是个椭圆区域而不是一个点?
答:因为无法使得所有散点全部集中在一条直线上,而loss值较小的这些(w,b)的值投影在平面上即形成了椭圆。