程序笔记   发布时间:2022-07-13  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了pytorch中如何将CPU上运行的数据模型转到GPU上运行(mnist举例)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

首先贴一份在cpu上运行的代码

pytorch中如何将CPU上运行的数据模型转到GPU上运行(mnist举例)

pytorch中如何将CPU上运行的数据模型转到GPU上运行(mnist举例)

 1 import torch
 2 from torchvision import transforms
 3 from torchvision import datasets
 4 from torch.utils.data import DataLoader
 5 import torch.nn.functional as F
 6 import torch.optim as optim
 7 
 8 batch_size = 64
 9 transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])
10 Train_dataset = datasets.MNIST(root='../dataset/mnist/', Train=True, download=True, transform=transform)
11 Train_loader = DataLoader(Train_dataset, shuffle=True, batch_size=batch_sizE)
12 test_dataset = datasets.MNIST(root='../dataset/mnist/', Train=false, download=True, transform=transform)
13 test_loader = DataLoader(test_dataset, shuffle=false, batch_size=batch_sizE)
14 
15 
16 class Net(torch.nn.ModulE):
17     def __init__(self):
18         super(Net, self).__init__()
19         self.l1 = torch.nn.Linear(784, 512)
20         self.l2 = torch.nn.Linear(512, 256)
21         self.l3 = torch.nn.Linear(256, 128)
22         self.l4 = torch.nn.Linear(128, 64)
23         self.l5 = torch.nn.Linear(64, 10)
24 
25     def forWARD(self, X):
26         x = x.view(-1, 784)
27         x = F.relu(self.l1(X))
28         x = F.relu(self.l2(X))
29         x = F.relu(self.l3(X))
30         x = F.relu(self.l4(X))
31         return self.l5(X)
32 
33 
34 model = Net()
35 
36 criterion = torch.nn.CrossEntropyLoss()
37 optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)
38 
39 
40 def Train(epoch):
41     running_loss = 0.0
42     for batch_idx, data in enumerate(Train_loader, 0):
43         inputs, target = data
44         optimizer.zero_grad()
45         # forWARD + BACkWARD + update
46         outputs = model(inputs)
47         loss = criterion(outputs, target)
48         loss.BACkWARD()
49         optimizer.step()
50         running_loss += loss.item()
51         if batch_idx % 300 == 299:
52             print('[%d, %5d] loss: %.3f' % (epoch + 1, batch_idx + 1, running_loss / 300))
53             running_loss = 0.0
54 
55 
56 def test():
57     correct = 0
58     @R_933_10586@l = 0
59     with torch.no_grad():
60         for data in test_loader:
61             images, labels = data
62             outputs = model(images)
63             _, preDicted = torch.max(outputs.data, dim=1)
64             @R_933_10586@l += labels.size(0)
65             correct += (preDicted == labels).sum().item()
66     print('Accuracy on test set: %d %%' % (100 * correct / @R_933_10586@l))
67 
68 
69 if __name__ == '__main__':
70     for epoch in range(10):
71         Train(epoch)
72         test()
View Code

要在GPU上运行数据需要把一些相关的参数和模型转到GPU上

需要转换的有:model,数据,criterion(loss函数)

其中optimizer不需要转换

 

首先定义

1 device = t.device('cuda:0')

将model和criterion to(devicE)

1 #cuda
2 model = model.to(devicE)
3 criterion = criterion.to(devicE)

再将43行的inputs、target,46行的outputs to(devicE)到GPU上训练

 1 def Train(epoch):
 2     running_loss = 0.0
 3     for batch_idx, data in enumerate(Train_loader, 0):
 4         inputs, target = data
 5         #cuda inputs and target
 6         inputs = inputs.to(devicE) ###
 7         target = target.to(devicE) ###
 8         optimizer.zero_grad()  # noticed:  the grad return to zero before starTing the loop
 9 
10         # forWARD + BACkWARD +update
11         outputs = model(inputs)
12         outputs = outputs.to(devicE) ###
13         loss = criterion(outputs, target)
14         loss.BACkWARD()
15         optimizer.step()
16 
17         running_loss += loss.item()
18         if batch_idx % 300 == 299:
19             print('[%d, %5d] loss: %.3f' % (epoch + 1, batch_idx + 1, running_loss / 300))
20             running_loss = 0.0

再将61行的images、labels,62行的outputs to(devicE)到GPU上测试

 1 def test():
 2     correct = 0
 3     @R_933_10586@l = 0
 4     with t.no_grad():  # ensuring grad can not updating
 5         for data in test_loader:
 6             images, label = data
 7             #cuda images, label
 8             images = images.to(devicE) ###
 9             label = label.to(devicE) ###
10             outputs = model(images)
11             outputs = outputs.to(devicE) ###
12             _, preDicted = t.max(outputs.data, dim=1)  # taking the max num from one_hot code
13             @R_933_10586@l += label.size(0)
14             # label's format in array that N*1 like [1,8,5,8,3,2,1,4,.....,5]. so label.size() return a array [N,1] and label.size(0) is N
15             correct += (preDicted == label).sum().item()
16     print('Accurary on test set: %d %%' % (100 * correct / @R_933_10586@l))

全部代码(需要cuda而修改或者添加的地方用###在代码后标出)

pytorch中如何将CPU上运行的数据模型转到GPU上运行(mnist举例)

pytorch中如何将CPU上运行的数据模型转到GPU上运行(mnist举例)

 1 import torch as t
 2 from torchvision import transforms
 3 from torchvision import datasets
 4 from torch.utils.data import DataLoader
 5 import torch.optim as op
 6 import torch.nn.functional as f
 7 
 8 use_gpu = t.cuda.is_available()  ###
 9 device = t.device('cuda:0')  ###
10 
11 batch_size = 64
12 transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])
13 # notice : Compose([]) there is []!!!!!!!!!!!!!!!!!!!!!!!!
14 # mnist mean : 0.1307, std :0.3081
15 # convert the PIL to Tensor and then normalized so that the gray level is [0,1]
16 
17 Train_dataset = datasets.MNIST(root='../dataset/mnist', Train=True, download=True, transform=transform)
18 Train_loader = DataLoader(Train_dataset, batch_size=batch_sizE)
19 test_dataset = datasets.MNIST(root='../dataset/mnist', Train=false, download=True, transform=transform)
20 test_loader = DataLoader(test_dataset, batch_size=batch_sizE)
21 
22 test_dataset = test_dataset
23 Train_loader = Train_loader
24 test_dataset = test_dataset
25 test_loader = test_loader
26 
27 
28 class Net(t.nn.ModulE):
29     def __init__(self):
30         super(Net, self).__init__()
31         self.linear1 = t.nn.Linear(784, 512)
32         self.linear2 = t.nn.Linear(512, 256)
33         self.linear3 = t.nn.Linear(256, 128)
34         self.linear4 = t.nn.Linear(128, 64)
35         self.linear5 = t.nn.Linear(64, 10)
36 
37     def forWARD(self, X):
38         x = x.view(-1, 784)  # 1*28*28 Tensor to 1*784 vectors, -1 can auto_transform to pic nums
39         x = f.relu(self.linear1(X))
40         x = f.relu(self.linear2(X))
41         x = f.relu(self.linear3(X))
42         x = f.relu(self.linear4(X))
43         return self.linear5(X)
44 
45 
46 model = Net()  # there is ()!
47 criterion = t.nn.CrossEntropyLoss()
48 optimizer = op.SGD(model.parameters(), lr=0.01, momentum=0.5)
49 
50 # cuda
51 model = model.to(devicE)  ###
52 criterion = criterion.to(devicE)  ###
53 
54 
55 def Train(epoch):
56     running_loss = 0.0
57     for batch_idx, data in enumerate(Train_loader, 0):
58         inputs, target = data
59         # cuda inputs and target
60         inputs = inputs.to(devicE)  ###
61         target = target.to(devicE)  ###
62         optimizer.zero_grad()  # noticed:  the grad return to zero before starTing the loop
63 
64         # forWARD + BACkWARD +update
65         outputs = model(inputs)
66         outputs = outputs.to(devicE)  ###
67         loss = criterion(outputs, target)
68         loss.BACkWARD()
69         optimizer.step()
70 
71         running_loss += loss.item()
72         if batch_idx % 300 == 299:
73             print('[%d, %5d] loss: %.3f' % (epoch + 1, batch_idx + 1, running_loss / 300))
74             running_loss = 0.0
75 
76 
77 def test():
78     correct = 0
79     @R_933_10586@l = 0
80     with t.no_grad():  # ensuring grad can not updating
81         for data in test_loader:
82             images, label = data
83             # cuda images, label
84             images = images.to(devicE)  ###
85             label = label.to(devicE)  ###
86             outputs = model(images)
87             outputs = outputs.to(devicE)  ###
88             _, preDicted = t.max(outputs.data, dim=1)  # taking the max num from one_hot code
89             @R_933_10586@l += label.size(0)
90             # label's format in array that N*1 like [1,8,5,8,3,2,1,4,.....,5]. so label.size() return a array [N,1] and label.size(0) is N
91             correct += (preDicted == label).sum().item()
92     print('Accurary on test set: %d %%' % (100 * correct / @R_933_10586@l))
93 
94 
95 if __name__ == '__main__':
96     for epoch in range(10):
97         Train(epoch)
98         test()
View Code

 

大佬总结

以上是大佬教程为你收集整理的pytorch中如何将CPU上运行的数据模型转到GPU上运行(mnist举例)全部内容,希望文章能够帮你解决pytorch中如何将CPU上运行的数据模型转到GPU上运行(mnist举例)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。