Ошибка сегментации при использовании пользовательской функции активации - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь реализовать пользовательскую функцию активации (коды прилагаются ниже). Перед использованием пользовательской функции активации все работает хорошо. Однако, пока он используется, сервер выдаст ошибку:

Ошибка сегментации

Ошибка всегда появляется в первую эпоху.

Я использую

Pytorch 1.1.0 Инструменты для компиляции Cuda, выпуск 9.2, V9.2.148 коды

def mg(x):

    c = 1.33
    b = 0.4
    p = 6.88
    input_size = x.shape
    num = torch.numel(x) # the element number of the input tensor
    x = x.view(num)

    out = torch.zeros(len(x))

    for i in range(len(x)):
    if x[i] < 0:
            out[i] = 0
        else:
            out[i] = (c * x[i]) / (1 + torch.mul(b * p, torch.pow(x[i], p)))

    out = out.view(input_size[0], input_size[1], input_size[2], input_size[3])
    return out

1 Ответ

3 голосов
/ 08 октября 2019

Вы нарушаете градиент с помощью вновь созданного out.

Вы должны изменить свой код так, чтобы он действовал на x входах. Кроме того, вы не должны использовать циклы (почти всегда есть способ сделать это без них). Учитывая это, эта функция должна быть эквивалентна вашей, но работает:

def mg(x, c=1.33, b=0.4, p=6.88):
    input_size = x.shape
    x = x.flatten()

    x[x < 0] = 0
    x[x != 0] *= c
    x[x != 0] /= 1 + b * p * x[x != 0] ** p

    return x.reshape(*input_size)

Если вы все еще получаете ошибку, возможно, она связана с какой-то другой частью вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...