神经网路越复杂,数据量越大,训练网络所需要的时间就越多。有时候为了解决复杂的问题,复杂的网络跟庞大的数据是不可缺少的。所以寻找了一些方法,加速神经网络的训练。
这种方法是将数据分成一小批一小批的进行训练。但是速度比较慢。
更新参数的方式 w+=-lr * dx lr是学习率,dx 是校正值
更新参数的方式 m=b1*m-lr*dx w+=m
更新参数的方法 v+=dx^2 w+= -lr *dx/根号V 采用改变学习率的方式
这种方法是将 Momentum与AdaGrad部分相结合
v=b1*v=(1-b1)*dx^2
w+=-lr*dx/根号V
这种方法是将momentum与AdaGrad 相结合
m=b1*m+(1-b1)*dx
v=b2*v+(1-b2)*dx^2
w+=-lr*m/根号v
import torch
import matplotlib.pyplot as plt
from torch.autograd import Variable
import torch.nn.functional as F
import torch.utils.data as Data
import os
os.environ["CUDA_VISIBLE_DEVICES"]='2'
#hyper parameters 设置一些超参数
LR=0.1
BATCH_SIZE=32
EPOCH=12
x=torch.unsqueeze(torch.linspace(-1,1,1000),dim=1)
y=x.pow(2)+0.1*torch.randn(x.size())
# plt.scatter(x.numpy(),y.numpy())
# plt.show()
torch_dataset=Data.TensorDataset(x,y)
loader=Data.DataLoader(
dataset=torch_dataset,
batch_size=BATCH_SIZE,
shuffle=True,
num_workers=2,
)
class Net(torch.nn.Module):
def __init__(self):
super(Net,self).__init__()
self.hidden=torch.nn.Linear(1,20)
self.predict=torch.nn.Linear(20,1)
def forward(self, x):
x=F.relu(self.hidden(x))
x=self.predict(x)
return x
SGD_net=Net()
Mtm_net=Net()
Rmp_net=Net()
Adm_net=Net()
nets=[SGD_net,Mtm_net,Rmp_net,Adm_net]
SGD_opt=torch.optim.SGD(SGD_net.parameters(),lr=LR)
Mtm_opt=torch.optim.SGD(Mtm_net.parameters(),lr=LR,momentum=0.8)
Rmp_opt=torch.optim.RMSprop(Rmp_net.parameters(),lr=LR,alpha=0.9)
Adm_opt=torch.optim.Adam(Adm_net.parameters(),lr=LR,betas=(0.9,.99))
optimizers=[SGD_opt,Mtm_opt,Rmp_opt,Adm_opt]
loss_func=torch.nn.MSELoss()
losses_his=[[],[],[],[]]
for epoch in range(EPOCH):
# print epoch
for step,(b_x,b_y) in enumerate(loader):
b_x=Variable(b_x)
b_y=Variable(b_y)
for net,optimizer,l_his in zip(nets,optimizers,losses_his):
output=net(b_x)
loss=loss_func(output,b_y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
l_his.append(loss.data.numpy())
labels=['SGD','Momentum','RMSProp','Adam']
for i,l_his in enumerate(losses_his):
plt.plot(l_his,label=labels[i])
plt.legend('best')
plt.xlabel('Steps')
plt.ylabel('Loss')
plt.ylim(0,0.2)
plt.show()
加油,当你看到我的博客的时候,相信你一定在努力成为最好的自己的路上!
加油,别放弃,坚持,每天一点点,相信一年后的你一定会感谢现在的你!
如果你真的迷茫了,我愿当你的倾听者,但是你千万不能放弃,因为改变命运的机会真的不多呀!
QQ小号:1817780086