@qqqaa

Почему нейросеть при использовании функции активации выдает одинаковый результат?

Учусь создавать свои нейросети. Написал простенький очень нативный алгоритм по работе с нейросетью. Это консольная программа, суть которой в том, что при вводе значений активаций нейронов 1-ого слоя нейросети она выдает выходной результат - активации нейронов последнего слоя. Веса нейросети представлены json файлом, в нем есть 1 объект, в котором хранится многомерный массив с весами. При вводе чисел в консоль в формате 1, 0, 1 (у нейросети 3 входа (и 2 выхода)) сигналы перемножаются через веса, проходят через функцию активации и проходят через следующий слой весов и так до конца - собственно, обычный перцептрон.

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

Если что-то не понятно - просто запустите у себя код, и поймете, как все работает

Главный файл:
import numpy as np
import json

def sygm(x):     #функция сигмоиды
 return 1/(1 + np.exp(-x))


def calc(arr, wheights):     #функция, возвращяющая массив чисел - результат перемножения входного вектора нейронов на матрицу весов
  arr_1 = np.array(arr)
  wheights_1 = np.array(wheights)

  new_arr = wheights_1.dot(arr_1)

  for i in range(len(new_arr)):
    new_arr[i] = sygm(new_arr[i])
    new_arr[i] = round(new_arr[i], 2)

  return new_arr


def get_wheights(n):     #функция, возвращяющая массив нейронов определенного слооя
  with open("wheights.json", "r") as file:
    res_text = file.read()
  res_json = json.loads(res_text)
  return res_json[str(n)]


def go_trought_the_network(inputs):
  print("Значение входного слоя и его выходные веса", inputs, get_wheights(1))
  layer_2 = calc(inputs, get_wheights(1))
  print("Значение 2 слоя и его выходные веса", layer_2, get_wheights(2))
  layer_3 = calc(layer_2, get_wheights(2))
  print("Значение 3 слоя и его выходные веса", layer_3, get_wheights(3))
  layer_4 = calc(layer_3, get_wheights(3))
  print("Значение 4 слоя и его выходные веса", layer_4, get_wheights(4))
  outputs = calc(layer_4, get_wheights(4))
  print("Значение выходного слоя", outputs)


while 1:     #главный цикл программы, постоянное считывание того, что приходит в консоль
  inp = input()
  print("Введенные данные", inp.split(', '))
  arr = []
  for i in range(len(inp.split(', '))):     #перобразование массива входных строковых чисел в массив "численных" чисел
    arr.append(float(inp.split(', ')[i]))
  go_trought_the_network(arr)


Json файл с весами (они случайные) (сделан для удобства):
{
    "1": [
        [
            -1.0,
            0.1,
            0.5
        ],
        [
            -0.7,
            -0.6,
            0.6
        ],
        [
            -0.7,
            0.8,
            -0.9
        ],
        [
            0.4,
            -0.4,
            -0.8
        ],
        [
            0.7,
            0.1,
            -1.0
        ]
    ],
    "2": [
        [
            0.6,
            -0.0,
            0.5,
            0.4,
            -0.1
        ],
        [
            -0.8,
            -0.2,
            -0.8,
            0.5,
            -0.2
        ],
        [
            -0.2,
            0.0,
            0.5,
            -0.5,
            -0.3
        ]
    ],
    "3": [
        [
            0.7,
            -0.3,
            -0.1
        ],
        [
            0.1,
            0.6,
            -0.2
        ],
        [
            0.4,
            -0.5,
            0.0
        ],
        [
            -0.3,
            0.1,
            -0.9
        ],
        [
            0.4,
            0.9,
            -0.1
        ]
    ],
    "4": [
        [
            0.3,
            -1.0,
            -0.9,
            -0.8,
            0.5
        ],
        [
            -0.8,
            -0.6,
            0.0,
            -0.2,
            0.2
        ]
    ]
}
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы