Многоуровневый классификатор нейронных сетей - PullRequest
0 голосов
/ 24 октября 2018

Я реализую нейронную сеть Multiclass, которая распознает цифры из входных изображений.Входные изображения имеют размер пять на пять пикселей, которые отображают пять чисел.Итак, модель нейронной сети содержит 25 входных узлов.4 выходных узла (как мы должны классифицировать пять выходов) и 50 скрытых узлов.Я использую сигмовидную функцию в качестве функции активации для скрытых узлов и функцию softmax в качестве функции активации для выходных узлов.
Мой входной аргумент X содержит сложенные данные двумерного изображения, то есть 5 * 5 * 5 трехмерных матриц.Итак, я преобразовал в (25,) вектор, используя np.reshape (X [:,:, x], 25) , чтобы я мог легко получить взвешенную сумму (так как веса 25 *50 для ввода в скрытые узлы и 50 * 5 для скрытых в выходные узлы).

Проблема, с которой я сталкиваюсь, заключается в том, что когда я вычисляю дельту для ввода в скрытый и скрытый для вывода соответственно, я получаю значение ошибки "ValueError: shape (50,) и (5,5) notвыровненный: 50 (dim 0)! = 5 (dim 0) ", который я полностью понимаю, из-за размеров обоих массивов.Но я не могу найти решение так, чтобы я мог каким-то образом изменить их и взять точечные продукты.Поскольку я впервые изучаю Python и эти нейронные сети и пишу свой собственный код, у меня нет особого опыта работы с матрицами.Мне нужна помощь в 1) исправлении этой проблемы, 2) как я могу улучшить эту сеть (будущие практики).3) Как я могу сделать сеть универсальной, чтобы, если бы я мог добавить больше слоев и т. Д., Я не испортил матричное умножение с разными измерениями?Прототип кода приведен ниже.

Код

# other stuff
def function(W1, W2, X, D):
 N = 5
 for x in range(N):
    # reshaping input in 25*1 vector
    l0 = np.reshape(X[:,:,x],25)
    ll = sigmoid(np.dot(l0,W1))
    l2 = softmax(np.dot(ll,W2))
    l2_error = D - l2
    l2_delta = l2_error
    l1_error = l2_delta.dot(W2.T)
    l1_delta = ll*(1-ll)*l1_error
    DW2 = alpha*ll.T.dot(l2_delta) #ValueError: shapes (50,) and (5,5) not aligned: 50 (dim 0) != 5 (dim 0)
    W2 = W2 + DW2
    DW1 = alpha*l0.T.dot(l1_delta) #ValueError: shapes (25,) and (5,50) not aligned: 25 (dim 0) != 5 (dim 0)
    W1 = W1 + DW1

# other stuff

X = np.zeros((5,5,5), dtype=int)
D = np.zeros((5,5), dtype=int)

X[:,:,0] = [[0 ,1, 1, 0, 0],
       [0 ,0, 1, 0, 0],
       [0 ,0, 1, 0, 0],
       [0 ,0, 1, 0, 0],
       [0 ,1, 1, 1, 0]]

X[:,:,1] = [[1 ,1, 1, 1, 0],
       [0 ,0, 0, 0, 1],
       [0 ,1, 1, 1, 0],
       [1 ,0, 0, 0, 0],
       [1 ,1, 1, 1, 1]]

X[:,:,2] = [[1 ,1, 1, 1, 0],
       [0 ,0, 0, 0, 1],
       [0 ,1, 1, 1, 0],
       [0 ,0, 0, 0, 1],
       [1 ,1, 1, 1, 0]]

X[:,:,3] = [[0 ,0, 0, 1, 0],
       [0 ,0, 1, 1, 0],
       [0 ,1, 0, 1, 0],
       [1 ,1, 1, 1, 1],
       [0 ,0, 0, 1, 0]]

X[:,:,4] = [[1 ,1, 1, 1, 1],
       [1 ,0, 0, 0, 0],
       [1, 1, 1, 1, 0],
       [0 ,0, 0, 0, 1],
       [1 ,1, 1, 1, 0]]

D = np.array([ [1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1] ]).T

W1 = 2*np.random.random((25,50)) - 1
W2 = 2*np.random.random((50,5)) - 1
W1, W2 = Multiclass(W1, W2, X, D)

1 Ответ

0 голосов
/ 26 октября 2018

эти массивы (N,) называются массивом первого ранга.Вы получите неожиданные значения или ошибку, если будете использовать их в расчете.чтобы сделать их правильными для использования, np.reshape (N, 1) исправьте это. но ... кажется, у вас много дыр в вашем понимании нейронных сетей, я предлагаю сделать следующее:

сначала выНужно немного основ линейной алгебры, хотя бы научиться вычислять внутреннее произведение 2 матрицы / вектора на бумаге.В khanacademy.org есть бесплатный курс по линейной алгебре, который удивительно прост для изучения.

во-вторых, возьмите один курс машинного обучения, у Эндрю Нг на coursera.org есть бесценные материалы.его знаменитый курс по машинному обучению потрясающий, но если вы хотите, чтобы нейронные сети прошли первый курс по его специализации глубокого обучения.все они бесплатны для аудита.

Последнее, не изобретайте велосипед.Есть много бесплатных, популярных, эффективных и простых в использовании сред для машинного обучения.tenorflow, scikit-learn, pytorch и т. д.

счастливого обучения:)

...