# 矩阵卷积 **Repository Path**: Klaoye/matrix-convolution ## Basic Information - **Project Name**: 矩阵卷积 - **Description**: c语言实现卷积算法(纯练手) - **Primary Language**: C - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-27 - **Last Updated**: 2026-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Matrix Convolution 一个简单的 C 语言矩阵卷积实现项目。 ## 项目简介 本项目实现了基本的二维矩阵卷积运算及相关矩阵处理函数,包含 MNIST 数据集加载模块和 LeNet 卷积神经网络的基础工具函数。 ## 功能特性 ### 核心函数 - **矩阵最大值计算** (`matrixMax` / `array2DMaxToU8` / `array2DMaxToF32`):获取矩阵中的最大元素值 - **矩阵最小值计算** (`matrixMin` / `array2DMinToU8` / `array2DMinToF32`):获取矩阵中的最小元素值 - **矩阵平均值计算** (`matrixAverage` / `array2DAverageToU8` / `array2DAverageToF32`) - **矩阵输出** (`putMartix` / `putMartixF32` / `putArray2D` / `putArray2DF32`):在终端显示矩阵内容 - **卷积运算** (`c1Conv` / `c3Conv` / `c5Conv`):执行二维卷积核心算法 - **池化运算** (`s2Pool`):执行池化操作 - **ReLU 激活** (`matrixRelu` / `reluToU8` / `reluToF32`):ReLU 激活函数 ### 数据集相关 - **数据集加载** (`loadDataset` / `loadImageSet`):加载 MNIST 格式的图像和标签数据 - **数据洗牌** (`shuffle`):打乱数据顺序 ### 神经网络相关 - **前向传播** (`forwardAll`):执行完整的前向传播过程 - **训练迭代** (`epoch`):执行训练周期 - **测试评估** (`test`):测试模型性能 - **反向传播** (`backward`):执行反向传播算法 - **权重更新** (`updateAllWeights`):使用 SGD 更新权重 - **全连接层** (`fcForward` / `fcBackward`):全连接层的前向和反向传播 - **卷积反向** (`convBackward`):卷积层的反向传播 - **池化反向** (`poolBackward`):池化层的反向传播 ### 内存管理 - **矩阵创建** (`createNewMatrix` / `createU8Array2D` / `createF32Array2D` / `arrayToMatrix`) - **矩阵销毁** (`dropMatrix` / `dropDataMap`) - **类型转换** (`matrixToArray` / `arrayU8ToF32`) ### 激活函数 - ReLU 激活 (`reluToF32`) - Softmax 交叉熵 (`softmaxCE`) - 恒等映射 (`identityF32`) ## 数据结构 | 变量 | 类型 | 描述 | |------|------|------| | `matrix` | `int8_t[8][8]` | 输入矩阵 (8×8) | | `convCore` | `int8_t[2][2]` | 卷积核 (2×2) | | `matrixNew` | `int8_t[4][4]` | 输出矩阵 (4×4) | ## 编译与运行 ```bash gcc src/main.c src/dataset.c src/lenetutils.c -o matrix_convolution -lm ./matrix_convolution ``` ## 使用说明 项目包含预设的示例矩阵和卷积核。程序运行时将: 1. 显示原始输入矩阵 2. 显示卷积核 3. 执行卷积运算 4. 输出卷积结果矩阵 5. 显示结果矩阵的最大值和最小值 如需修改测试数据,可直接编辑 `src/main.c` 中的 `matrix` 和 `convCore` 数组。 ## 目录结构 ``` matrix-convolution/ ├── src/ │ ├── main.c # 主程序入口 │ ├── dataset.c # 数据集加载实现 │ ├── dataset.h # 数据集头文件 │ ├── lenetutils.c # 矩阵和卷积工具函数 │ └── lenetutils.h # 工具函数头文件 ├── .vscode/ # VSCode 配置 ├── LICENSE # MIT 许可证 ├── README.md # 中文文档 └── README.en.md # 英文文档 ``` ## 许可证 AGPLv3 许可证