TensorFlow -Modelltraining, Liste der Numpy Array Conversion ändert sich ungleichmäßig die Form der DatenPython

Python-Programme
Anonymous
 TensorFlow -Modelltraining, Liste der Numpy Array Conversion ändert sich ungleichmäßig die Form der Daten

Post by Anonymous »

Ich versuche, LSDC aus MRT -Bildern vorherzusagen. Für jede Studie_ID gibt es mehrere Bilder. Jede Studie_ID repräsentiert jeden Patienten. Ich möchte ein 3 -Schweregrad für 5 Bedingungen auf 5 Ebenen vorhersagen. Hier ist meine DataGenerator -Klasse: < /p>

Code: Select all

 class CustomDataGenerator(Sequence):
def __init__(self, image_dict, num_img, labels_dict=None, batch_size=8, image_size=(224, 224), shuffle=True):
self.image_dict = image_dict
self.labels_dict = labels_dict
self.batch_size = batch_size
self.image_size = image_size
self.shuffle = shuffle
self.ids = list(image_dict.keys())
self.num_img = num_img
self.on_epoch_end()

def __len__(self):
return int(np.floor(len(self.ids) / self.batch_size))

def __getitem__(self, index):
start = index * self.batch_size
end = min((index + 1) * self.batch_size, len(self.ids))
batch_ids = self.ids[start:end]
batch_images = []
batch_labels = []

for id_ in batch_ids:
images = []

for image_path in self.image_dict.get(id_, []):
dicomdata = pydicom.dcmread(image_path)
image = dicomdata.pixel_array
image = cv2.resize(image, self.image_size)
image = np.expand_dims(image, axis=-1)
image = image.astype('float32') / np.max(image)
image = np.repeat(image, 3, axis=-1)
images.append(image)

images = np.array(images)

if len(images) < self.num_img:
pad_amount = self.num_img - len(images)
padding = [(0, pad_amount)] + [(0, 0)] * (len(images.shape) - 1)
images = np.pad(images, padding, mode='constant')

batch_images.append(images)

if self.labels_dict:
label = np.array(self.labels_dict.get(id_), dtype=np.float32)
batch_labels.append(label)

batch_images = np.stack(batch_images)
if self.labels_dict:
batch_labels = np.array(batch_labels, dtype=np.float32)
return batch_images, batch_labels

return batch_images

def on_epoch_end(self):
if self.shuffle:
np.random.shuffle(self.ids)
< /code>
Mein Labels -Wörterbuch lautet wie folgt: < /p>
    for i, sid in enumerate(train_df['study_id']):
labels_dict[str(sid)] = []
for con in conditions:
if train_df.loc[i, con] == 'normal_mild':
labels_dict[str(sid)].append([1, 0, 0])
elif train_df.loc[i, con] == 'severe':
labels_dict[str(sid)].append([0, 0, 1])
else:
labels_dict[str(sid)].append([0, 1, 0])

labels_dict[str(sid)] = np.array(labels_dict[str(sid)], dtype=np.float32)
Ich habe verschiedene Möglichkeiten ausprobiert, um Labels_Dict in Numpy Array umzuwandeln. Aber entweder zum Zeitpunkt des Trainings zeigt es eine Form des Missmatch -Fehlers. Oder wenn Sie versuchen, die Daten zu sehen, zeigte es einen Fehler.

Code: Select all

----> 1 model.fit(train_generator, epochs=2) #, steps_per_epoch=len(train_generator)//8)

/usr/local/lib/python3.10/dist-packages/keras/src/utils/traceback_utils.py in error_handler(*args, **kwargs)
120             # To get the full stack trace, call:
121             # `keras.config.disable_traceback_filtering()`
--> 122             raise e.with_traceback(filtered_tb) from None
123         finally:
124             del filtered_tb

 in __getitem__(self, index)
47         batch_images = np.stack(batch_images)
48         if self.labels_dict:
---> 49             batch_labels = np.array(batch_labels, dtype=np.float32)
50             return batch_images, batch_labels
51

ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (8,) + inhomogeneous part.
Ich habe versucht, np.stack oder batch_labels = batch_labels.reshape ((batch_labels.shape [0], len (Bedingungen), 3)) , aber aber Es zeigt einen anderen Fehler. Meine Daten haben keine Nan und alle LaDels_Dict sind von Form (batch_size, num_of_condition, secority_class) . Auch als ich versuchte, die Daten vom Generator zu drucken. Generatordatenform aus data_x, data_y = next (iter (train_generator)) Die gewünschte Form von Daten für Modelleingabe und Ausgabe anzeigen. Ich kann das Problem nicht herausfinden.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post