Неправильная классификация логистической функции

У меня возникли проблемы с попыткой научить нейронную сеть логической функции XOR. Я уже обучил сеть с успешными результатами, используя гиперболический тангенс и ReLU в качестве функций активации (что касается ReLU, я знаю, что это не подходит для такого рода задач, но я все же хотел его протестировать). Тем не менее, я не могу заставить его работать с логистической функцией. Мое определение функции:

def logistic(data):
    return 1.0 / (1.0 + np.exp(-data))

и его производная:

def logistic_prime(data):
    output = logistic(data)
    return output * (1.0 - output)

где np — это имя импортированного пакета NumPy. Поскольку логика XOR использует 0 и 1, логистическая функция должна быть соответствующей функцией активации. Тем не менее, результаты, которые я получаю, близки к 0,5 во всех случаях, т. е. любая входная комбинация 0 и 1 дает значение, близкое к 0,5. Есть ли ошибка в том, что я говорю?

Не стесняйтесь спрашивать меня о большем контексте или большем количестве кода. Заранее спасибо.


person tulians    schedule 11.01.2017    source источник
comment
Вы можете назначить вывод logistic(data) локальной переменной в logistic_prime и использовать ее дважды, а не вызывать функцию дважды. Это не имеет никакого отношения к вашей проблеме, но, по крайней мере, обучение провалится быстрее.   -  person jez    schedule 11.01.2017


Ответы (1)


У меня была такая же проблема, как у вас. Проблема возникает, когда данные не могут быть разделены линейной гиперплоскостью. Попробуйте обучить данные:

X = [[-1,0],[0,1],[1,0],[0,-1]]
Y = [1,0,1,0]

если вы нарисуете это по координате, то вы поймете, что она не делится линейно. Обучите его логистике, все параметры близки к 0, а результат близок к 0,5.

Другой линейно разделимый пример — использование Y = [1,1,0,0] и логистическая работа.

person zhc3 Liang    schedule 03.08.2017