Я работаю над мультиклассовой сегментацией с использованием 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]