от
Я пытаюсь написать свою собственную функцию потерь, основанную на ложных положительных и отрицательных ставках. Я сделал фиктивный код, чтобы вы также могли проверить первые 2 определения. Я добавил остальное, чтобы вы могли видеть, как это реализовано. Однако все же где-то градиент оказывается равным нулю. Какой сейчас шаг, когда градиент обнуляется или как это проверить? Пожалуйста, я хотел бы знать, как я могу это исправить :). Я пытался предоставить вам больше информации, чтобы вы тоже могли поиграть, но если вы что-то упустили, пожалуйста, дайте мне знать! Градиент остается True на каждом шагу. Тем не менее, во время обучения модели потери не обновляются, поэтому NN не тренируется.
y = Variable(torch.tensor((0, 0, 0, 1, 1,1), dtype=torch.float), requires_grad = True)
y_pred = Variable(torch.tensor((0.333, 0.2, 0.01, 0.99, 0.49, 0.51), dtype=torch.float), requires_grad = True)
x = Variable(torch.tensor((0, 0, 0, 1, 1,1), dtype=torch.float), requires_grad = True)
x_pred = Variable(torch.tensor((0.55, 0.25, 0.01, 0.99, 0.65, 0.51), dtype=torch.float), requires_grad = True)

def binary_y_pred(y_pred):
    y_pred.register_hook(lambda grad: print(grad))
    y_pred = y_pred torch.tensor(0.5, requires_grad=True, dtype=torch.float)
    y_pred = y_pred.pow(5)  # this is my way working around using torch.where() 
    y_pred = y_pred.pow(10)
    y_pred = y_pred.pow(15)
    m = nn.Sigmoid()
    y_pred = m(y_pred)
    y_pred = y_pred

Я ожидаю, что модель обновится во время обучения. Там нет сообщения об ошибке.
    

        

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

1 Ответ

0 голосов
от
С вашими определениями:
TP FN=y
и
TN FP=1. Тогда вы получите FN_rate=1 и FP_rate=y_pred
. Ваша стоимость тогда
FN_rate FP_rate=1
, градиент которого равен 0. Вы можете проверить это вручную или используя библиотеку символической математики (например, SymPy):
from sympy import symbols

y, y_pred = symbols("y y_pred")

TP = y * y_pred
TN = (1
    
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...