Ошибка индекса при использовании sample_weight для инициализации весов модели - PullRequest
0 голосов
/ 11 апреля 2020

Я работаю над мультиклассовой сегментацией с использованием Keras и U- net.

У меня есть вывод моих классов NN 12, использующих функцию soft max Activation. форма моего вывода (N, 288,288,12).

, чтобы соответствовать моей модели. Я использую sparse_categorical_crossentropy.

Я хочу инициализировать веса моей модели для моего несбалансированного набора данных.

Правильный ответ на мой вопрос можно найти здесь: Как инициализировать выборочные веса для мультиклассовой сегментации?

Я попытался реализовать его в своем коде и заменить y на мой тренировочная маска Y_train, в которой Y_train содержит список значений между (0 и 11: мои занятия)

sample_weights = np.zeros(len(Y_train))  
sample_weights[Y_train==0] = 7  .....

но я получаю эту ошибку:

IndexError: too many indices for array

Форма Y_train имеет вид ( 481, 288, 288) я должен изменить свою форму Y_train?

Код:

    inputs = tf.keras.layers.Input((IMG_WIDHT, IMG_HEIGHT, IMG_CHANNELS))                                                                
    smooth = 1.                                                                                                                          

    s = tf.keras.layers.Lambda(lambda x: x / 255)(inputs)                                                                                
    c1 = tf.keras.layers.Conv2D(16, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(                          
        s)  # Kernelsize : start with some weights initial value                                                                         
    c1 = tf.keras.layers.Dropout(0.1)(c1)                                                                                                
    c1 = tf.keras.layers.Conv2D(16, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(                          
        c1)  # Kernelsize : start with some weights initial value                                                                        

    outputs = tf.keras.layers.Conv2D(12, (1, 1), activation='softmax')(c9)                                                               
    model = tf.keras.Model(inputs=[inputs], outputs=[outputs])                                                                           

    cc = tf.keras.optimizers.Adam(learning_rate=0.0001, beta_1=0.9, beta_2=0.999, amsgrad=False)                                         
    model.compile(optimizer=cc, loss='sparse_categorical_crossentropy',                                                                  
                  metrics=['sparse_categorical_accuracy'],sample_weight_mode="temporal")  # metrics =[dice_coeff]                                                                                                                

    sample_weights = np.zeros(len(Y_train))                                                                                              
    # your own weight corresponding here:                                                                                                
    sample_weights[Y_train==0] = 7                                                                                                       
    sample_weights[Y_train==1] = 10                                                                                                      
    sample_weights[Y_train==2] = 2                                                                                                       
    sample_weights[Y_train==3] = 3                                                                                                       
    sample_weights[Y_train==4] = 4                                                                                                       
    sample_weights[Y_train==5] = 5                                                                                                       
    sample_weights[Y_train==6] = 6                                                                                                       
    sample_weights[Y_train==7] = 50                                                                                                      
    sample_weights[Y_train==8] = 8                                                                                                       
    sample_weights[Y_train==9] = 9                                                                                                       
    sample_weights[Y_train==10] = 50                                                                                                     
    sample_weights[Y_train==11] = 11                                                                                                     

    history = model.fit(X_train, Y_train, validation_split=0.18, batch_size=1,epochs = 60 ,sample_weight=sample_weights) #class_weight=cl

PS: Y_train [0] [! [Y_train [0]] [2]] [2]

...