用 PyTorch 复现 AlexNet
这篇把 AlexNet 用到五分类花卉数据集上。流程和前面的 LeNet Demo 相同,只是多了数据集划分,模型也更深:准备 ImageFolder 目录、定义网络、训练并保存最优权重,最后预测单张图片。 我在全连接层使用 2048 个节点,而不是原论文的 4096 个节点。这样能减少本地显存占用,所以它是适合练习的 AlexNet 变体,不是逐参数复刻论文。 准备数据集数据集下载地址:http://download.tensorflow.org/example_images/flower_photos.tgz 原始目录中每个子目录代表一个类别: 1234567flower_data/ flower_photos/ daisy/ dandelion/ roses/ sunflowers/ tulips/ 下面的脚本把 10% 图片随机划到验证集。它会重新创建 train 和 val 目录,运行前不要在这两个目录里放其他文件。 123456789101112131415161718192021222324252627282930313233343...
AlexNet 论文阅读笔记
ImageNet Classification with Deep Convolutional Neural Networks 是我读 AlexNet 时的原始材料,另参考了这份中文翻译。这篇只记我真正想带走的几个设计,不再把论文内容逐段搬过来。 ReLU 为什么重要论文用 CIFAR-10 做了一个很直观的对比:在达到相同训练误差时,使用 ReLU 的网络比使用 tanh 的网络快很多。f(x) = max(0, x) 的计算简单,正区间也不会像 sigmoid、tanh 那样进入饱和区。对当时更深、更大的网络来说,训练速度不是小优化,而是模型能不能训出来的问题。 现在 ReLU 已经很常见,容易让人低估这一步在 2012 年的意义。AlexNet 并不是第一个提出 ReLU 的工作,但它证明了 ReLU 放进大规模 CNN 后确实有效。 双 GPU 结构是硬件条件留下的痕迹训练使用的 GTX 580 只有 3 GB 显存,作者把通道分到两块 GPU 上。大多数卷积层只读取同一块 GPU 的上一层特征图,第三个卷积层会读取两边的全部特征图,形成一次跨 GPU 信息交换。 所以结...
AlexNet 网络结构
这篇主要拆 AlexNet 的网络结构。AlexNet 比 LeNet 更深,重点不只是卷积层数量变多,还包括 ReLU、Dropout、重叠池化以及当时为了训练大模型采用的双 GPU 结构。 AlexNet 是 2012 年 ILSVRC(ImageNet Large Scale Visual Recognition Challenge)竞赛的冠军网络,分类准确率由传统方法的 70%+ 提升到 80%+。它由 Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 提出。也是从那之后,深度学习在计算机视觉领域开始迅速发展。 注:原论文使用了两块 GPU,所以网络结构图被画成上下两块。 Dropout 位于全连接部分,训练时会随机屏蔽一部分神经元,用来缓解过拟合。下面从 Conv1 开始逐层计算尺寸。 结构分析Conv1原论文使用两块 GPU 并行计算,结构图中的上下两组不是两个串联网络,而是通道被分配到两块 GPU 上。 输入:input_size = [224, 224, 3] 卷积层: kernels ...
用 PyTorch 和 LeNet 完成 CIFAR-10 图像分类
这篇记录一次完整的图像分类练习:用 PyTorch 定义一个 LeNet 风格的网络,在 CIFAR-10 上训练,再加载权重预测一张图片。代码按 2022 年的教程环境整理,但核心 API 现在仍然通用。 CIFAR-10 的图片是 32 x 32 的 RGB 图像,共有 10 个类别。它比 MNIST 稍微复杂一些,正好可以用来观察彩色图像经过两次卷积和池化后,尺寸是怎样变化的。 参考资料: PyTorch 官方 CIFAR-10 教程 PyTorch 官方中文文档镜像 LeNet 相关视频 目录结构12345project/├── model.py├── train.py├── predict.py└── data/ 第一次运行 train.py 时,CIFAR-10 会下载到 data 目录。Windows 下先把 num_workers 设为 0,确认能运行后再考虑增加数据加载进程。 定义模型:model.py123456789101112131415161718192021222324252627282930import torchimport torch.nn...
PyTorch 安装记录
这是我在 2022 年配置 Windows、Conda 和 CUDA 环境时留下的记录。具体版本已经过时,今天安装时应以 PyTorch 官方安装页生成的命令为准。下面的 CUDA 11.7 命令只用于还原当时的环境。 视频教程环境配置 Anaconda 的 base 环境当然能跑,但项目一多就容易发生依赖冲突。我现在更倾向于每个项目建一个独立环境。 相关链接CUDA:https://developer.nvidia.com/zh-cn/cuda-toolkit cuDNN:https://developer.nvidia.com/rdp/cudnn-archive PyTorch:https://pytorch.org/ PyTorch 官方安装页:https://pytorch.org/get-started/locally/ 当时使用的版本CUDA: 1https://developer.nvidia.com/cuda-11-7-1-download-archive cuDNN: 1https://developer.nvidia.com/compute/cudnn/se...
LeNet 网络结构研读
LeNet 是很适合入门 CNN 的模型:层数不深,卷积、池化、全连接都能看到,而且每一层尺寸变化可以手算。读这篇时重点关注两件事:一是特征图尺寸怎么变化,二是 C3 层为什么不是完全连接。 论文原文下载 《Gradient-Based Learning Applied to Document Recognition》 我从论文里读到的内容使用梯度下降算法的多层网络能够从大量样本中学习到复杂、高维、非线性的映射关系,这使得它们能够用于图像识别任务。在传统的模式识别模型中,手工设计的特征提取器用于从输入数据中提取相关信息并且消除不相关的变量。然后用一个可训练的分类器将结果特征向量分类成对应类别。在该方案中,一个标准的、全连接的多层网络用于当作分类器。一个更有意思的模式是特征提取器能够进行自我学习。在该字符识别任务中,原始输入的图像即可用于特征提取及分类(标准大小的图像)。虽然可以通过普通的全连接前馈网络成功完成字符识别等任务,但在部分方面仍存在问题。 第一,图像比较大,通常包含几百个像素(pixels)。第一层包含上百个隐藏神经元的全连接层,会包含成千上万的权重。如此大量的参数...
我和对象玩《贪吃蛇大作战》时的一点观察
对象很喜欢《贪吃蛇大作战》,我陪她玩了一阵。起初我觉得它只是把经典贪吃蛇换成了多人对战,玩久后才发现,简单操作、短局时长和社交展示被组合得很熟练。这不是严格的产品分析,只是我当时作为普通玩家留下的一些观察。 游戏操作它采用常见的 .io 风格玩法,但“.io”在这里更像一种类型称呼,并不代表游戏一定由网页移植而来。左侧摇杆控制方向,右侧负责加速和道具。吃掉地图上的粒子可以增长身体,让对手撞上自己的身体则完成击杀。 对象不喜欢操作复杂的游戏,却很快就能掌握这套规则。它的门槛确实低,但加速、走位和预判又给 PvP 留出了一些操作空间。 游戏模式实际上分为两类: 人机模式(无尽模式及其衍生) PvP模式(团战模式,击杀模式) 人机模式适合随手玩一局,PvP 模式则更依赖走位和配合。每种模式都配有排行榜,给重复游玩提供了一个直接目标。 运营思路我当时看到的商业化方式主要有广告、皮肤与击杀效果,以及礼物、Show 值、魅力值一类社交展示。免费玩家用观看广告换道具,付费内容则集中在外观和排行榜。它没有直接改变基础规则,但展示系统会持续提醒玩家消费。 游戏弊端让我不太舒服的问题主要出现在...
神经网络入门学习资源
这份清单是我刚开始学神经网络时慢慢攒下来的。现在回头看,里面有些工具已经不再活跃,但用来理解网络结构仍然有参考价值。我的使用顺序很简单:先看视频建立整体概念,遇到公式和代码问题再翻笔记,最后用可视化工具核对每一层的输入输出。 视频课 霹雳吧啦Wz基础教程 刘二大人 博客笔记 CSDN神经网络 红色石头 吴恩达笔记 可视化部分资料摘自数据studio,其余为自行收集。可视化工具不一定都要用,初学阶段优先看 NN-SVG、TensorBoard 和 CNN Explainer 就够了。 1. PlotNeuralNet使用 LaTeX 绘制神经网络,适合生成论文风格的结构图:https://github.com/HarisIqbal88/PlotNeuralNet FCN-8模型 overleaf上Latex代码:https://www.overleaf.com/read/kkqntfxnvbsk FCN-32模型 overleaf上Latex代码:https://www.overleaf.com/read/wsxpmkqvjnbs Holistically-Nested ...
CNN 基础:从卷积到池化
这篇笔记主要解决一个问题:为什么图像任务不直接用全连接网络,而要引入卷积。阅读时可以把重点放在三个概念上:卷积核负责提取局部特征,padding 控制边缘信息和输出尺寸,stride 控制采样步幅。 计算机视觉 图像分类(Image Classification) 目标识别(Object detection) 神经风格转换(Neural Style Transfer) 使用传统神经网络处理机器视觉的一个主要问题是输入层维度很大。如果图片尺寸较大,例如一张1000 x 1000 x 3 的图片,神经网络输入层的维度将达到 300 万,使得网络权重 W 非常庞大。这样会造成两个后果:一是网络结构复杂,数据量相对不够时容易过拟合;二是内存和计算量都会变大。解决这一问题的方法就是使用卷积神经网络(CNN)。 CNN 的思路可以理解为:利用图像的局部相关性和空间结构,减少全连接带来的大量冗余参数。也就是说,模型不再让每个像素都和所有神经元连接,而是用卷积核在局部区域滑动提取特征。这样既降低参数量,也更符合图像处理的直觉。 卷积操作:以边缘检测举例(Edge Detection) 图片边...







