Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
分类网络
importtorch
importtorch.nn.functionalasF
fromtorch.autogradimportVariable
importmatplotlib.pyplotasplt
#构造数据
n_data=torch.ones(100,2)
x0=torch.normal(3*n_data,1)
x1=torch.normal(-3*n_data,1)
#标记为y0=0,y1=1两类标签
y0=torch.zeros(100)
y1=torch.ones(100)
#通过.cat连接数据
x=torch.cat((x0,x1),0).type(torch.FloatTensor)
y=torch.cat((y0,y1),0).type(torch.LongTensor)
#.cuda()会将Variable数据迁入GPU中
x,y=Variable(x).cuda(),Variable(y).cuda()
#plt.scatter(x.data.cpu().numpy()[:,0],x.data.cpu().numpy()[:,1],c=y.data.cpu().numpy(),s=100,lw=0,cmap='RdYlBu')
#plt.show()
#网络构造方法一
classNet(torch.nn.Module):
def__init__(self,n_feature,n_hidden,n_output):
super(Net,self).__init__()
#隐藏层的输入和输出
self.hidden1=torch.nn.Linear(n_feature,n_hidden)
self.hidden2=torch.nn.Linear(n_hidden,n_hidden)
#输出层的输入和输出
self.out=torch.nn.Linear(n_hidden,n_output)
defforward(self,x):
x=F.relu(self.hidden2(self.hidden1(x)))
x=self.out(x)
returnx
#初始化一个网络,1个输入层,10个隐藏层,1个输出层
net=Net(2,10,2)
#网络构造方法二
'''
net=torch.nn.Sequential(
torch.nn.Linear(2,10),
torch.nn.Linear(10,10),
torch.nn.ReLU(),
torch.nn.Linear(10,2),
)
'''
#.cuda()将网络迁入GPU中
net.cuda()
#配置网络优化器
optimizer=torch.optim.SGD(net.parameters(),lr=0.2)
#SGD:torch.optim.SGD(net.parameters(),lr=0.01)
#Momentum:torch.optim.SGD(net.parameters(),lr=0.01,momentum=0.8)
#RMSprop:torch.optim.RMSprop(net.parameters(),lr=0.01,alpha=0.9)
#Adam:torch.optim.Adam(net.parameters(),lr=0.01,betas=(0.9,0.99))
loss_func=torch.nn.CrossEntropyLoss()
#动态可视化
plt.ion()
plt.show()
fortinrange(300):
print(t)
out=net(x)
loss=loss_func(out,y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
ift%5==0:
plt.cla()
prediction=torch.max(F.softmax(out,dim=0),1)[1].cuda()
#GPU中的数据无法被matplotlib利用,需要用.cpu()将数据从GPU中迁出到CPU中
pred_y=prediction.data.cpu().numpy().squeeze()
target_y=y.data.cpu().numpy()
plt.scatter(x.data.cpu().numpy()[:,0],x.data.cpu().numpy()[:,1],c=pred_y,s=100,lw=0,cmap='RdYlBu')
accuracy=sum(pred_y==target_y)/200
plt.text(1.5,-4,'accuracy=%.2f'%accuracy,fontdict={'size':20,'color':'red'})
plt.pause(0.1)
plt.ioff()
plt.show()
回归网络
importtorch
importtorch.nn.functionalasF
fromtorch.autogradimportVariable
importmatplotlib.pyplotasplt
#构造数据
x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)
y=x.pow(2)+0.2*torch.rand(x.size())
#.cuda()会将Variable数据迁入GPU中
x,y=Variable(x).cuda(),Variable(y).cuda()
#plt.scatter(x.data.numpy(),y.data.numpy())
#plt.show()
#网络构造方法一
classNet(torch.nn.Module):
def__init__(self,n_feature,n_hidden,n_output):
super(Net,self).__init__()
#隐藏层的输入和输出
self.hidden=torch.nn.Linear(n_feature,n_hidden)
#输出层的输入和输出
self.predict=torch.nn.Linear(n_hidden,n_output)
defforward(self,x):
x=F.relu(self.hidden(x))
x=self.predict(x)
returnx
#初始化一个网络,1个输入层,10个隐藏层,1个输出层
net=Net(1,10,1)
#网络构造方法二
'''
net=torch.nn.Sequential(
torch.nn.Linear(1,10),
torch.nn.ReLU(),
torch.nn.Linear(10,1),
)
'''
#.cuda()将网络迁入GPU中
net.cuda()
#配置网络优化器
optimizer=torch.optim.SGD(net.parameters(),lr=0.5)
#SGD:torch.optim.SGD(net.parameters(),lr=0.01)
#Momentum:torch.optim.SGD(net.parameters(),lr=0.01,momentum=0.8)
#RMSprop:torch.optim.RMSprop(net.parameters(),lr=0.01,alpha=0.9)
#Adam:torch.optim.Adam(net.parameters(),lr=0.01,betas=(0.9,0.99))
loss_func=torch.nn.MSELoss()
#动态可视化
plt.ion()
plt.show()
fortinrange(300):
prediction=net(x)
loss=loss_func(prediction,y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
ift%5==0:
plt.cla()
#GPU中的数据无法被matplotlib利用,需要用.cpu()将数据从GPU中迁出到CPU中
plt.scatter(x.data.cpu().numpy(),y.data.cpu().numpy())
plt.plot(x.data.cpu().numpy(),prediction.data.cpu().numpy(),'r-',lw=5)
plt.text(0.5,0,'Loss=%.4f'%loss.item(),fontdict={'size':20,'color':'red'})
plt.pause(0.1)
plt.ioff()
plt.show()
以上这篇Pytorch搭建分类回归神经网络并用GPU进行加速的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。