{"id":21054450,"url":"https://github.com/junqiangwu/cnn_numpy","last_synced_at":"2025-05-15T22:34:13.333Z","repository":{"id":202522605,"uuid":"256391599","full_name":"junqiangwu/cnn_numpy","owner":"junqiangwu","description":null,"archived":false,"fork":false,"pushed_at":"2020-04-17T05:55:33.000Z","size":11531,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-03T16:12:43.676Z","etag":null,"topics":["cnn","cnn-numpy","numpy","numpy-cnn"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/junqiangwu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-04-17T03:29:03.000Z","updated_at":"2023-02-17T12:09:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"329e81b9-fda1-4e92-ac4e-7c520500ffc4","html_url":"https://github.com/junqiangwu/cnn_numpy","commit_stats":null,"previous_names":["junqiangwu/cnn_numpy"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junqiangwu%2Fcnn_numpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junqiangwu%2Fcnn_numpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junqiangwu%2Fcnn_numpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junqiangwu%2Fcnn_numpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/junqiangwu","download_url":"https://codeload.github.com/junqiangwu/cnn_numpy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254433527,"owners_count":22070487,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cnn","cnn-numpy","numpy","numpy-cnn"],"created_at":"2024-11-19T16:14:07.093Z","updated_at":"2025-05-15T22:34:08.325Z","avatar_url":"https://github.com/junqiangwu.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cnn_numpy\n\n使用numpy实现神经网络，在mnist上进行训练、测试\n\n目前包括已下算子:\n\n1. 卷积 \n\n2. 全连接 FC\n\n3. 池化  \n- MaxPolling\n- AvgPolling\n\n\n4. 激活函数 \n- Sigmoid\n- Relu\n- Tanh\n- Softmax\n\n5. 损失函数\n- CE 交叉熵损失\n- MSE 均方根损失\n\n\n\n构建网络例子\n```py\n# 构建一个 conv+fc 的网络\nclass Net(Module):\n    def __init__(self):\n        super(Net,self).__init__()\n        \n        self.layers = [\n            Conv2D(name=\"conv1\",in_channels= 1, out_channels= 6,kernel_size=3,stride=1,padding=1), # 28\n            MaxPooling('pool1',ksize=2,stride=2), # 14\n            Tanh(name='relu'),\n\n            Conv2D(name=\"conv2\",in_channels= 6, out_channels= 12,kernel_size=3,stride=1,padding=1),\n            MaxPooling('pool2',ksize=2,stride=2), # 7*7*32\n            Tanh(name='relu2'),\n\n            FC(name=\"full1\",in_channels= 12*7*7 , out_channels= 512),\n            Tanh(name=\"sigmoid1\"),\n            FC(name=\"full2\",in_channels=512,out_channels=128),\n            Tanh(name=\"sigmoid2\"),\n            FC(name=\"full3\",in_channels=128,out_channels=10),\n        ]\n\n    def forward(self,x):\n        for layer in self.layers:\n            x = layer.forward(x)\n        return x\n\n    def backward(self,grad):\n        for layer in reversed(self.layers):\n            layer.zero_grad()\n            grad = layer.backward(grad)\n    \n    def step(self,lr=1e-3):\n        for layer in reversed(self.layers):\n            layer.update(lr)\n\n```\n\n## 运行工程\n1. 下载项目\n`git clone git@github.com:junqiangwu/cnn_numpy.git`\n\n2. 运行\n`python3 main.py` # 默认使用mnist训练集\n\n- 使用全连接层训练可以达到92%的准确率，这个使用了全部数据集 6w训练  1w测试\n\n- 使用 Conv+FC 训练, 因为训练特别慢，只用了1w训练集进行训练, 训练5个epoch后,在测试集上达到**70**准确率，验证了代码的有效性\n\n\u003e 训练优化器使用基本的SGD，默认使用的1e-3初始学习率，使用过大学习率的话会学飞，有时间尝试一下Adam;\n\n\n```bash\n# log print\nepoch: 19 iter: 57500 loss: 0.2737244704525886 acc: 0.902 n_correct: 51956\nepoch: 19 iter: 58000 loss: 0.1859380691846724 acc: 0.902 n_correct: 52417\nepoch: 19 iter: 58500 loss: 0.2722464711524591 acc: 0.903 n_correct: 52894\nepoch: 19 iter: 59000 loss: 0.06477324861968438 acc: 0.903 n_correct: 53369\nepoch: 19 iter: 59500 loss: 0.08215275528987825 acc: 0.903 n_correct: 53844\n\n```\n\n# TODO\n\n- 添加优化器算法","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjunqiangwu%2Fcnn_numpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjunqiangwu%2Fcnn_numpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjunqiangwu%2Fcnn_numpy/lists"}