J'ai rencontré un problème!
Récemment, j'ai rencontrer un problème d'I/O question. La cible et les données d'entrée sont stockés avec h5py fichiers. Chaque fichier cible est de 2,6 GO tandis que chaque fichier d'entrée est de 10,2 GB. J'ai 5 jeux de données en entrée et 5 ensembles de données au total.
J'ai créé un dataset personnalisé fonction pour chaque h5py le fichier et utiliser les données.ConcatDataset classe de faire le lien entre tous les ensembles de données. Le dataset personnalisé fonction est:
class MydataSet(Dataset):
def __init__(self, indx=1, root_path='./xxx', tar_size=128, data_aug=True, train=True):
self.train = train
if self.train:
self.in_file = pth.join(root_path, 'train', 'train_noisy_%d.h5' % indx)
self.tar_file = pth.join(root_path, 'train', 'train_clean_%d.h5' % indx)
else:
self.in_file = pth.join(root_path, 'test', 'test_noisy.h5')
self.tar_file = pth.join(root_path, 'test', 'test_clean.h5')
self.h5f_n = h5py.File(self.in_file, 'r', driver='core')
self.h5f_c = h5py.File(self.tar_file, 'r')
self.keys_n = list(self.h5f_n.keys())
self.keys_c = list(self.h5f_c.keys())
# h5f_n.close()
# h5f_c.close()
self.tar_size = tar_size
self.data_aug = data_aug
def __len__(self):
return len(self.keys_n)
def __del__(self):
self.h5f_n.close()
self.h5f_c.close()
def __getitem__(self, index):
keyn = self.keys_n[index]
keyc = self.keys_c[index]
datan = np.array(self.h5f_n[keyn])
datac = np.array(self.h5f_c[keyc])
datan_tensor = torch.from_numpy(datan).unsqueeze(0)
datac_tensor = torch.from_numpy(datac)
if self.data_aug and np.random.randint(2, size=1)[0] == 1: # horizontal flip
datan_tensor = torch.flip(datan_tensor,dims=[2]) # c h w
datac_tensor = torch.flip(datac_tensor,dims=[2])
Puis-je utiliser dataset_train = data.ConcatDataset([MydataSet(indx=index, train=True) for index in range(1, 6)])
pour la formation. Lorsque seulement 2-3 h5py fichiers sont utilisés, les e/S de vitesse est normale et tout va bien. Toutefois, lorsque les 5 fichiers sont utilisés, la vitesse d'entraînement est en train de diminuer progressivement (5 itérations/s à 1 itérations/s). - Je changer la num_worker et le problème existe toujours.
Quelqu'un pourrait-il me donner une solution? Devrais-je fusionner plusieurs h5py fichiers dans un plus gros? Ou d'autres méthodes? Merci à l'avance!