mein Modell sieht so aus:
Code: Select all
filter = 3
(stride is in PyTorch as a standard: (1,1))
conv_2d(3, 8, filter=filter)
sigmoid()
conv_2d(8, 16)
sigmoid()
conv_2d(16, 32)
sigmoid()
conv_2d(32, 64)
sigmoid()
conv_2d(64, 128)
sigmoid()
conv_2d(128, 256)
sigmoid()
flatten(..., 1)
Linear(256, 64)
sigmoid()
Linear(64, 32)
sigmoid()
Linear(32, 8)
sigmoid()
Linear(8, 2)
sigmoid()
Ich habe mit Pytorch einen benutzerdefinierten Datensatz erstellt, in dem ich ein Verzeichnis habe, in dem sich die 13x13-Pixel-Bilder befinden, und eine train.csv-Datei, in der sich die Dateinamen und der a- und b-Wert des zentralen Pixels des zugehörigen Bildes sind. Ich trainiere mit einer Stapelgröße von 64 und 10.000 Bildern. Die Daten im Datensatz werden um den Faktor 128 neu skaliert und anschließend werden die Ausgaben aus dem Netzwerk auf das Original zurückskaliert.
Benutzerdefinierter Datensatz:
Code: Select all
def target_transform(label):
label_tensor = torch.tensor(label, dtype=torch.float)
normalized_label = label_tensor / 128.0 # scaling by factor of 128
return normalized_label
class ABSectionDataset(Dataset):
def __init__(self, csv_file, image_dir, section_size=13, transform=None, target_transform=None):
self.data = pd.read_csv(csv_file)
self.image_dir = image_dir
self.transform = transform
self.target_transform = target_transform
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
img_path = os.path.join(self.image_dir, self.data.iloc[idx, 0])
image = Image.open(img_path)
label = self.data.iloc[idx, 1:3].values
label = label.astype(np.float32)
if self.transform:
image = self.transform(image)
if self.target_transform:
label = self.target_transform(label)
return image, label
Ich habe auch die Ausgaben des Modells überprüft und sie sind alle gleich, unabhängig davon, welche Eingabe ich dem Netzwerk gebe. Die Eingabedaten sind jedoch nicht dieselben. Der Fehler kann also nicht an den Eingabedaten liegen.
Dies sind die ersten 6 Eingabe-Ausgabe-Paare:
Code: Select all
outputs: tensor([[84.5234, 63.5912]], grad_fn=)
labels: tensor([[162., 190.]])
outputs: tensor([[84.5234, 63.5912]], grad_fn=)
labels: tensor([[100., 165.]])
outputs: tensor([[84.5234, 63.5912]], grad_fn=)
labels: tensor([[149., 154.]])
outputs: tensor([[84.5234, 63.5912]], grad_fn=)
labels: tensor([[155., 62.]])
outputs: tensor([[84.5234, 63.5912]], grad_fn=)
labels: tensor([[166., 195.]])
outputs: tensor([[84.5234, 63.5912]], grad_fn=)
labels: tensor([[159., 187.]])