Делать исчисление в Java - PullRequest
0 голосов
/ 06 августа 2010

Я пытаюсь реализовать нейронную сеть в Java (маленькая) и использую обратное распространение для алгоритма обученияДля этого необходимо найти общие производные.Как мне найти общие производные в Java?

Ответы [ 7 ]

3 голосов
/ 06 августа 2010

Попробуйте Jasymca Хельмута Дерша 2 http://webuser.hs -furtwangen.de / ~ dersch / jasymca2 / .Это Java API, предоставляющий GNU Octave / Matlab-подобные возможности.Он включает в себя символическую математику.

Недавно над Джасымкой работали.Документация выпущена в марте 2009 года и требует Java 1.5 +.

CAVEAT: Jasymca - GPL, поэтому проконсультируйтесь с юристом перед использованием его в коммерческом продукте.

1 голос
/ 23 ноября 2013

Вы должны попытаться жестко закодировать его

double derivative = (f(x+h) - f(x-h)) / (2*h);
1 голос
/ 06 августа 2010

Хорошо, если вы работаете с нейронными сетями, вам, скорее всего, НЕ нужно будет брать просто общую производную какой-то произвольной функции. Для чего вам нужна общая библиотека Calculus. Backprop требует, чтобы вы использовали производную от вашей функции активации. Обычно ваша функция активации будет сигмоидальной функцией или гиперболической функцией загара. Оба из которых вы можете просто получить производную от Википедии и просто предоставить эту функцию для обучения нейронной сети. Вам не нужно каждый раз решать производную.

Существуют и другие распространенные функции активации, но на самом деле используются лишь немногие из них. Просто посмотрите на производную и используйте тот, который вы хотите. Большинство инфраструктур нейронных сетей просто встраивают обычную функцию активации и производную в какой-то базовый класс, который вы используете. Вот некоторые из наиболее распространенных:

http://www.heatonresearch.com/online/programming-neural-networks-encog-java/chapter-3/page2.html

1 голос
/ 06 августа 2010

Зависит от того, есть ли у вас непрерывные или дискретные данные.Я предполагаю, что у вас есть дискретные данные, поскольку мы говорим о нейронных сетях.

Конечные различия являются одним из способов приблизительных производных.Другой подход может состоять в том, чтобы выполнить подгонку некоторого вида и дифференцировать функцию подбора, предполагая, что это хорошо известная функция с легко вычисляемой производной (например, полиномами).

Сколько независимых переменных дляваши данные?Функции одной переменной просты;два или более сложнее, потому что вам нужны частные производные.

0 голосов
/ 21 ноября 2015

Если речь идет о Java, посмотрите математическую программу DMelt .Это бесплатно.В руководстве вы можете найти, как брать деривации.

0 голосов
/ 22 июля 2015

Если вы можете отправлять HTTP-запросы во всемирную паутину, вы можете создать SaturnAPI скрипт интеграции.

Раскрытие: я работал над SaturnAPI

0 голосов
/ 06 августа 2010

Я почти уверен, что Java не имеет встроенной библиотеки для функциональности исчисления.Тем не менее, он может варьироваться от простого до довольно сложного для самостоятельного осуществления дифференциации.

Если у вас уже есть возможность хранить и анализировать функции, то получение производных так же просто, как программирование (довольно ограниченного) числа правил дифференцирования.

Однако если вы смотрите на дифференцирование на основе наборов данных (не абстрактных функций), то вы можете использовать различные методы аппроксимации, такие как правило Симпсонов.

...