Я относительно новичок в использовании SciPy;В настоящее время я использую его, чтобы минимизировать функцию стоимости для модели многослойного персептрона. Я не могу использовать scikit-learn, потому что мне нужно иметь возможность устанавливать коэффициенты (они доступны только для чтения в MLPClassifer) и добавлять случайные перестановки и шум для всех без исключения параметров. Я еще не закончил реализацию, но меня смущают параметры, требуемые для функции минимизации.
Например, у меня есть функция, которую я написал для вычисления «стоимости» (энергии для минимизации). ) функции, и он одновременно рассчитывает градиент. В этом нет ничего особенного, так как это обычная практика. Однако при вызове scipy.optimize.minimize запрашиваются две разные функции: одна возвращает скаляр, который должен быть минимизирован (т. Е. Стоимость в моем случае), и другая, которая вычисляет градиент текущего состояния. Пример:
j,grad = myCostFunction(X,y)
Если я не ошибаюсь, кажется, что мне нужно будет дважды вызывать мою функцию, причем каждый вызов должен быть указан для возврата либо стоимости, либо градиента, например:
opt = scipy.optimize.minimize(fun=myJFunction, jac=myGradFunction, args = args,...)
Разве это не трата времени на вычисления? Мой набор данных будет> 1 млн. Выборок и 10-ти функций, поэтому было бы предпочтительнее сократить избыточные вычисления, так как я буду обучать и переучивать эту штуку десятки тысяч раз для своего проекта. вход args. Аргументы передаются так:
# This is what I expect happens
myJFunction(x0,*args)
myGradFunction(x0,*args)
или вот так:
# This is what I wish it did
myJFunction(x0,arg0,arg1,arg2)
myGradFunction(x0,arg3,arg4,arg5)
Заранее спасибо!