在Java中进行演算

问题描述 投票:0回答:7

我正在尝试用Java(小版本)实现神经网络,并且我将反向传播用于学习算法。这要求找到一般的导数。如何在Java中找到一般派生词?

java calculus
7个回答
3
投票

尝试Helmut Dersch的Jasymca 2 http://webuser.hs-furtwangen.de/~dersch/jasymca2/。这是一个Java API,提供类似GNU Octave / Matlab的功能。它包括符号数学。

Jasymca最近正在研究。该文档来自2009年3月,并且需要Java 1.5 +。

注意:Jasymca是GPL,所以在将其用于商业产品之前,请咨询律师。


1
投票

取决于您是连续数据还是离散数据。我猜您有离散数据,因为我们在谈论神经网络。

有限差分是一种近似导数的方法。另一种方法可能是进行某种拟合并区分拟合函数,假设它是一个众所周知的函数,且易于计算导数(例如多项式)。

您的数据有多少个自变量?一个变量的功能很简单;因为需要偏导数,所以两个或更多个难度更大。


1
投票

您应该尝试对其进行硬编码

double derivative = (f(x+h) - f(x-h)) / (2*h);

0
投票

我很确定Java没有内置用于演算功能的库。但是,要实现自己的差异化,范围可能从微不足道到挑战很大。

如果您已经具有存储和分析函数的能力,那么获取导数就像编程(相当有限)数量的微分规则一样简单。

但是,如果您正在考虑基于DATAsets(而不是抽象函数)的差异,则可以使用各种近似技术,例如辛普森规则。


0
投票

如果可以向万维网发出HTTP请求,则可以创建SaturnAPI集成脚本。

披露:我使用过SaturnAPI


0
投票

如果涉及到Java,请查看DMelt math program。免费。在手册中,您可以找到如何推导。


0
投票

好吧,如果您正在做神经网络,则您将不需要仅取某个任意函数的泛导数。这是您需要通用微积分库的目的。 Backprop要求您使用激活函数的派生形式。通常,您的激活函数将是S型函数或双曲正切函数。两者都可以从Wikipedia中获得,并且只需将其提供给神经网络训练即可。您不需要每次都实际求解导数。

[还有其他常见的激活功能,但实际上实际上只有少数几个激活功能。只需查找导数并利用您想要的那个即可。大多数神经网络框架只是将常规激活函数和派生函数构建为您使用的某种基类。这是一些最常见的:

https://web.archive.org/web/20101105231126/http://www.heatonresearch.com/online/programming-neural-networks-encog-java/chapter-3/page2.html

© www.soinside.com 2019 - 2024. All rights reserved.