test分支要进行大改,大改进行中

pull/2/head
Administrator 5 years ago
parent 87cdeed935
commit a5909eebe0

@ -34,7 +34,7 @@ public class Operation {//进行计算
public List<Double> convolution(Matrix matrix, Map<Integer, Double> tagging) throws Exception {
//进行卷积
int maxNub = 0;
int maxNub;
if (templeConfig.getRow() >= templeConfig.getColumn()) {
maxNub = templeConfig.getRow();
} else {
@ -128,7 +128,7 @@ public class Operation {//进行计算
List<Double> list = new ArrayList<>();
for (int i = 0; i < matrix.getX(); i++) {
for (int j = 0; j < matrix.getY(); j++) {
list.add(ArithUtil.div(matrix.getNumber(i, j), 10));
list.add(ArithUtil.div(matrix.getNumber(i, j), 100));
}
}
return list;
@ -404,14 +404,14 @@ public class Operation {//进行计算
return list;
}
/*
* @param eventId ID
* @param featureList
/**
* @param eventId ID
* @param featureList
* @param sensoryNerveList
* @param isStudy
* @param map
* @param outBack
* */
* @param isStudy
* @param map
* @param outBack
*/
private void intoDnnNetwork(long eventId, List<Double> featureList, List<SensoryNerve> sensoryNerveList
, boolean isStudy, Map<Integer, Double> map, OutBack outBack) throws Exception {//进入DNN 神经网络
for (int i = 0; i < sensoryNerveList.size(); i++) {
@ -420,14 +420,14 @@ public class Operation {//进行计算
}
}
/*
* @param eventId ID
* @param feature
/**
* @param eventId ID
* @param feature
* @param sensoryNerveList
* @param isKernelStudy
* @param E
* @param outBack
* */
* @param isKernelStudy
* @param E
* @param outBack
*/
private void intoConvolutionNetwork(long eventId, Matrix feature, List<SensoryNerve> sensoryNerveList
, boolean isKernelStudy, int E, OutBack outBack) throws Exception {//进入卷积神经网络
for (int i = 0; i < sensoryNerveList.size(); i++) {

@ -50,6 +50,29 @@ public class Picture {
return matrix;
}
private ThreeChannelMatrix getThreeChannel(BufferedImage bi) throws Exception {
int width = bi.getWidth();//最大宽度
int height = bi.getHeight();//最大高度
pictureWidth = width;
pictureHeight = height;
ThreeChannelMatrix threeChannelMatrix = new ThreeChannelMatrix();
Matrix matrixR = new Matrix(height, width);//行,列
Matrix matrixG = new Matrix(height, width);//行,列
Matrix matrixB = new Matrix(height, width);//行,列
threeChannelMatrix.setMatrixR(matrixR);
threeChannelMatrix.setMatrixG(matrixG);
threeChannelMatrix.setMatrixB(matrixB);
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int pixel = bi.getRGB(j, i);// 下面三行代码将一个数字转换为RGB数字
matrixR.setNub(i, j, (pixel & 0xff0000) >> 16);
matrixG.setNub(i, j, (pixel & 0xff00) >> 8);
matrixB.setNub(i, j, (pixel & 0xff));
}
}
return threeChannelMatrix;
}
public double dimensionReduction(int pixel) {//提取灰度进行降维
int r = (pixel & 0xff0000) >> 16;//R
int g = (pixel & 0xff00) >> 8;//G

@ -202,15 +202,15 @@ public class TempleConfig {
//加载各识别分类的期望矩阵
matrixMap.put(0, new Matrix(height, width));
double nub = 10;//每个分类期望参数的跨度
for (int k = 0; k < classificationNub; k++) {
for (int k = 1; k <= classificationNub; k++) {
Matrix matrix = new Matrix(height, width);//初始化期望矩阵
double t = (k + 1) * nub;//期望矩阵的分类参数数值
double t = k * nub;//期望矩阵的分类参数数值
for (int i = 0; i < height; i++) {//给期望矩阵注入期望参数
for (int j = 0; j < width; j++) {
matrix.setNub(i, j, t);
}
}
matrixMap.put(k + 1, matrix);
matrixMap.put(k, matrix);
}
convolutionNerveManager = new NerveManager(1, 1,
1, deep - 1, new ReLu(), true);
@ -282,7 +282,7 @@ public class TempleConfig {
modelParameter.setDymNerveStudies(modelParameter1.getDymNerveStudies());
modelParameter.setDymOutNerveStudy(modelParameter1.getDymOutNerveStudy());
//获取LVQ模型
if (lvq.isReady()) {
if (classifier == Classifier.LVQ && lvq.isReady()) {
LvqModel lvqModel = new LvqModel();
lvqModel.setLength(lvq.getLength());
lvqModel.setTypeNub(lvq.getTypeNub());

@ -0,0 +1,33 @@
package org.wlld.imageRecognition;
import org.wlld.MatrixTools.Matrix;
public class ThreeChannelMatrix {
Matrix matrixR;
Matrix matrixG;
Matrix matrixB;
public Matrix getMatrixR() {
return matrixR;
}
public void setMatrixR(Matrix matrixR) {
this.matrixR = matrixR;
}
public Matrix getMatrixG() {
return matrixG;
}
public void setMatrixG(Matrix matrixG) {
this.matrixG = matrixG;
}
public Matrix getMatrixB() {
return matrixB;
}
public void setMatrixB(Matrix matrixB) {
this.matrixB = matrixB;
}
}

@ -48,7 +48,7 @@ public class Border {
public void end(Matrix matrix, int id) throws Exception {//长宽
height = maxX - minX;
width = maxY - minY;
KClustering kClustering = templeConfig.getkClusteringMap().get(id);
KClustering kClustering = templeConfig.getKClusteringMap().get(id);
Matrix positionMatrix = new Matrix(1, 4);
//多元线性回归的四个输出值
double tx = ArithUtil.div(minX, modelHeight);

@ -45,6 +45,7 @@ public class OutNerve extends Nerve {
} else {
this.E = 0;
}
//System.out.println("E===" + this.E + ",out==" + out+",nerveId=="+getId());
gradient = outGradient();//当前梯度变化
//调整权重 修改阈值 并进行反向传播
updatePower(eventId);

@ -11,6 +11,7 @@ import org.wlld.imageRecognition.TempleConfig;
import org.wlld.imageRecognition.border.Frame;
import org.wlld.imageRecognition.border.FrameBody;
import org.wlld.nerveEntity.ModelParameter;
import org.wlld.tools.ArithUtil;
import java.util.HashMap;
import java.util.List;
@ -38,63 +39,83 @@ public class HelloWorld {
// frame.setLengthHeight(640);
// frame.setLengthWidth(640);
// templeConfig.setFrame(frame);
templeConfig.setClassifier(Classifier.DNN);
templeConfig.init(StudyPattern.Accuracy_Pattern, true, 640, 640, 2);
templeConfig.setClassifier(Classifier.VAvg);
templeConfig.init(StudyPattern.Accuracy_Pattern, true, 1000, 1000, 3);
Operation operation = new Operation(templeConfig);
//a b c d 物品 e是背景
//一阶段
for (int i = 1; i < 290; i++) {//一阶段
System.out.println("study1==" + i);
//读取本地URL地址图片,并转化成矩阵
Matrix a = picture.getImageMatrixByLocal("D:\\share\\picture/a" + i + ".png");
Matrix b = picture.getImageMatrixByLocal("D:\\share\\picture/b" + i + ".png");
//Matrix c = picture.getImageMatrixByLocal("D:\\share\\picture/c" + i + ".png");
//Matrix d = picture.getImageMatrixByLocal("D:\\share\\picture/d" + i + ".png");
//Matrix f = picture.getImageMatrixByLocal("D:\\share\\picture/f" + i + ".png");
//将图像矩阵和标注加入进行学习Accuracy_Pattern 模式 进行第二次学习
//第二次学习的时候,第三个参数必须是 true
// operation.learning(f, 0, false);
operation.learning(a, 0, false);
operation.learning(b, 1, false);
//operation.learning(c, 2, false);
// operation.learning(d, 3, false);
}
System.out.println("一阶段完毕================");
// for (int i = 1; i < 300; i++) {//一阶段
// System.out.println("study1===================" + i);
// //读取本地URL地址图片,并转化成矩阵
// Matrix a = picture.getImageMatrixByLocal("D:\\share\\picture/a" + i + ".jpg");
// Matrix b = picture.getImageMatrixByLocal("D:\\share\\picture/b" + i + ".jpg");
// Matrix c = picture.getImageMatrixByLocal("D:\\share\\picture/c" + i + ".jpg");
// //Matrix d = picture.getImageMatrixByLocal("D:\\share\\picture/d" + i + ".png");
// //Matrix f = picture.getImageMatrixByLocal("D:\\share\\picture/f" + i + ".png");
// //将图像矩阵和标注加入进行学习Accuracy_Pattern 模式 进行第二次学习
// //第二次学习的时候,第三个参数必须是 true
// // operation.learning(f, 0, false);
// operation.learning(a, 1, false);
// operation.learning(b, 2, false);
// operation.learning(c, 3, false);
// // operation.learning(d, 3, false);
// }
// ModelParameter modelParameter = templeConfig.getModel();
// String model = JSON.toJSONString(modelParameter);
// System.out.println(model);
// System.out.println("======================================");
ModelParameter modelParameter = JSON.parseObject(ModelData.DATA3, ModelParameter.class);
templeConfig.insertModel(modelParameter);
//二阶段
for (int i = 1; i < 290; i++) {
System.out.println("study2==" + i);
//读取本地URL地址图片,并转化成矩阵
Matrix a = picture.getImageMatrixByLocal("D:\\share\\picture/a" + i + ".png");
Matrix b = picture.getImageMatrixByLocal("D:\\share\\picture/b" + i + ".png");
//Matrix c = picture.getImageMatrixByLocal("D:\\share\\picture/c" + i + ".png");
// Matrix d = picture.getImageMatrixByLocal("D:\\share\\picture/d" + i + ".png");
//Matrix f = picture.getImageMatrixByLocal("D:\\share\\picture/f" + i + ".png");
//将图像矩阵和标注加入进行学习Accuracy_Pattern 模式 进行第二次学习
//第二次学习的时候,第三个参数必须是 true
// operation.learning(f, 0, true);
operation.learning(a, 0, true);
operation.learning(b, 1, true);
//operation.learning(c, 2, true);
// operation.learning(d, 3, true);
for (int j = 0; j < 1; j++) {
for (int i = 1; i < 1500; i++) {
//System.out.println("study2==================" + i);
//读取本地URL地址图片,并转化成矩阵
Matrix a = picture.getImageMatrixByLocal("D:\\share\\picture/a" + i + ".jpg");
Matrix b = picture.getImageMatrixByLocal("D:\\share\\picture/b" + i + ".jpg");
Matrix c = picture.getImageMatrixByLocal("D:\\share\\picture/c" + i + ".jpg");
// Matrix d = picture.getImageMatrixByLocal("D:\\share\\picture/d" + i + ".png");
//Matrix f = picture.getImageMatrixByLocal("D:\\share\\picture/f" + i + ".png");
//将图像矩阵和标注加入进行学习Accuracy_Pattern 模式 进行第二次学习
//第二次学习的时候,第三个参数必须是 true
// operation.learning(f, 0, true);
//System.out.println("1===============");
operation.learning(a, 1, true);
//System.out.println("2===============");
operation.learning(b, 2, true);
operation.learning(c, 3, true);
// operation.learning(d, 3, true);
}
}
templeConfig.finishStudy();//结束学习
for (int i = 290; i < 301; i++) {
int wrong = 0;
int allNub = 0;
for (int i = 1500; i <= 1572; i++) {
//读取本地URL地址图片,并转化成矩阵
Matrix a = picture.getImageMatrixByLocal("D:\\share\\picture/a" + i + ".png");
Matrix b = picture.getImageMatrixByLocal("D:\\share\\picture/b" + i + ".png");
//Matrix c = picture.getImageMatrixByLocal("D:\\share\\picture/c" + i + ".png");
Matrix a = picture.getImageMatrixByLocal("D:\\share\\picture/a" + i + ".jpg");
Matrix b = picture.getImageMatrixByLocal("D:\\share\\picture/b" + i + ".jpg");
Matrix c = picture.getImageMatrixByLocal("D:\\share\\picture/c" + i + ".jpg");
// Matrix d = picture.getImageMatrixByLocal("D:\\share\\picture/d" + i + ".png");
//将图像矩阵和标注加入进行学习Accuracy_Pattern 模式 进行第二次学习
//第二次学习的时候,第三个参数必须是 true
allNub += 3;
int an = operation.toSee(a);
int bn = operation.toSee(b);
int cn = operation.toSee(c);
if (an != 1) {
wrong++;
}
if (bn != 2) {
wrong++;
}
if (cn != 3) {
wrong++;
}
//int cn = operation.toSee(c);
//int dn = operation.toSee(d);
System.out.println("这是0==" + an);
System.out.println("这是1==" + bn);
//System.out.println("这是2==" + cn);
//System.out.println("这是3==" + dn);
}
double wrongPoint = ArithUtil.div(wrong, allNub);
System.out.println("错误率:" + (wrongPoint * 100) + "%");
// ModelParameter modelParameter2 = templeConfig.getModel();
// String model1 = JSON.toJSONString(modelParameter2);
// System.out.println("完成阶段==" + model1);

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save