NumPyCNN
NumPyCNN 是一个基于 Python NumPy 库从零构建卷积神经网络(CNN)的开源项目。它旨在帮助开发者深入理解 CNN 的内部运作机制,通过纯代码实现卷积、池化等核心操作,而非依赖现成的高级框架。
该项目主要解决了深度学习初学者和研究者在学习过程中面临的“黑盒”难题。通过查看和运行 NumPyCNN 的源码,用户可以清晰地看到数据在网络中如何流动以及权重如何影响输出,从而掌握神经网络底层的数学原理与逻辑。目前,NumPyCNN 专注于实现网络的“前向传播”过程,适用于单标签图像分类任务。虽然它暂未包含标准的反向传播学习算法,但支持通过调整学习率来微调权重,并计划结合遗传算法库 PyGAD 进行更进阶的训练探索。
NumPyCNN 非常适合希望夯实理论基础的开发人员、高校学生以及人工智能研究人员使用。对于想要脱离框架束缚、亲手编写神经网络每一行代码的技术爱好者来说,这是一个极佳的教学与实践工具。其最大的技术亮点在于完全摒弃了自动求导等高级特性,强制用户直面底层算法细节,是理解深度学习基石的理想起点。
使用场景
某高校人工智能实验室的研究员正在为本科生设计一门深度学习原理课程,需要让学生在不依赖高级框架的情况下,亲手理解卷积神经网络的底层数学机制。
没有 NumPyCNN 时
- 学生必须从零开始编写每一行矩阵运算代码来构建卷积层和池化层,极易因索引错误导致调试困难,耗费大量时间在非核心逻辑上。
- 缺乏统一的模块化结构,不同学生实现的“手写 CNN"代码风格迥异,教师难以进行统一的教学评估和代码审查。
- 由于手动实现反向传播算法难度极高且容易出错,课程往往只能停留在理论推导,无法让学生看到模型实际运行和权重更新的过程。
- 想要尝试不同的优化策略(如遗传算法)时,需要重新重构整个训练循环,扩展性极差,限制了实验的深度。
使用 NumPyCNN 后
- 学生直接调用
cnn.py中封装好的类即可搭建完整的 CNN 前向传播流程,将精力集中在理解卷积核如何提取特征这一核心教学目标上。 - 项目提供了标准化的单模块实现,所有学生基于同一套清晰的代码基线进行实验,极大提升了教学效率和代码可比性。
- 虽然默认仅包含前向传播,但结合简单的学习率调整机制,学生能直观观察到权重变化对分类结果的影响,成功打通理论与实践的最后一公里。
- 架构天然支持与 PyGAD 库对接,学生可以轻松替换训练逻辑,利用遗传算法训练网络,从而深入探索传统梯度下降之外的优化路径。
NumPyCNN 通过剥离高级框架的黑盒特性,为教育者和研究者提供了一个透明、可定制的底层实验平台,让深度学习的内部机理真正变得可见且可操作。
运行环境要求
未说明
未说明

快速开始
NumPyCNN:从零开始实现卷积神经网络
NumPyCNN 是一个使用 NumPy 从零开始实现的卷积神经网络(CNN)Python 库。
重要提示 如果您是为名为使用 NumPy 从零开始构建卷积神经网络 的教程代码而来,那么该代码已于 2020 年 5 月 20 日移至 TutorialProject 目录下。
该项目包含一个名为 cnn.py 的模块,实现了构建 CNN 所需的所有类和函数。
需要注意的是,该项目仅实现了 CNN 训练的 前向传播,并且 未使用任何学习算法。每次迭代后仅会根据学习率对权重进行一些调整,这比保持权重不变要好。
该项目可用于分类问题,但每个样本只能属于一个类别。
未来,该项目将借助名为 PyGAD 的库扩展为 使用遗传算法训练 CNN。请参阅该库的文档:Read The Docs:https://pygad.readthedocs.io
捐赠
- 信用卡/借记卡:https://donate.stripe.com/eVa5kO866elKgM0144
- Open Collective:opencollective.com/pygad
- PayPal:可使用此链接:paypal.me/ahmedfgad,或发送邮件至 ahmed.f.gad@gmail.com
- Interac 电子转账:请使用电子邮件地址 ahmed.f.gad@gmail.com
安装
要安装 PyGAD,只需使用 pip 从 PyPI(Python 软件包索引)下载并安装该库。该库在 PyPI 上的页面为:https://pypi.org/project/pygad。
通过以下命令安装 PyGAD:
pip install pygad
要开始使用 PyGAD,请阅读位于 Read The Docs 的文档:https://pygad.readthedocs.io。
PyGAD 源代码
PyGAD 各模块的源代码位于以下 GitHub 项目中:
- pygad:(https://github.com/ahmedfgad/GeneticAlgorithmPython)
- pygad.nn:https://github.com/ahmedfgad/NumPyANN
- pygad.gann:https://github.com/ahmedfgad/NeuralGenetic
- pygad.cnn:https://github.com/ahmedfgad/NumPyCNN
- pygad.gacnn:https://github.com/ahmedfgad/CNNGenetic
- pygad.kerasga:https://github.com/ahmedfgad/KerasGA
- pygad.torchga:https://github.com/ahmedfgad/TorchGA
PyGAD 的文档可在 Read The Docs 上找到:https://pygad.readthedocs.io。
PyGAD 文档
PyGAD 库的文档可在 Read The Docs 上找到,链接为:https://pygad.readthedocs.io。文档详细介绍了 PyGAD 支持的模块、所有类、方法、属性和函数,并为每个模块提供了多个示例。
如果在使用 PyGAD 时遇到问题,欢迎在 GitHub 仓库 中提交问题:https://github.com/ahmedfgad/GeneticAlgorithmPython,或发送邮件至 ahmed.f.gad@gmail.com。
如果您开发了使用 PyGAD 的项目,请将以下信息发送至 ahmed.f.gad@gmail.com,以便您的项目能被收录到文档中:
- 项目标题
- 简要描述
- 最好附上指向您项目的链接
更多联系方式请参阅“联系我们”部分。
PyGAD 生命周期
下图列出了 pygad.GA 类实例生命周期中的各个阶段。请注意,当所有代数完成,或者传递给 on_generation 参数的函数返回字符串 stop 时,PyGAD 将停止运行。

以下代码实现了所有回调函数,用于跟踪遗传算法的执行过程。每个回调函数都会打印其名称。
import pygad
import numpy
function_inputs = [4,-2,3.5,5,-11,-4.7]
desired_output = 44
def fitness_func(ga_instance, solution, solution_idx):
output = numpy.sum(solution*function_inputs)
fitness = 1.0 / (numpy.abs(output - desired_output) + 0.000001)
return fitness
fitness_function = fitness_func
def on_start(ga_instance):
print("on_start()")
def on_fitness(ga_instance, population_fitness):
print("on_fitness()")
def on_parents(ga_instance, selected_parents):
print("on_parents()")
def on_crossover(ga_instance, offspring_crossover):
print("on_crossover()")
def on_mutation(ga_instance, offspring_mutation):
print("on_mutation()")
def on_generation(ga_instance):
print("on_generation()")
def on_stop(ga_instance, last_population_fitness):
print("on_stop()")
ga_instance = pygad.GA(num_generations=3,
num_parents_mating=5,
fitness_func=fitness_function,
sol_per_pop=10,
num_genes=len(function_inputs),
on_start=on_start,
on_fitness=on_fitness,
on_parents=on_parents,
on_crossover=on_crossover,
on_mutation=on_mutation,
on_generation=on_generation,
on_stop=on_stop)
ga_instance.run()
根据 num_generations 参数设置的 3 个世代,输出如下:
on_start()
on_fitness()
on_parents()
on_crossover()
on_mutation()
on_generation()
on_fitness()
on_parents()
on_crossover()
on_mutation()
on_generation()
on_fitness()
on_parents()
on_crossover()
on_mutation()
on_generation()
on_stop()
示例
有关此示例的实现信息,请参阅 PyGAD 的文档。
import numpy
import pygad.cnn
train_inputs = numpy.load("dataset_inputs.npy")
train_outputs = numpy.load("dataset_outputs.npy")
sample_shape = train_inputs.shape[1:]
num_classes = 4
input_layer = pygad.cnn.Input2D(input_shape=sample_shape)
conv_layer1 = pygad.cnn.Conv2D(num_filters=2,
kernel_size=3,
previous_layer=input_layer,
activation_function=None)
relu_layer1 = pygad.cnn.Sigmoid(previous_layer=conv_layer1)
average_pooling_layer = pygad.cnn.AveragePooling2D(pool_size=2,
previous_layer=relu_layer1,
stride=2)
conv_layer2 = pygad.cnn.Conv2D(num_filters=3,
kernel_size=3,
previous_layer=average_pooling_layer,
activation_function=None)
relu_layer2 = pygad.cnn.ReLU(previous_layer=conv_layer2)
max_pooling_layer = pygad.cnn.MaxPooling2D(pool_size=2,
previous_layer=relu_layer2,
stride=2)
conv_layer3 = pygad.cnn.Conv2D(num_filters=1,
kernel_size=3,
previous_layer=max_pooling_layer,
activation_function=None)
relu_layer3 = pygad.cnn.ReLU(previous_layer=conv_layer3)
pooling_layer = pygad.cnn.AveragePooling2D(pool_size=2,
previous_layer=relu_layer3,
stride=2)
flatten_layer = pygad.cnn.Flatten(previous_layer=pooling_layer)
dense_layer1 = pygad.cnn.Dense(num_neurons=100,
previous_layer=flatten_layer,
activation_function="relu")
dense_layer2 = pygad.cnn.Dense(num_neurons=num_classes,
previous_layer=dense_layer1,
activation_function="softmax")
model = pygad.cnn.Model(last_layer=dense_layer2,
epochs=1,
learning_rate=0.01)
model.summary()
model.train(train_inputs=train_inputs,
train_outputs=train_outputs)
predictions = model.predict(data_inputs=train_inputs)
print(predictions)
num_wrong = numpy.where(predictions != train_outputs)[0]
num_correct = train_outputs.size - num_wrong.size
accuracy = 100 * (num_correct/train_outputs.size)
print("正确分类的数量:{num_correct}。".format(num_correct=num_correct))
print("错误分类的数量:{num_wrong}。".format(num_wrong=num_wrong.size))
print("分类准确率:{accuracy}%。".format(accuracy=accuracy))
更多信息
有多种资源可以帮助您开始构建卷积神经网络及其 Python 实现。
教程:在 Python 中实现遗传算法
要开始编写遗传算法代码,您可以查看题为 “在 Python 中实现遗传算法” 的教程,该教程可通过以下链接访问:
本教程 是基于该项目的早期版本编写的,但仍然是开始学习遗传算法编程的一个很好的资源。
教程:遗传算法简介
通过阅读题为 “使用遗传算法进行优化简介” 的教程来入门遗传算法,该教程可通过以下链接访问:
教程:在 Python 中构建神经网络
通过题为 “使用 NumPy 实现人工神经网络并分类 Fruits360 图像数据集” 的教程了解如何在 Python 中构建神经网络,该教程可通过以下链接访问:
教程:用遗传算法优化神经网络
通过题为 “使用遗传算法和 Python 优化人工神经网络” 的教程了解如何利用遗传算法训练神经网络,该教程可通过以下链接访问:
教程:用Python构建卷积神经网络
要开始编写遗传算法,您可以查看题为从零开始使用NumPy构建卷积神经网络的教程,该教程可通过以下链接访问:
本教程是基于该项目的早期版本编写的,但仍然是开始编码CNN的一个很好的资源。
教程:从全连接神经网络推导卷积神经网络
通过阅读题为逐步从全连接网络推导卷积神经网络的教程,您可以开始学习遗传算法。该教程可通过以下链接访问:
书籍:使用CNN进行深度学习的实用计算机视觉应用
您还可以查阅我的著作,即Ahmed Fawzy Gad《使用CNN进行深度学习的实用计算机视觉应用》。2018年12月,Apress出版社,ISBN 978-1-4842-4167-7,书中讨论了神经网络、卷积神经网络、深度学习、遗传算法等内容。
您可以通过以下链接找到该书:

引用PyGAD——BibTeX格式的引用
如果您使用了PyGAD,请考虑在关于PyGAD的论文中添加以下引用:
@misc{gad2021pygad,
title={PyGAD: 一个直观的遗传算法Python库},
author={Ahmed Fawzy Gad},
year={2021},
eprint={2106.06158},
archivePrefix={arXiv},
primaryClass={cs.NE}
}
联系我们
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。





