Какую функцию активации я должен использовать на последнем слое? Должен ли я использовать комбинацию сигмоида и ReLU?
Активация на последнем слое должна быть сигмоидальной и использовать binary_crossentropy
функцию потери для обучения.
Я не знаю Не знаю, нужно ли нормализовать этот тип входных переменных (и если да, то как?)
Это зависит от природы упомянутых вами дискретных значений. Как вы знаете, входы в нейронную сеть представляют «интенсивность» каждого нейрона; более высокие значения означают, что нейрон более интенсивен / активен. Таким образом, категориальные значения в качестве входных данных для NN имеют смысл, только если они отображаются в непрерывном диапазоне. Например, если отлично = 3, хорошо = 2, плохо = 1, ужасно = 0, можно передать эти значения в NN, потому что имеет смысл вычислять f(wx+b)
(интенсивность нейрона) как значение 1.5
означает где-то между плохим и хорошим.
Однако, если категориальные значения являются чисто номинальными значениями без какой-либо связи между ними (например: яблоко = 1, оранжевый = 2, банан = 3), это действительно не делает смысл вычислять f(wx+b)
. Что в этом случае означает значение 1.5
? Для этого типа данных в качестве ввода в NN вы должны преобразовать их в двоичную кодировку. Например, если у вас есть только 3 плода, вы можете закодировать это следующим образом:
apple = [1, 0, 0]
orange = [0, 1, 0]
banana = [0, 0, 1]
Для этого двоичного преобразования Keras имеет функцию полезности: to_categorical
.