apida大改

pull/2/head
lidapeng 5 years ago
parent fbdc75c674
commit e3db892262

@ -254,7 +254,8 @@ public class MatrixOperation {
xr = i + x;
for (int j = 0; j < kyMax; j++) {
yr = j + y;
allNub = matrix.getNumber(xr, yr) * kernel.getNumber(i, j) + allNub;
allNub = ArithUtil.add(ArithUtil.mul(matrix.getNumber(xr, yr), kernel.getNumber(i, j)), allNub);
// allNub = matrix.getNumber(xr, yr) * kernel.getNumber(i, j) + allNub;
}
}
return allNub;

@ -40,7 +40,7 @@ public class Convolution {
private void normalization(Matrix matrix) throws Exception {
for (int i = 0; i < matrix.getX(); i++) {
for (int j = 0; j < matrix.getY(); j++) {
matrix.setNub(i, j, ArithUtil.div(matrix.getNumber(i, j), 10000000));
matrix.setNub(i, j, ArithUtil.div(matrix.getNumber(i, j), 1000000));
}
}
}

@ -31,7 +31,7 @@ public class TempleConfig {
private NerveManager convolutionNerveManagerB;//卷积神经网络管理器
private int row = 5;//行的最小比例
private int column = 3;//列的最小比例
private int deep = 1;//默认深度
private int deep = 3;//默认深度
private int classificationNub = 2;//分类的数量
private int studyPattern;//学习模式
private boolean isHavePosition = false;//是否需要锁定物体位置
@ -211,7 +211,7 @@ public class TempleConfig {
private void initNerveManager(boolean initPower, int sensoryNerveNub
, int deep) throws Exception {
nerveManager = new NerveManager(sensoryNerveNub, 6,
nerveManager = new NerveManager(sensoryNerveNub, 9,
classificationNub, deep, new Sigmod(), false);
nerveManager.init(initPower, false);
}
@ -242,7 +242,7 @@ public class TempleConfig {
}
//加载各识别分类的期望矩阵
matrixMap.put(0, new Matrix(height, width));
double nub = 0.5;//每个分类期望参数的跨度
double nub = 1;//每个分类期望参数的跨度
for (int k = 1; k <= classificationNub; k++) {
Matrix matrix = new Matrix(height, width);//初始化期望矩阵
double t = k * nub;//期望矩阵的分类参数数值

@ -110,8 +110,8 @@ public abstract class Nerve {
powerMatrix = MatrixOperation.add(powerMatrix, matrix.getSonOfMatrix(i, j, 3, 3));
}
double dm = MatrixOperation.convolution(matrix, nerveMatrix, i, j);
//dm = ArithUtil.sub(ArithUtil.div(dm, 9), threshold);//减偏置项
dm = dm / 9 - threshold;
dm = ArithUtil.sub(ArithUtil.div(dm, 9), threshold);//减偏置项
//dm = dm / 9 - threshold;
//设置输出矩阵 经过激活函数
myMatrix.setNub(i / 3, j / 3, activeFunction.function(dm));
}

@ -41,8 +41,8 @@ public class CoverTest {
Operation operation = new Operation(templeConfig);//初始化运算类
Picture picture = new Picture();
Matrix pic1 = picture.getImageMatrixByLocal(url);//从本地磁盘读取图片
Matrix pic2 = picture.getImageMatrixByIo(inputStream);//从输入流读取图片
double point = operation.coverPoint(pic1, 1);//获取覆盖率
Matrix pic2 = picture.getImageMatrixByIo(inputStream);//从输入流读取图片
}
public static void fireStudy() throws Exception {//土壤扰动,桔梗焚烧等识别

@ -91,6 +91,29 @@ public class HelloWorld {
System.out.println("错误率:" + (wrongPoint * 100) + "%");
}
public static void food2() throws Exception {
Picture picture = new Picture();
TempleConfig templeConfig = new TempleConfig(false);
templeConfig.init(StudyPattern.Speed_Pattern, true, 1000, 1000, 2);
Operation operation = new Operation(templeConfig);
Map<Integer, Double> right = new HashMap<>();
Map<Integer, Double> wrong = new HashMap<>();
right.put(1, 1.0);
wrong.put(2, 1.0);
for (int j = 0; j < 20; j++) {
for (int i = 1; i < 1500; i++) {//一阶段
System.out.println("study1===================" + i);
//读取本地URL地址图片,并转化成矩阵
Matrix a = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/a" + i + ".jpg");
Matrix c = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/c" + i + ".jpg");
operation.study(a, right);
operation.study(c, wrong);
}
}
}
public static void food() throws Exception {
Picture picture = new Picture();
TempleConfig templeConfig = new TempleConfig(false);
@ -103,29 +126,34 @@ public class HelloWorld {
// templeConfig.setFrame(frame);
templeConfig.setClassifier(Classifier.DNN);
templeConfig.init(StudyPattern.Accuracy_Pattern, true, 1000, 1000, 2);
// ModelParameter modelParameter2 = JSON.parseObject(ModelData.DATA, ModelParameter.class);
// templeConfig.insertModel(modelParameter2);
Operation operation = new Operation(templeConfig);
//a b c d 物品 e是背景
//一阶段
for (int i = 1; i < 300; i++) {//一阶段
System.out.println("study1===================" + i);
//读取本地URL地址图片,并转化成矩阵
Matrix a = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/a" + i + ".jpg");
//Matrix b = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/b" + i + ".jpg");
Matrix c = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/c" + i + ".jpg");
//Matrix d = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/d" + i + ".jpg");
//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, 2, false);
//operation.learning(d, 4, false);
// 一阶段
for (int j = 0; j < 2; j++) {
for (int i = 1; i < 1500; i++) {//一阶段
System.out.println("study1===================" + i);
//读取本地URL地址图片,并转化成矩阵
Matrix a = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/a" + i + ".jpg");
//Matrix b = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/b" + i + ".jpg");
Matrix c = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/c" + i + ".jpg");
//Matrix d = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/d" + i + ".jpg");
//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, 2, false);
//operation.learning(d, 4, false);
}
}
// ModelParameter modelParameter = JSON.parseObject(ModelData.DATA8, ModelParameter.class);
// templeConfig.insertModel(modelParameter);
//二阶段
for (int i = 1; i < 300; i++) {
for (int i = 1; i < 1500; i++) {
Matrix a = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/a" + i + ".jpg");
//Matrix b = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/b" + i + ".jpg");
Matrix c = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/c" + i + ".jpg");
@ -137,8 +165,8 @@ public class HelloWorld {
//operation.normalization(d, templeConfig.getConvolutionNerveManager());
}
templeConfig.getNormalization().avg();
for (int j = 0; j < 3; j++) {
for (int i = 1; i < 300; i++) {
for (int j = 0; j < 1; j++) {
for (int i = 1; i < 1500; i++) {
System.out.println("study2==================" + i);
//读取本地URL地址图片,并转化成矩阵
Matrix a = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/a" + i + ".jpg");
@ -162,15 +190,15 @@ public class HelloWorld {
ModelParameter modelParameter = templeConfig.getModel();
String model = JSON.toJSONString(modelParameter);
System.out.println(model);
ModelParameter modelParameter2 = JSON.parseObject(model, ModelParameter.class);
TempleConfig templeConfig2 = new TempleConfig(false);
templeConfig2.init(StudyPattern.Accuracy_Pattern, true, 1000, 1000, 2);
templeConfig2.insertModel(modelParameter2);
Operation operation2 = new Operation(templeConfig2);
// ModelParameter modelParameter2 = JSON.parseObject(model, ModelParameter.class);
// TempleConfig templeConfig2 = new TempleConfig(false);
// templeConfig2.init(StudyPattern.Accuracy_Pattern, true, 1000, 1000, 2);
// templeConfig2.insertModel(modelParameter2);
//
// Operation operation2 = new Operation(templeConfig2);
int wrong = 0;
int allNub = 0;
for (int i = 300; i <= 320; i++) {
for (int i = 1500; i <= 1572; i++) {
//读取本地URL地址图片,并转化成矩阵
Matrix a = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/a" + i + ".jpg");
//Matrix b = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/b" + i + ".jpg");
@ -235,8 +263,13 @@ public class HelloWorld {
operation.coverStudy(right, rightTagging, wrong, wrongTagging);
}
System.out.println("学习完成");
long sys = System.currentTimeMillis();
double point = operation.coverPoint(right, 1);
long sys2 = System.currentTimeMillis();
long sys3 = sys2 - sys;
double point2 = operation.coverPoint(wrong, 1);
System.out.println("识别耗时:" + sys3);
System.out.println("测试覆盖1" + point + ",测试覆盖2:" + point2);
}

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