1. Java有沒有神經網路的工具箱啊
這個可以找找.應該有.
2. 如何用70行Java代碼實現深度神經網路演算法
import java.util.Random;
public class BpDeep{
public double[][] layer;//神經網路各層節點
public double[][] layerErr;//神經網路各節點誤差
public double[][][] layer_weight;//各層節點權重
public double[][][] layer_weight_delta;//各層節點權重動量
public double mobp;//動量系數
public double rate;//學習系數
public BpDeep(int[] layernum, double rate, double mobp){
this.mobp = mobp;
this.rate = rate;
layer = new double[layernum.length][];
layerErr = new double[layernum.length][];
layer_weight = new double[layernum.length][][];
layer_weight_delta = new double[layernum.length][][];
Random random = new Random();
for(int l=0;l<layernum.length;l++){
layer[l]=new double[layernum[l]];
layerErr[l]=new double[layernum[l]];
if(l+1<layernum.length){
layer_weight[l]=new double[layernum[l]+1][layernum[l+1]];
layer_weight_delta[l]=new double[layernum[l]+1][layernum[l+1]];
for(int j=0;j<layernum[l]+1;j++)
for(int i=0;i<layernum[l+1];i++)
layer_weight[l][j][i]=random.nextDouble();//隨機初始化權重
}
}
}
//逐層向前計算輸出
public double[] computeOut(double[] in){
for(int l=1;l<layer.length;l++){
for(int j=0;j<layer[l].length;j++){
double z=layer_weight[l-1][layer[l-1].length][j];
for(int i=0;i<layer[l-1].length;i++){
layer[l-1][i]=l==1?in[i]:layer[l-1][i];
z+=layer_weight[l-1][i][j]*layer[l-1][i];
}
layer[l][j]=1/(1+Math.exp(-z));
}
}
return layer[layer.length-1];
}
//逐層反向計算誤差並修改權重
public void updateWeight(double[] tar){
int l=layer.length-1;
for(int j=0;j<layerErr[l].length;j++)
layerErr[l][j]=layer[l][j]*(1-layer[l][j])*(tar[j]-layer[l][j]);
while(l-->0){
for(int j=0;j<layerErr[l].length;j++){
double z = 0.0;
for(int i=0;i<layerErr[l+1].length;i++){
z=z+l>0?layerErr[l+1][i]*layer_weight[l][j][i]:0;
layer_weight_delta[l][j][i]= mobp*layer_weight_delta[l][j][i]+rate*layerErr[l+1][i]*layer[l][j];//隱含層動量調整
layer_weight[l][j][i]+=layer_weight_delta[l][j][i];//隱含層權重調整
if(j==layerErr[l].length-1){
layer_weight_delta[l][j+1][i]= mobp*layer_weight_delta[l][j+1][i]+rate*layerErr[l+1][i];//截距動量調整
layer_weight[l][j+1][i]+=layer_weight_delta[l][j+1][i];//截距權重調整
}
}
layerErr[l][j]=z*layer[l][j]*(1-layer[l][j]);//記錄誤差
}
}
}
public void train(double[] in, double[] tar){
double[] out = computeOut(in);
updateWeight(tar);
}
}
參考資料
http://geek.csdn.net/news/detail/56086
3. java神經網路的問題
神經網路類型不同 權值初始化方法也不同 用matlab 神經網路工具箱 有自動初始化的
Neural Network Design 作者: [美] 哈根等
4. java能調用matlab神經網路嗎
一、matlab版本必須支持java
在command 模式下面運行deploytool,如果支持該命令即可使用
二、matlab中function的書寫
%定義一個函數operation(a,b),求a與b的加減乘除運算,並返回結果
%函數定義function 輸出變數列表[s,m,...] 函數名(輸入變數列表)sum,sub,mul,div中
function [sum,sub,mul,div] = operation(a,b);
sum = a + b;
sub = a - b;
mul = a * b;
div = a / b;
end
PS:上面function後中括弧部分與java中調用該operation的返回值有關系,在java中調用的 Object result[] = XXX.operation(4,a,b); 4表示有4個返回值,分別存放在result[0]到result[4]中。
三、使用matlab編譯生成jar
在matlab命令窗口下輸入 deploytool,就會彈出一個編譯窗口,
然後點擊,file,選擇new-deployment project,
然後選擇matlab builder jave。
name的地方填寫工程名,
ocation填寫該工程的存儲位置。
點擊ok。
然後,把m文件添加到工程中,先new一個class,這個class的名字就是你將來在java中需要new的class的名字,也就是matlab中operation所在的class名字然後將你的m文件添加到這個class目錄下,然後直接build即可。
四、在java中使用matlab的函數
現在eclipse下面new一個新的java工程,然後將第三部build成功後產生的文件夾下面的distrib目錄中的XXX.jar 以及你matlab安裝目錄下/toolbox/javabuilder/jar/javabuilder.jar加入你的java工程extend lib 中去。
然後你可以清晰的看到XXX.jar中包含的函數和類
五、可能碰到的問題
Exception in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the library libmwmclmcrrt.so.7.13, required by MATLAB Builder JA, on java.library.path.
This library is typically installed along with MATLAB or the MCR, its absence may indicate an issue with that installation or the current path configuration.
The MCR version that this component is trying to use is: 7.13.
Failed to find the library mclmcrrt710.dll,required by MATLAB Builder JA, on java.library.path
原因是2009a要對應安裝mclmcrrt7.10。在MATLAB安裝目錄下查找:\toolbox\compiler\deploy\win32,找到MCRInstaller.exe 安裝,重啟Eclipse即可。
5. 卷積神經網路的Java實現有哪些
卷積神經網路有以下幾種應用可供研究:
1、基於卷積網路的形狀識別
物體的形狀是人的視覺系統分析和識別物體的基礎,幾何形狀是物體的本質特徵的表現,並具有平移、縮放和旋轉不變等特點,所以在模式識別領域,對於形狀的分析和識別具有十分重要的意義,而二維圖像作為三維圖像的特例以及組成部分,因此二維圖像的識別是三維圖像識別的基礎。
2、基於卷積網路的人臉檢測
卷積神經網路與傳統的人臉檢測方法不同,它是通過直接作用於輸入樣本,用樣本來訓練網路並最終實現檢測任務的。它是非參數型的人臉檢測方法,可以省去傳統方法中建模、參數估計以及參數檢驗、重建模型等的一系列復雜過程。本文針對圖像中任意大小、位置、姿勢、方向、膚色、面部表情和光照條件的人臉。
3、文字識別系統
在經典的模式識別中,一般是事先提取特徵。提取諸多特徵後,要對這些特徵進行相關性分析,找到最能代表字元的特徵,去掉對分類無關和自相關的特徵。然而,這些特徵的提取太過依賴人的經驗和主觀意識,提取到的特徵的不同對分類性能影響很大,甚至提取的特徵的順序也會影響最後的分類性能。同時,圖像預處理的好壞也會影響到提取的特徵。
6. java該如何學習神經網路
學習神經網路和語言無關,通過對某個事物大量的基礎進行數據分析、特徵提取並符號化或者信息化,從而達到可以對事物進行正確識別的過程,可能涉及到眾多數學推演或者演算法。java本身處理上述問題的能力有限
典型的教學案例是java+matlab混合編程實現阿拉伯數字的識別
7. 如何利用java庫學習神經網路
見附件,一個基本的用java編寫的BP網路代碼。BP(BackPropagation)神經網路是86年由Rumelhart和McCelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。BP網路能學習和存貯大量的輸入-輸出模式映射關系,而無需事前揭示描述這種映射關系的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的誤差平方和最小。BP神經網路模型拓撲結構包括輸入層(input)、隱層(hiddenlayer)和輸出層(outputlayer)。
8. 如何用70行java代碼實現深度神經網路演算法
神經網路結構如下圖所示,最左邊的是輸入層,最右邊的是輸出層,中間是多個隱含層,對於隱含層和輸出層的每個神經節點,都是由上一層節點乘以其權重累加得到,標上「+1」的圓圈為截距項b,對輸入層外每個節點:Y=w0*x0+w1*x1+...+wn*xn+b,由此我們可以知道神經網路相當於一個多層邏輯回歸的結構。
import java.util.Random;
public class BpDeep{
public double[][] layer;//神經網路各層節點
public double[][] layerErr;//神經網路各節點誤差
public double[][][] layer_weight;//各層節點權重
public double[][][] layer_weight_delta;//各層節點權重動量
public double mobp;//動量系數
public double rate;//學習系數
public BpDeep(int[] layernum, double rate, double mobp){
this.mobp = mobp;
this.rate = rate;
layer = new double[layernum.length][];
layerErr = new double[layernum.length][];
layer_weight = new double[layernum.length][][];
layer_weight_delta = new double[layernum.length][][];
Random random = new Random();
for(int l=0;l<layernum.length;l++){
layer[l]=new double[layernum[l]];
layerErr[l]=new double[layernum[l]];
if(l+1<layernum.length){
layer_weight[l]=new double[layernum[l]+1][layernum[l+1]];
layer_weight_delta[l]=new double[layernum[l]+1][layernum[l+1]];
for(int j=0;j<layernum[l]+1;j++)
for(int i=0;i<layernum[l+1];i++)
layer_weight[l][j][i]=random.nextDouble();//隨機初始化權重
}
}
}
//逐層向前計算輸出
public double[] computeOut(double[] in){
for(int l=1;l<layer.length;l++){
for(int j=0;j<layer[l].length;j++){
double z=layer_weight[l-1][layer[l-1].length][j];
for(int i=0;i<layer[l-1].length;i++){
layer[l-1][i]=l==1?in[i]:layer[l-1][i];
z+=layer_weight[l-1][i][j]*layer[l-1][i];
}
layer[l][j]=1/(1+Math.exp(-z));
}
}
return layer[layer.length-1];
}
//逐層反向計算誤差並修改權重
public void updateWeight(double[] tar){
int l=layer.length-1;
for(int j=0;j<layerErr[l].length;j++)
layerErr[l][j]=layer[l][j]*(1-layer[l][j])*(tar[j]-layer[l][j]);
while(l-->0){
for(int j=0;j<layerErr[l].length;j++){
double z = 0.0;
for(int i=0;i<layerErr[l+1].length;i++){
z=z+l>0?layerErr[l+1][i]*layer_weight[l][j][i]:0;
layer_weight_delta[l][j][i]= mobp*layer_weight_delta[l][j][i]+rate*layerErr[l+1][i]*layer[l][j];//隱含層動量調整
layer_weight[l][j][i]+=layer_weight_delta[l][j][i];//隱含層權重調整
if(j==layerErr[l].length-1){
layer_weight_delta[l][j+1][i]= mobp*layer_weight_delta[l][j+1][i]+rate*layerErr[l+1][i];//截距動量調整
layer_weight[l][j+1][i]+=layer_weight_delta[l][j+1][i];//截距權重調整
}
}
layerErr[l][j]=z*layer[l][j]*(1-layer[l][j]);//記錄誤差
}
}
}
public void train(double[] in, double[] tar){
double[] out = computeOut(in);
updateWeight(tar);
}
}
9. JAVA軟體開發需要哪些儀器設備
最簡單的只需要jdk環境就可以啦,你配置好後可以用記事本編輯,通過命令行編譯運行。
不過正式開發中都使用集成開發工具,如eclipse(使用人數最多),Netbeans(國外如印度那邊用的多)和IntelliJ(傳說最快速的java開發工具),當然還有機機遇eclipse的衍生版本如myeclipse(收費的,自己找破解)等
10. 人類大腦的神經網路可以用java實現嗎
神一般的問題啊。
目前好像、可能、貌似無解。