ImageDataGenerator swapping ภาพทาง

0

คำถาม

ฉันต้องการเพื่อดำเนิของตัวเองกำหนดเอง datagenerator สำหรับงานหลายข้อมูล keras รุ่นฉันต้องสร้างการใช้งานรูปแบบ api จาก keras.

ฉันต้องอ่าน alot เรื่องลำดับชั้นเรียนและฉันสามารถขยายมัน functionality ฉันต่างๆทางเลือกอื่นให้ฉันอีกไหม

ของฉันวันที่ฉันถูกคือความไม่สมดุลที่บรรจุ 3 ชั้นเรียนเรียน

enter image description here

สิ่งที่ฉันอยากจะประสบความสำเร็จในส่วนคือสร้างกำหนดเอง datagenerator ซึ่งใช้ flowfromdataframe. นี่ dataframe บรรจุพาธไปยังภาพ. โดย constraining จำนวนของภาพทางออกจาก overrepresented เรียนไดเรกทอรีผมสามารถเรียบร้อยแล้ undersample และมันสมดุลในวันที่.

Dataframe โครงสร้าง:

enter image description here

แต่ที่เหลือภาพฉันออกไปจากออกไปยังคงมีส่วนรวยข้อมูลฉันต้องการของฉันนางแบบที่ต้องเรียนรู้

มันเป็นไปได้ที่จะใช้บางอย่างเหมือนเป็นเรียกกลับ"onepochend"นั่นเรียกฟังก์ชั่นในของฉัน imagedatagenerator ซึ่ง swaps องเก่าของทางอยู่ dataframe แล้วแทนที่ด้วยการสุ่มเลือกใหม่เส้นทาง?

เรียกกลับ keras docs: https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/Callback

เครื่องมือสร้างชั้นเรียน docs: https://www.tensorflow.org/api_docs/python/tf/keras/utils/Sequence

Sketched ความคิดของฉัน:

enter image description here

หรือทำ tensorflow/keras มีบางอย่างที่ achieves เรื่องนี้?

deep-learning keras python tensorflow
2021-11-21 18:56:38
1

คำตอบที่ดีที่สุด

0

เผื่อมีใครกำลังมองหาวิธีแก้ปัญหานี้ฉันต้องการจัดเตรียมไว้เป็นกำหนดเองกำเนิดไฟฟ้าเรียบร้องโดยคนหนึ่งยื่นมือไปช่วยลำดับจาก tensorflow:

class custom_generator(tf.keras.utils.Sequence):
    def __init__(self, ecg_path, eeg_path, batch_size, img_shape, shuffle=True, X_col='filename', Y_col='class'):
        self.batch_size = batch_size
        self.img_shape = img_shape
        self.shuffle = shuffle
        self.X_col = X_col
        self.Y_col = Y_col
        self.class_mapping = {"sz": 1, "non-sz": 0}
        self.ecg_path = ecg_path
        self.eeg_path = eeg_path
        self.eeg_df, self.ecg_df = self.__generate_data()
        self.len = len(self.eeg_df)
        self.n_name = self.ecg_df[self.Y_col].nunique()

    def __generate_data(self):
        eeg_class_dist = inspect_class_distribution(self.eeg_path)
        ecg_class_dist = inspect_class_distribution(self.ecg_path)
        max_n_images = get_lowest_distr(ecg_class_dist, eeg_class_dist)
        balanced_ecg_data = limit_data(self.ecg_path, max_n_images).sort_values(by=[self.Y_col]).reset_index(drop=True)
        balanced_eeg_data = limit_data(self.eeg_path, max_n_images).sort_values(by=[self.Y_col]).reset_index(drop=True)
        return shuffle_order_dataframes(balanced_eeg_data, balanced_ecg_data)

    def on_epoch_end(self):
        if shuffle:
            self.ecg_df, self.eeg_df = self.__generate_data()
            

    def __get_input(self, path, target_size):
        image = tf.keras.preprocessing.image.load_img(path)
        image_arr = tf.keras.preprocessing.image.img_to_array(image)
        image_arr = tf.image.resize(image_arr,(target_size[0], target_size[1])).numpy()

        return image_arr/255.

    def __get_output(self, label, num_classes):
        categoric_label = self.class_mapping[label]
        return tf.keras.utils.to_categorical(categoric_label, num_classes=num_classes)

    def __get_data(self, x1_batches):
        eeg_path_batch = x1_batches[self.X_col]
        ecg_path_batch = x1_batches[self.X_col]

        label_batch = x1_batches[self.Y_col]

        x1_batch = np.asarray([self.__get_input(x, self.img_shape) for x in eeg_path_batch])
        x2_batch = np.asarray([self.__get_input(x, self.img_shape) for x in ecg_path_batch])
        y_batch = np.asarray([self.__get_output(y, self.n_name) for y in label_batch])

        return tuple([x1_batch, x2_batch]), y_batch

    def __getitem__(self, index):
        n_batches = self.eeg_df[index * self.batch_size:(index + 1) * self.batch_size]
        X, y = self.__get_data(n_batches)        
        return X, y

    def __len__(self):
        return self.len // self.batch_size

on_epoch_end คือกุญแจสำคัญอยู่ที่นี่

2021-12-10 13:53:08

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่