Я пытался работать над кодом, который позволяет пользователю выполнять нейронный net анализ с количеством слоев и количеством узлов на каждый слой по выбору пользователя. Однако, работая над кодом, я наткнулся на небольшую проблему. Я решил использовать go способ scipy.optimize.minimize
минимизировать стоимость / целевую функцию нейронной сети. Я пробовал использовать метод TN C, но, похоже, он дает нестабильные результаты, иногда с высокой точностью, а иногда с низкой точностью. Строка кода с scipy.optimize is
, приведенная ниже
from scipy.optimize import minimize
fmin = minimize(fun=computeCostandGrad,x0=theta_unroll,
args(input_size,hidden_size,n_hidden,n_labels,X,y,lmbda),
method='TNC',jac=True)
Функция computeCostandGrad
возвращает как значение функции стоимости, так и производные параметров нейронной сети. Теперь я уверен, что оба они работают правильно, поскольку я запустил код, используя известные данные и выходные значения, а также протестировал обратное распространение с проверкой градиента. Первоначальное предположение x0=theta_unroll
- это массив numpy формы: (1,10285)
.
Увидев, что метод TN C дает нестабильные результаты, я попытался изменить метод на BFGS. Но возникает эта проблема.
ValueError: shapes (10285,10285) and (1,10285) not aligned: 10285 (dim 1) != 1 (dim 0)
Теперь я знаю, что функция computeCostandGrad
верна, как я объяснял ранее. И у меня не было таких проблем, когда я использовал метод TN C. Почему у меня возникает эта проблема, когда я пытаюсь запустить только BFGS? Когда я попробовал ошибку Newton-CG, возникла другая проблема.
ValueError: setting an array element with a sequence.
Я запутался. Ошибка связана с тем, как я использовал scipy.optimize.minimize
, или есть какие-то проблемы с моей функцией computeCostandGrad
? Пожалуйста, помогите мне! Я прикрепил ссылку, по которой вы можете увидеть мой код ниже.
https://github.com/Gauthi-BP/Neural-network-Generalized/blob/master/Neural%20Network.ipynb