diff --git a/README.md b/README.md index 40584a8555f20d34106933c1db483f6e51250bbb..f3d940cdfdfb798f7f3afb22b07848e92c488bb4 100644 --- a/README.md +++ b/README.md @@ -1,115 +1,42 @@ -## **Multi-layer Perception NeuralNetwork** # 多层感知器神经网络 -使用Java类构建 Multi-layer Perception NeuralNetwork - +多层感知器神经网络 +个人网站 + +## 项目介绍 +这是一个实现多层感知器神经网络(MLP)和卷积神经网络(CNN)的Java项目,包含完整的前向传播和反向传播功能。项目特点包括: + +- 支持多种激活函数(Sigmoid、ReLU、Softmax、Tanh) +- 实现多种损失函数(均方误差、交叉熵、Huber损失等) +- 完整的卷积神经网络实现(包含卷积层和池化层) +- 提供MNIST手写数字识别数据集读取功能 +- 支持模型参数的保存和加载 + +## 主要模块 +- **activation**: 激活函数实现模块,包含Sigmoid、ReLU、Softmax等激活函数及其导数计算 +- **loss**: 损失函数模块,实现均方误差、交叉熵等多种损失函数及其导数 +- **neural**: 神经网络核心模块,包含神经元层的实现 +- **convolution**: 卷积神经网络模块,包含卷积层和池化层的实现 +- **matrix**: 矩阵运算工具类,提供神经网络所需的矩阵操作 +- **dataset**: 数据集处理模块,特别支持MNIST手写数字数据集 +- **parameter**: 模型参数管理模块,支持参数的序列化和反序列化 + +## 使用示例 ```java -public static void main(String[] args) { - - MultilayeredPerceptronNeuralNetworks multilayeredPerceptronNeuralNetworks = new MultilayeredPerceptronNeuralNetworks(); - multilayeredPerceptronNeuralNetworks.run(); - - X = MnistRead.getImagesBinarization(MnistRead.TRAIN_IMAGES_FILE); - XT = MnistRead.getImagesBinarization(MnistRead.TEST_IMAGES_FILE); - - Y = MnistRead.getLabels(MnistRead.TRAIN_LABELS_FILE); - YT = MnistRead.getLabels(MnistRead.TEST_LABELS_FILE); - - - //下面是CNN训练 - ConvolutionLayer cl1 = new ConvolutionLayer(); - cl1.setConvolutionNeuralNumber(6); - cl1.setConvolutionLayerParameter(5, 1, 6, ActivationType.RELU); - cl1.setPoolingLayerParameter(2, 2, 0, PoolingType.MaxPooling); - ConvolutionLayer cl2 = new ConvolutionLayer(); - cl2.setConvolutionNeuralNumber(16); - cl2.setConvolutionLayerParameter(5, 1, 2, ActivationType.RELU); - cl2.setPoolingLayerParameter(2, 2, 0, PoolingType.MaxPooling); - ConvolutionLayer cl3 = new ConvolutionLayer(); - cl3.setConvolutionNeuralNumber(18); - cl3.setConvolutionLayerParameter(3, 1, 1, ActivationType.RELU); - cl3.setPoolingLayerParameter(2, 2, 0, PoolingType.MaxPooling); - - Layer layer1 = new Layer(120, ActivationType.Sigmoid); - Layer layer2 = new Layer(84, ActivationType.Sigmoid); - Layer layer3 = new Layer(10, ActivationType.Sigmoid); - - ConvolutionLayerConfiguration clc = new ConvolutionLayerConfiguration(X, Y); - clc.convolutionLayerConfiguration(cl1); - clc.convolutionLayerConfiguration(cl2); - clc.convolutionLayerConfiguration(cl3); - clc.fullyConnectedLayerConfiguration(layer1); - clc.fullyConnectedLayerConfiguration(layer2); - clc.fullyConnectedLayerConfiguration(layer3); - clc.learningRateConfiguration(0.05); - clc.lossConfiguration(LossType.MeanSquareErrorLossFunction); - clc.saveParameter("src/main/resources/DataSet/CNN.mode"); - clc.train(); - - //下面是CNN模型读取运行 (可以学到90%) - ConvolutionLayerConfiguration clc1 = new ConvolutionLayerConfiguration(XT, YT); - clc1.readParameter("src/main/resources/DataSet/CNN.mode"); - clc1.run(); - - } +// 创建多层感知器网络 +MultiLayerConfiguration mlp = new MultiLayerConfiguration(X, Y); +mlp.layerConfiguration(new Layer(128, ActivationType.RELU)) + .layerConfiguration(new Layer(10, ActivationType.SOFTMAX)) + .lossConfiguration(LossType.CROSS_ENTROPY) + .learningRateConfiguration(0.01) + .train(); // 开始训练 ``` -### 个人网站 - -[墨染随想](https://morn.ink) https://morn.ink - -创建感知器网络层和感知器网络, 设置数据集和学习率以及误差函数, train就开始训练了。 - -激活函数有: - - Sigmoid - RELU - Softmax - Tanh - -损失函数有: - - MeanSquareErrorLossFunction - L2LossFunction - L1LossFunction - SmoothL1LossFunction - HuBerLossFunction 未实现 - KullbackLeiblerDivergenceFunction - CrossEntropyLossFunction - SoftmaxLossFunction - FocalLossFunction 未实现 - - -训练准确率为84.3% ^_^ -CNN 卷积神经网络准确率提升90%; - - -项目地址:https://gitee.com/Mint-Space/DeepLearning - -项目打包: mvn -X clean package - -路径 /src/main/resources/META-INF/native-image/ink.mint/deeplearning 下文件由以下命令生成 - -步骤 4:重新生成配置文件(推荐) -通过 GraalVM Agent 自动生成配置: - -```BASH -- 1. 运行应用并生成配置 - java -agentlib:native-image-agent=config-output-dir=./config -jar ./deeplearning.jar - -- 2. 复制生成的配置到项目 - cp -r config/* src/main/resources/META-INF/native-image/ - - - - mvn clean package -X +## 数据集支持 +项目内置支持MNIST手写数字数据集,可以通过MnistRead类直接加载: +```java +double[][][] trainImages = MnistRead.getImagesMatrix("train-images.idx3-ubyte"); +double[] trainLabels = MnistRead.getLabels("train-labels.idx1-ubyte"); ``` -[多层感知器神经网络](https://gitee.com/Mint-Space/DeepLearning) - -![微信支付宝](src/main/resources/DataSet/gitee.jpg) - -![人工智能](https://pic1.zhimg.com/v2-f672a345fd1382a1c2954741ccd5a75d_r.jpg) - -喜欢这个项目可以支持一下 - -模型正在优化中。。。。 +## 许可证 +本项目遵循MIT License,请查看LICENSE文件获取详细信息。 \ No newline at end of file