1 globals()函数的用法和DataParaller()使用方法
这里是对globals()函数所对应的语法,globals() 函数会以字典类型返回当前位置的全部全局变量。
a='runoob'
print(globals()) ## 这里是来返回包括所有的导入的变量的过程的。
2 DataParaller是会对数据来进行自动的差分的,并将作业订单发送到多个GPU上的多个模型
在每个模型完成它们的工作之后,DataParallel 在将结果返回给你之前收集和合并结果。
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
input_size = 5 ## 定义的输入尺寸是5
output_size = 2 ## 定义的输出尺寸是2
batch_size = 30 ## 每批数据所对应的尺寸是30
data_size = 100 ## 是数据100
### 如果是存在GPU的话就使用GPU来进行计算,否则就是使用cpu进行计算
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
## 这里是来定义的随机的产生的数据集,也就是对应的虚拟数据集的
class RandomDataset(Dataset):
def __init__(self, size, length): ## input_size=size = 5, length = data_size = 100
self.len = length
self.data = torch.randn(length, size) ## 是来随机产生一批数据,其中数据量是100,尺寸是5
def __getitem__(self, index):
return self.data[index] ## 得到数据所对应的索引
def __len__(self):
return self.len
## 然后这里是来对相应的数据进行加载的过程的的。其中每一批所对应的数据是30个,其中shuffle是对数据进行打乱
rand_loader = DataLoader(dataset=RandomDataset(input_size, data_size), ## 5 100 返回数据和对应的索引,在来返回相应数据长度
batch_size=batch_size, shuffle=True)
### 这里是只获得一个输入,然后在是对应的输出的。
class Model(nn.Module):
# 我们的模型
def __init__(self, input_size, output_size):
super(Model, self).__init__() ## 这里是来对相应的模型的定义的过程的。
self.fc = nn.Linear(input_size, output_size) ## 这里是对应的输入5,输出是2是对应的一个全连接层
def forward(self, input): ## 然后是对应的前向的传播的把相应的数据进行输入的,这里是一批一批的数据进行输入,首先是输入30个数据
output = self.fc(input) ## 把输入的数据来通过全连接层
print("\tIn Model: input size", input.size(),
"output size", output.size()) ##这里是来答应输出得尺寸和输出的尺寸的过程的。
return output
model = Model(input_size, output_size) ## 我们这是来使用的模型的,传入相应的输入尺寸,和输出尺寸
if torch.cuda.device_count() > 1: ## 这里是使用的GPU的数量的是大于一个话
print("Let's use", torch.cuda.device_count(), "GPUs!") ## 答应出我们可以是使用的GPU的数量的。
# dim = 0 [30, xxx] -> [10, ...], [10, ...], [10, ...] on 3 GPUs
model = nn.DataParallel(model) ## nn.DataParaller来包装我们的模型
model.to(device) ## 然后这里是将模型放在GPU上来进行计算的过程的。
### 然后这里是我们来对相应的模型的运行的过程的。
for data in rand_loader: ## 首先这里是来对相应的数据进行加载的过程的。
## 总共是100个数据分别对应的是30,30,30,10
input = data.to(device) ## 把数据放在GPU上面来进行计算的,使用GPU模型来进行包装的, 如果是系统上是不存在GPU,那么使用CPU来进行计算
output = model(input) ## 把数据来给放到模型当中的。这里的模型是可以使用CNN或者是其他的一些卷积神经网络的。
print("Outside: input size", input.size(),
"output_size", output.size()) ## 这里最后的输出的结果是我只对应的了一个GPU所对应的输出的的情况的。
结果
globals()
{‘name’: ‘main’, ‘doc’: None, ‘package’: None, ‘loader’: <_frozen_importlib_external.SourceFileLoader object at 0x0000021FC3160AC0>, ‘spec’: None, ‘annotations’: {}, ‘builtins’: <module ‘builtins’ (built-in)>, ‘file’: ‘C:/Users/85339/Desktop/已看论文/3-20/classification_Pytorch_Proj-master/Test1.py’, ‘cached’: None, ‘a’: ‘runoob’}
DataParaller() 这里是只使用了一个GPU所对应的情况的。
In Model: input size torch.Size([30, 5]) output size torch.Size([30, 2])
Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])
In Model: input size torch.Size([30, 5]) output size torch.Size([30, 2])
Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])
In Model: input size torch.Size([30, 5]) output size torch.Size([30, 2])
Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])
In Model: input size torch.Size([10, 5]) output size torch.Size([10, 2])
Outside: input size torch.Size([10, 5]) output_size torch.Size([10, 2])