# numpy_cnn **Repository Path**: bitosky/numpy_cnn ## Basic Information - **Project Name**: numpy_cnn - **Description**: 使用 numpy 自己实现 cnn,学习神经网络的前向与反向传播,激活函数,以及numpy api 具体包括: 激活函数: sigmoid, relu, softmax 网络层: 激活函数层,reshape层,全连接层(full connected layer),平均池化层(average-pooling layer),卷积层(convolution layer) 使用 MNIST 数据集验证有效性 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 2 - **Created**: 2019-08-12 - **Last Updated**: 2025-07-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # numpy_cnn #### 介绍 使用 numpy 自己实现 cnn,学习神经网络的前向与反向传播,激活函数,以及numpy api 具体包括: 激活函数: - sigmoid - relu - softmax 网络层: - 激活函数层 - reshape层 - 全连接层(full connected layer) - 平均池化层(mean-pooling layer) - 卷积层(convolution layer) #### 博客 [【python】如何用 numpy 实现 CNN](https://blog.csdn.net/qq_36393962/article/details/99354969#comments_13002919) #### 感想 - 我写这些代码只是为了学习算法,没有仔细考虑效率和准确率(python写的,效率不会高到哪里去) - 我的网络框架借鉴了 pytorch 和 tensorflow,体会到了这些框架设计上的合理性。 比如说卷积时 kernel_size, stride,input_size 之间的约束关系 —— 我记得卷积核是要能够扫过input张量所有行和列(例如28x28,不能用 (5x5,stride=2)卷积,因为它只能扫过 27x27)。以前不懂,自己写完后发现这涉及到反向传播计算的问题,如果约束不满足,还得加 zeros_padding,非常多余。 - 很多事情说起来容易,做起来难。以前看了不少关于神经网络原理的博客,结果自己动手后发现有很多细节问题自己根本没注意过。 #### 参考资料 - np.einsum (爱因斯坦求和约定)—— 相当方便的 API - BP 反向传播 https://blog.csdn.net/qq_36393962/article/details/97421557 - softmax https://blog.csdn.net/cassiePython/article/details/80089760 - 池化层 https://blog.csdn.net/googler_offer/article/details/81208413 https://blog.csdn.net/m_buddy/article/details/80426531 - 卷积层 https://blog.csdn.net/qq_16137569/article/details/81477906 https://www.cnblogs.com/charlotte77/p/7783261.html https://www.zhihu.com/question/22298352/answer/228543288 (2020-5-23 添加) - 多通道卷积 https://blog.csdn.net/csuyzt/article/details/82026408 https://blog.csdn.net/weixin_40519315/article/details/105115657