第三讲pytorch深度学习实践的学习笔记和源码
B站刘二大人传送门:第三讲梯度下降算法
①学习率(步长)的问题
- 过大无法收敛
- 过小,找到局部最优,找不到全局最优
深度学习中,并没有过多的局部最优的点,如何解决鞍点是最大的难题
梯度下降算法源码
import matplotlib.pyplot as plt
#准备数据集
x_data=[1.0,2.0,3.0]
y_data=[2.0,4.0,6.0]
#初始猜测权重值.
w=1.0
epoch_list=[]
loss_list=[]
#定义模型
def forward(x):
return x*w
#define the cost function
def cost(xs , ys):
cost=0
for x,y in zip(xs,ys):
y_pred=forward(x)
cost+=(y_pred-y)**2
return cost/len(xs)
#定义梯度函数
def gradient(xs,ys):
grad=0
for x,y in zip(xs,ys):
grad+=2*x*(x*w-y)
return grad/len(xs)
print('Predict (before training)',4,forward(4))
#做更新 do the update
for epoch in range(100):
cost_val=cost(x_data,y_data)
grad_val=gradient(x_data,y_data)
#w-=0.05*grad_val 更改为0.05学习率将达到8.0
w-=0.01*grad_val
#将值加入list 方便画图
epoch_list.append(epoch)
loss_list.append(cost_val)
print('Epoch:',epoch,'w=',w,'loss=',cost_val)
print('Predict (after training)',4,forward(4))
plt.plot(epoch_list,loss_list)
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
学习率为0.01效果图:
学习率为0.05效果图:
随机梯度下降源码
随机梯度下降法在神经网络中被证明是有效的。效率较低(时间复杂度较高),学习性能较好。
loss:函数的改变
梯度的改变:
源码:
import matplotlib.pyplot as plt
#准备数据集
x_data=[1.0,2.0,3.0]
y_data=[2.0,4.0,6.0]
#初始猜测权重值.
w=1.0
epoch_list=[]
loss_list=[]
#定义模型
def forward(x):
return x*w
#define the loss function
def loss(x , y):
y_pred=forward(x)
return (y_pred-y)**2
#定义梯度函数
def gradient(x, y):
return 2*x*(x*w-y)
print('Predict (before training)',4,forward(4))
#做更新 do the update
for epoch in range(100):
for x,y in zip(x_data,y_data):
grad = gradient(x,y)
w= w-0.01*grad
print('\tgrad:',x,y,grad)
l=loss(x,y)
epoch_list.append(epoch)
loss_list.append(l)
print('Epoch:',epoch,'w=',w,'loss=',l)
print('Predict (after training)',4,forward(4))
plt.plot(epoch_list,loss_list)
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
效果图:
Ending 如有错误敬请指正,感谢!