Страницы

Поиск по вопросам

воскресенье, 29 марта 2020 г.

Не получается натренировать нейронную сеть

#python #машинное_обучение #numpy


Народ, всем привет! Столкнулся с бедой - нужно натренировать сеть по приложенному
датасету (выше) и образцу с хабра (сам пост). Итоговый результат никак не похож на
изначальный набор значений. С чем я мог налажать: грешу на сигмоиду, но упустить что-то
важное из внимания мог и в любом другом месте. Огромное спасибо, если откликнитесь!

Описание сета

Данные

(Предварительно удалил строчки с вопросительными знаками и поместил сет в txt).

По-английски/in English

import numpy as np

# sigmoid func
def sigmoid(x, deriv=False):
    if deriv:
        # print(sigmoid(x) * (1 - sigmoid(x)))
        return sigmoid(x) * (1 - sigmoid(x))
    return 1 / (1 + np.exp(-x))


# input initialization
dataset = np.genfromtxt('dataset.txt', delimiter=',')
X = dataset[..., 0:12]
y = np.array([dataset[..., 13]]).T

# input normalization
Xn = X / X.max(axis=0)
yn = y / y.max(axis=0)

# random numbers initialization
np.random.seed(1)
syn0 = 2 * np.random.random((12, 1)) - 1

for i in range(50000):
    # direct error propagation
    l0 = Xn
    l1 = sigmoid(np.dot(l0, syn0))
    # error computing
    l1_error = yn - l1
    # multiply this by the slope of sigmoid
    # using values of l1
    l1_delta = l1_error * sigmoid(l1, True) # - !
    # weights update
    syn0 += np.dot(l0.T, l1_delta)  # - !
print("Output data after training: ")
print(l1)

Actual result        Required result:      
[[8.25305827e-28]    ~0
 [9.99999908e-01]    ~0.5
 [5.25318843e-04]    ~0.25
 [2.41309677e-22]    ~0
 [2.09811612e-28]    ~0
 [2.37186828e-34]    ~0
 [1.43044972e-07]    ~0.75
 [6.83698176e-30]    ~0
...                  ...

    


Ответы

Ответ 1



Дело в том, что это датасет для мультиклассовой классификации: y принимает значения 1, 2, 3, 4, 5. Для решения такой задачи нужна другая функция активации (softmax обычно) и другая функция потерь (обычно crossentropy). Советую взять датасет с бинарным таргетом.

Комментариев нет:

Отправить комментарий