Итак, у меня есть изображения размером 100x100x3 и проблема классификации с тремя категориями.
Итак, моя архитектура CNN выглядит следующим образом:
visible = Input(shape=(100, 100, 3))
conv_1 = Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), padding='same')(visible)
flatten_1 = Flatten()(conv_1)
dense_1 = Dense(100)(flatten_1)
dense_2 = Dense(3)(dense_1)
act_6 = Activation('softmax')(dense_2)
model = Model(inputs=visible, outputs=act_6)
Теперь я определяю свою пользовательскую функцию потерь следующим образом:
def custom_loss(visible):
def loss_fun(y_true, y_pred):
return sparse_categorical_crossentropy(y_true, y_pred) + visible[?, 0, 0, 0]
return loss_fun
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss=custom_loss(visible), optimizer=sgd)
Конечно, приведенный выше код выдает ошибку из-за "?".
Как видите, я хочу добавить значение пикселя изображения, которое равно (0, 0, 0) для каждого изображения в функции потерь.
На самом деле я хочу иметь возможность изменить (0, 0, 0) на некоторые (x, y, z) в зависимости от моего значения y_pred для этого конкретного изображения.
Как мне это сделать?