Снова делаю побитовое И.
На этот раз функцией активации будет parametric rectified linear unit (PReLU).
По сути, PReLU состоит из двух линейных функций y = a * x. У первой функции множитель a = 0.1 (для x < 0). У второй функции множитель a = 1.0 (для x >= 0). Это один из возможных вариантов. А вариантов не мало.
Код
def activation_function (self, x) : """PReLU """ if x < 0 : return (0.1 * x) return (x)
И опять изменение функции активации это единственное изменение в коде сетей (полностью код нейронных сетей показан в первой статье).
Первая нейронная сеть
w0 = 0.4
w1 = 0.4
Результат выполнения кода
$ python3 ./and_3_prelu.py
0.1 0.1 0.08
0.1 0.9 0.40
0.9 0.1 0.40
0.9 0.9 0.72
Похожий результат был у сети с линейной функцией активации.
Вторая нейронная сеть
w0 = -0.5
w1 = 4.6
w2 = -0.7
w3 = 2.4
w4 = 1.2
w5 = -2.3
Результат выполнения кода
$ python3 ./and_5_prelu.py
0.1 0.1 0.10099999999999998
0.1 0.9 0.10099999999999909
0.9 0.1 0.10169999999999996
0.9 0.9 0.9089999999999989
Такой же результат был получен на сети с логистической функцией активации.
Третья нейронная сеть
w0 = 0.8
w1 = 1.7
w2 = 5.0
w3 = -2.2
w4 = 4.4
w5 = 4.2
w6 = -3.4
w7 = -0.6
w8 = 1.3
Результат выполнения кода
$ python3 ./and_6_prelu.py
[0.1, 0.1] [0.10000000000000009]
[0.1, 0.9] [0.10080000000000044]
[0.9, 0.1] [0.10000000000000053]
[0.9, 0.9] [0.9000000000000021]
Ожидаемый результат.
Итак. Сеть с функцией активации PReLU похожа на сеть с логистической функцией. Зачем тогда вообще нужна PReLU? Одним из достоинств PReLU является скорость работы. PReLU существенно быстрее логистической функции. А чем быстрее функция активации, тем быстрее работает нейронная сеть. И обучение быстрой сети требует меньше времени.
Комментариев нет:
Отправить комментарий