I’m not exactly sure, what your custom Dataset is doing, but based on the folder structure you have, you could probably just use torchvision.dataset.ImageFolder and pass the transformation to it.
This will assign a class index to each folder.
If you would like to stick to your custom Dataset, if seems as if you are returning the target as the first return value, and the data sample as the second one (in __getitem__), while you are assigning them in the reversed order in your training loop.
Also, nn.CrossEntropyLoss expects a target as a LongTensor containing class indices in the shape [batch_size] for your use case. It seems you are converting the target to a one-hot-encoded version.
Once you’ve fixed the data loading issues, you will get a shape mismatch error in your model, as it seems you are using a model for an input shape of [batch_size, 3, 32, 32] (based on the number of input features of self.fc1).
To use inputs of [batch_size, 3, 200, 200], change fc1 to:
self.fc1 = nn.Linear(16*47, 47, 120)

and use x = x.view(x.size(0), -1) to flatten your tensor in your forward method.