我正在寻找一个优化的解决方案来使用 pytorch 数据加载器加载多个巨大的 .npy 文件。我目前正在使用以下方法,为每个时期的每个文件创建一个新的数据加载器。
我的数据加载器是这样的:
class GetData(torch.utils.data.Dataset):
def __init__(self, data_path, target_path, transform=None):
with open(data_path, 'rb') as train_pkl_file:
data = pickle.load(train_pkl_file)
self.data = torch.from_numpy(data).float()
with open(target_path, 'rb') as target_pkl_file:
targets = pickle.load(target_pkl_file)
self.targets = torch.from_numpy(targets).float()
def __getitem__(self, index):
x = self.data[index]
y = self.targets[index]
return index, x, y
def __len__(self):
num_images = self.data.shape[0]
return num_images
Run Code Online (Sandbox Code Playgroud)
我有一个 npy 文件列表:
list1 = ['d1.npy', 'd2.npy','d3.npy']
list1 = ['s1.npy', 's2.npy','s3.npy']
Run Code Online (Sandbox Code Playgroud)
我创建了一个数据加载器,它给出了文件名
class MyDataset(torch.utils.data.Dataset):
def __init__(self,flist):
self.npy_list1 = flist1
self.npy_list2 = flist2
def __getitem__(self, idx): …Run Code Online (Sandbox Code Playgroud) 以下几行生成 misra 违规。
unsigned int u16_a;
unsigned char u8_b;
if (u16_a && u8_b) // Generates Misra-C 10.1 violation.
(u16_a) ? 2 : 1 //Generates Misra-C 10.1 violation.
Run Code Online (Sandbox Code Playgroud)
违规表示操作数是必要的有符号类型,但应该是布尔类型。
对于第一次违规,如果我将它们强制转换为 _Bool 类型,它会不会导致溢出,因为我记得 bool 数据类型的大小是 1 个字节。
对于第二次违规,请尝试以下操作:
(u16_a == 0)? 1 :2 // does this work
Run Code Online (Sandbox Code Playgroud)
我在处理 MISRA 违规方面还很陌生,并且对大多数违规行为感到困惑。提前致谢。