@@ -14,7 +14,7 @@ import java.awt.*;
14
14
public class MAIN1 {
15
15
public static void main (String [] args ) {
16
16
// 获取一张图像的像素矩阵
17
- ColorMatrix parse1 = ColorMatrix . parseGrayscale(" C:\\ Users\\ Liming\\ Desktop\\ fsdownload \\ test1.bmp" );
17
+ ColorMatrix parse1 = ColorMatrix . parseGrayscale(" C:\\ Users\\ Liming\\ Desktop\\ fsDownload \\ test1.bmp" );
18
18
// 将 parse1 进行二值化
19
19
parse1. localBinary(ColorMatrix . _G_, 30 , 0 , 0xffffff , 1 );
20
20
// 将 parse1 矩阵腐蚀,然后将腐蚀的结果获取到
@@ -42,7 +42,7 @@ import java.awt.*;
42
42
public class MAIN1 {
43
43
public static void main (String [] args ) {
44
44
// 获取一张图像的像素矩阵
45
- ColorMatrix colors = ColorMatrix . parse(" C:\\ Users\\ Liming\\ Desktop\\ fsdownload \\ test1.bmp" );
45
+ ColorMatrix colors = ColorMatrix . parse(" C:\\ Users\\ Liming\\ Desktop\\ fsDownload \\ test1.bmp" );
46
46
// 将图像拷贝一份出来
47
47
ColorMatrix parse1 = ColorMatrix . parse(colors. copyToNewArrays());
48
48
// 将 parse1 进行二值化 // 请注意阈值
@@ -80,7 +80,7 @@ public class MAIN1 {
80
80
ColorMatrix resImage1, parse1;
81
81
{
82
82
// 获取一张图像的像素矩阵
83
- ColorMatrix colors = ColorMatrix . parse(" C:\\ Users\\ Liming\\ Desktop\\ fsdownload \\ test3.bmp" );
83
+ ColorMatrix colors = ColorMatrix . parse(" C:\\ Users\\ Liming\\ Desktop\\ fsDownload \\ test3.bmp" );
84
84
// 将图像拷贝一份出来
85
85
parse1 = ColorMatrix . parse(colors. copyToNewArrays());
86
86
// 将结果二值化
@@ -133,8 +133,8 @@ public class MAIN1 {
133
133
public static void main (String [] args ) {
134
134
ColorMatrix colorMatrix1, colorMatrix2;
135
135
{ // 将图像与样本读取进来
136
- colorMatrix1 = ColorMatrix . parse(" C:\\ Users\\ zhao\\ Desktop\\ fsdownload \\ YB.bmp" );
137
- colorMatrix2 = ColorMatrix . parse(" C:\\ Users\\ zhao\\ Desktop\\ fsdownload \\ test22.jpg" );
136
+ colorMatrix1 = ColorMatrix . parse(" C:\\ Users\\ zhao\\ Desktop\\ fsDownload \\ YB.bmp" );
137
+ colorMatrix2 = ColorMatrix . parse(" C:\\ Users\\ zhao\\ Desktop\\ fsDownload \\ test22.jpg" );
138
138
ColorMatrix temp = ColorMatrix . parse(colorMatrix2. copyToNewArrays());
139
139
// 开始二值化
140
140
colorMatrix1. localBinary(ColorMatrix . _G_, 10 , 0xffffff , 0 , 1 );
@@ -177,10 +177,10 @@ import java.util.Map;
177
177
public class MAIN1 {
178
178
public static void main (String [] args ) {
179
179
ColorMatrix colorMatrix1, colorMatrix2;
180
- {
180
+ {
181
181
// 将图像与样本读取进来
182
- colorMatrix1 = ColorMatrix . parse(" C:\\ Users\\ zhao\\ Desktop\\ fsdownload \\ YB.bmp" );
183
- colorMatrix2 = ColorMatrix . parse(" C:\\ Users\\ zhao\\ Desktop\\ fsdownload \\ test22.jpg" );
182
+ colorMatrix1 = ColorMatrix . parse(" C:\\ Users\\ zhao\\ Desktop\\ fsDownload \\ YB.bmp" );
183
+ colorMatrix2 = ColorMatrix . parse(" C:\\ Users\\ zhao\\ Desktop\\ fsDownload \\ test22.jpg" );
184
184
ColorMatrix temp = ColorMatrix . parse(colorMatrix2. copyToNewArrays());
185
185
// 开始二值化
186
186
colorMatrix1. localBinary(ColorMatrix . _G_, 10 , 0xffffff , 0 , 1 );
@@ -388,7 +388,7 @@ import java.util.HashMap;
388
388
public class MAIN1 {
389
389
public static void main (String [] args ) {
390
390
// 被处理图像路径
391
- String dataPath = " C:\\ Users\\ Liming\\ Desktop\\ fsdownload \\ 微信图片_33.jpg" ;
391
+ String dataPath = " C:\\ Users\\ Liming\\ Desktop\\ fsDownload \\ 微信图片_33.jpg" ;
392
392
ColorMatrix colorMatrix1 = ColorMatrix . parse(dataPath);
393
393
colorMatrix1. show(" src" );
394
394
// 将矩阵变换 首先需要创建出不同模式中需要的配置信息 这里是反转和拉伸矩阵的配置
@@ -438,3 +438,116 @@ public class MAIN1 {
438
438
```
439
439
440
440
## 机器学习类案例
441
+
442
+ ### 线性神经网络模型训练案例
443
+
444
+ 线性神经网络训练结果是一个数学模型,其能够在庞大是数据集中查找相关规律,返回的数学模型能够被保存下来。
445
+
446
+ ``` java
447
+ package zhao.algorithmMagic ;
448
+
449
+ import zhao.algorithmMagic.core.model.* ;
450
+ import zhao.algorithmMagic.operands.table.SingletonCell ;
451
+ import zhao.algorithmMagic.operands.vector.DoubleVector ;
452
+
453
+ public class MAIN1 {
454
+
455
+ // 在 main 函数中进行模型的保存和读取以及使用
456
+ public static void main (String [] args ) {
457
+
458
+ // 构建 X 数据
459
+ DoubleVector [] X = {
460
+ DoubleVector . parse(100 , 50 , 50 ),
461
+ DoubleVector . parse(50 , 50 , 50 ),
462
+ DoubleVector . parse(50 , 100 , 50 ),
463
+ // 最后一行是初始权重数据
464
+ DoubleVector . parse(20 , 18 , 18 )
465
+ };
466
+ // 构建 Y 数据
467
+ double [] Y = {300 , 200 , 250 , 350 };
468
+
469
+ // 将 线性神经网络模型获取到
470
+ LNeuralNetwork lNeuralNetwork = ASModel . L_NEURAL_NETWORK ;
471
+ // 设置学习率
472
+ lNeuralNetwork. setArg(LNeuralNetwork . LEARNING_RATE , SingletonCell . $(0.02 ));
473
+ // 设置每一个数据样本的训练次数 为 1024
474
+ lNeuralNetwork. setArg(LNeuralNetwork . LEARN_COUNT , SingletonCell . $(1024 ));
475
+ // 设置当前神经网络中神经元的激活函数
476
+ lNeuralNetwork. setArg(LNeuralNetwork . PERCEPTRON , SingletonCell . $(Perceptron . parse(ActivationFunction . RELU )));
477
+ // 设置当前神经网络中的目标数值
478
+ lNeuralNetwork. setArg(LNeuralNetwork . TARGET , SingletonCell . $(Y ));
479
+
480
+ // 开始训练 在这里传递进需要被学习的数据 并获取到模型
481
+ NumberModel numberModel = lNeuralNetwork. function(X );
482
+ System . out. println(numberModel);
483
+ // 这里直接调用模型 预测 x1 = 200 x2 = 100 x3 = 50 时候的结果 期望数值是 550
484
+ Double function = numberModel. function(new Double []{200.0 , 100.0 , 50.0 });
485
+ System . out. println(function);
486
+ }
487
+ }
488
+ ```
489
+
490
+ ### 线性随机神经网络模型训练案例
491
+
492
+ 线性随机神经网络相较于 线性神经网络训练模型 来说具有强大的兼容性和较好的性能,但是其牺牲了些精确度,线性随机神经网络模型的使用以及训练出来的模型从保存如下所示。
493
+
494
+ ``` java
495
+ package zhao.algorithmMagic ;
496
+
497
+ import zhao.algorithmMagic.core.model.* ;
498
+ import zhao.algorithmMagic.operands.table.SingletonCell ;
499
+ import zhao.algorithmMagic.operands.vector.DoubleVector ;
500
+
501
+ import java.io.File ;
502
+ import java.util.Arrays ;
503
+
504
+ public class MAIN1 {
505
+
506
+ // 在 main 函数中进行模型的保存和读取以及使用
507
+ public static void main (String [] args ) {
508
+ // 获取到线性神经网络模型
509
+ LNeuralNetwork lNeuralNetwork = ASModel . LS_NEURAL_NETWORK ;
510
+ // 设置学习率 为 0.01
511
+ lNeuralNetwork. setArg(LNeuralNetwork . LEARNING_RATE , SingletonCell . $(0.03 ));
512
+ // 设置激活函数为 LEAKY_RE_LU
513
+ lNeuralNetwork. setArg(LNeuralNetwork . PERCEPTRON , SingletonCell . $(Perceptron . parse(ActivationFunction . LEAKY_RE_LU )));
514
+ // 设置学习次数 为 600
515
+ lNeuralNetwork. setArg(LNeuralNetwork . LEARN_COUNT , SingletonCell . $(1000 ));
516
+ // 设置目标数值
517
+ lNeuralNetwork. setArg(
518
+ LNeuralNetwork . TARGET ,
519
+ // 假设这里是5组数据对应的结果
520
+ SingletonCell . $(new double []{300 , 210 , 340 , 400 , 500 })
521
+ );
522
+ // 构建被学习的数据 由此数据推导结果 找到每一组数据中 3 个参数之间的数学模型
523
+ DoubleVector X1 = DoubleVector . parse(100 , 50 , 50 );
524
+ DoubleVector X2 = DoubleVector . parse(80 , 50 , 50 );
525
+ DoubleVector X3 = DoubleVector . parse(120 , 50 , 50 );
526
+ DoubleVector x4 = DoubleVector . parse(100 , 100 , 100 );
527
+ DoubleVector x5 = DoubleVector . parse(150 , 100 , 100 );
528
+ // 构建初始权重向量
529
+ DoubleVector W = DoubleVector . parse(20 , 18 , 18 );
530
+ // 实例化出附加 Task 任务对象
531
+ LNeuralNetwork . TaskConsumer taskConsumer = (loss, g, weight) - > {
532
+ // 在这里打印出每一次训练的信息
533
+ System . out. println(" 损失函数 = " + loss);
534
+ System . out. println(" 计算梯度 = " + g);
535
+ System . out. println(" 权重参数 = " + Arrays . toString(weight) + ' \n ' );
536
+ };
537
+ // 训练出模型 TODO 在这里指定出每一次训练时的附加任务
538
+ NumberModel model = lNeuralNetwork. function(taskConsumer, X1 , X2 , X3 , x4, x5, W );
539
+ // TODO 接下来开始使用模型进行一些测试
540
+ // 向模型中传递一些数值
541
+ Double function1 = model. function(new Double []{100.0 , 50.0 , 50.0 });
542
+ // 打印计算出来的结果
543
+ System . out. println(function1);
544
+ // 再一次传递一些数值
545
+ Double function2 = model. function(new Double []{150.0 , 100.0 , 100.0 });
546
+ // 打印计算出来的结果
547
+ System . out. println(function2);
548
+
549
+ // TODO 确定模型可用,将模型保存
550
+ ASModel . Utils . write(new File (" C:\\ Users\\ zhao\\ Desktop\\ fsDownload\\ MytModel.as" ), model);
551
+ }
552
+ }
553
+ ```
0 commit comments