I followed some tutorails and read repositories,then built a simple GAN model.
I have jpeg files in “mountain_dataset” folder
when I want to train it, it gives me an error,I searched possible ways to fix but I couldn’t.
def load_dataset(data_path, transform):
train_dataset = torchvision.datasets.ImageFolder(
root=data_path,
transform=transform
)
train_loader = torch.utils.data.DataLoader(
train_dataset,
batch_size=32,
num_workers=0,
shuffle=True
)
return train_loader
transform = transforms.Compose([
transforms.Resize(256),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
dataset = load_dataset(data_path="mountain_dataset", transform=transform)
opt_disc = optim.Adam(disc.parameters(), lr=lr)
opt_gen = optim.Adam(gen.parameters(), lr=lr)
criterion = nn.BCELoss()
step = 0
for epoch in range(num_epochs):
for batch_idx, (real, _) in enumerate(dataset ):
real = real.view(-1, 784).to(device)
batch_size = real.shape[0]
### Train Discriminator: max log(D(real)) + log(1 - D(G(z)))
noise = torch.randn(batch_size, z_dim).to(device)
fake = gen(noise)
disc_real = disc(real).view(-1)
lossD_real = criterion(disc_real, torch.ones_like(disc_real))
disc_fake = disc(fake).view(-1)
lossD_fake = criterion(disc_fake, torch.zeros_like(disc_fake))
lossD = (lossD_real + lossD_fake) / 2
disc.zero_grad()
lossD.backward(retain_graph=True)
opt_disc.step()
### Train Generator maximize log(D(G(z)))
output = disc(fake).view(-1)
lossG = criterion(output, torch.ones_like(output))
gen.zero_grad()
lossG.backward()
opt_gen.step()
if batch_idx == 0:
print(
f"Epoch: [{epoch+1}/{num_epochs}] Loss D: {lossD:.4f}, Loss G: {lossG:.4f}"
)
with torch.no_grad():
fake = gen(fixed_noise).reshape(-1, 1, 28, 28)
data = real.reshape(-1, 1, 28, 28)
img_grid_fake = torchvision.utils.make_grid(fake, normalize=True)
img_grid_real = torchvision.utils.make_grid(data, normalize=True)
step += 1
I get this error:
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
Cell In[13], line 1
----> 1 dataset = load_dataset(data_path="mountain_dataset", transform=transform)
2 opt_disc = optim.Adam(disc.parameters(), lr=lr)
3 opt_gen = optim.Adam(gen.parameters(), lr=lr)
Cell In[5], line 2, in load_dataset(data_path, transform)
1 def load_dataset(data_path, transform):
----> 2 train_dataset = torchvision.datasets.ImageFolder(
3 root=data_path,
4 transform=transform
5 )
7 train_loader = torch.utils.data.DataLoader(
8 train_dataset,
9 batch_size=32,
10 num_workers=0,
11 shuffle=True
12 )
13 return train_loader
File ~\pytorch\MLvenv\Lib\site-packages\torchvision\datasets\folder.py:309, in ImageFolder.__init__(self, root, transform, target_transform, loader, is_valid_file)
301 def __init__(
302 self,
303 root: str,
(...)
307 is_valid_file: Optional[Callable[[str], bool]] = None,
308 ):
--> 309 super().__init__(
310 root,
311 loader,
312 IMG_EXTENSIONS if is_valid_file is None else None,
313 transform=transform,
314 target_transform=target_transform,
315 is_valid_file=is_valid_file,
316 )
317 self.imgs = self.samples
File ~\pytorch\MLvenv\Lib\site-packages\torchvision\datasets\folder.py:144, in DatasetFolder.__init__(self, root, loader, extensions, transform, target_transform, is_valid_file)
134 def __init__(
135 self,
136 root: str,
(...)
141 is_valid_file: Optional[Callable[[str], bool]] = None,
142 ) -> None:
143 super().__init__(root, transform=transform, target_transform=target_transform)
--> 144 classes, class_to_idx = self.find_classes(self.root)
145 samples = self.make_dataset(self.root, class_to_idx, extensions, is_valid_file)
147 self.loader = loader
File ~\pytorch\MLvenv\Lib\site-packages\torchvision\datasets\folder.py:218, in DatasetFolder.find_classes(self, directory)
191 def find_classes(self, directory: str) -> Tuple[List[str], Dict[str, int]]:
192 """Find the class folders in a dataset structured as follows::
193
194 directory/
(...)
216 (Tuple[List[str], Dict[str, int]]): List of all classes and dictionary mapping each class to an index.
217 """
--> 218 return find_classes(directory)
File ~\OneDrive\Masaüstü\pytorch\MLvenv\Lib\site-packages\torchvision\datasets\folder.py:42, in find_classes(directory)
40 classes = sorted(entry.name for entry in os.scandir(directory) if entry.is_dir())
41 if not classes:
---> 42 raise FileNotFoundError(f"Couldn't find any class folder in {directory}.")
44 class_to_idx = {cls_name: i for i, cls_name in enumerate(classes)}
45 return classes, class_to_idx
FileNotFoundError: Couldn't find any class folder in mountain_dataset.```