Hi everyone.
I am having problems while learning my CNN. The input is an image and the output is an image of the same size. The network should learn to reconstruct the output from the input image. But i get different results everytime. So i think something with the update of parameters is wrong.
Data and Network:
class Dataset(Dataset):
def __init__(self, data_dir, transform):
self.data_dir = data_dir
self.transform = transform
self.train_imgs = os.listdir(data_dir)
def __len__(self):
return len(self.train_imgs)
def __getitem__(self, idx):
#loads the images to train
img_loc = os.path.join(self.data_dir, self.train_imgs[idx])
image = Image.open(img_loc)
image = image.convert('L')
image = image.resize((80,60))
image = image.resize((640,480),Image.BICUBIC)
image = np.asarray(image)
image = image/255
tensor_train = torch.from_numpy(image).float()
tensor_train = tensor_train.unsqueeze(0)
#loads the images as ground truth
ground_loc = os.path.join(self.data_dir, self.train_imgs[idx])
ground = Image.open(ground_loc)
ground = ground.convert('L')
ground = ground.resize((320,240))
ground = ground.resize((640,480),Image.BICUBIC)
ground = np.asarray(ground)
ground = ground/255
ground = ground-image
tensor_ground = torch.from_numpy(ground).float()
tensor_ground = tensor_ground.unsqueeze(0)
return tensor_train, tensor_ground
class ConvNet(nn.Module):
def __init__(self):
super(ConvNet, self).__init__()
self.conv1 = nn.Conv2d(1,32,3, padding = 1)
self.conv2 = nn.Conv2d(32,32,3, padding= 1)
#self.conv3 = nn.Conv2d(32,32,3, padding = 1)
#self.conv4 = nn.Conv2d(32,32,3, padding = 1)
#self.conv5 = nn.Conv2d(32,32,3, padding = 1)
#self.conv6 = nn.Conv2d(32,32,3, padding = 1)
#self.conv7 = nn.Conv2d(32,32,3, padding = 1)
#self.conv8 = nn.Conv2d(32,32,3, padding = 1)
#self.conv9 = nn.Conv2d(32,32,3, padding = 1)
#self.conv10 = nn.Conv2d(32,32,3, padding = 1)
#self.conv11 = nn.Conv2d(32,32,3, padding = 1)
#self.conv12 = nn.Conv2d(32,32,3, padding = 1)
#self.conv13 = nn.Conv2d(32,32,3, padding = 1)
#self.conv14 = nn.Conv2d(32,32,3, padding = 1)
#self.conv15 = nn.Conv2d(32,32,3, padding = 1)
#self.conv16 = nn.Conv2d(32,32,3, padding = 1)
#self.conv17 = nn.Conv2d(32,32,3, padding = 1)
#self.conv18 = nn.Conv2d(32,32,3, padding = 1)
#self.conv19 = nn.Conv2d(32,32,3, padding = 1)
self.conv20 = nn.Conv2d(32,1,3, padding = 1)
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
#x = F.relu(self.conv3(x))
#x = F.relu(self.conv4(x))
#x = F.relu(self.conv5(x))
#x = F.relu(self.conv6(x))
#x = F.relu(self.conv7(x))
#x = F.relu(self.conv8(x))
#x = F.relu(self.conv9(x))
#x = F.relu(self.conv10(x))
#x = F.relu(self.conv11(x))
#x = F.relu(self.conv12(x))
#x = F.relu(self.conv13(x))
#x = F.relu(self.conv14(x))
#x = F.relu(self.conv15(x))
#x = F.relu(self.conv16(x))
#x = F.relu(self.conv17(x))
#x = F.relu(self.conv18(x))
#x = F.relu(self.conv19(x))
x = self.conv20(x)
return x
If you have any ideas what the problem could be, i would be very thankful.