的 Notebook 地图、原理与训练方案)
机器学习深度学习【免费下载链接】pyprobmlPython code for Probabilistic Machine learning book by Kevin Murphy项目地址https://gitcode.com/gh_mirrors/py/pyprobml点击查看免费下载本篇以 pyprobml 仓库 notebooks/book1/14/README.md 为骨架系统梳理《Probabilistic Machine Learning》第 14 章 Neural networks for images 的 41 张配图与代码映射关系并深入讲解该章 17 个可运行 Notebook 的核心实现从 2D 卷积/交叉相关的数学原理、边缘检测、核参数学习到 LeNet、批归一化、ResNet、DenseNet 等经典架构以及 MNIST/CIFAR 上的多种训练方案PyTorch、TensorFlow 2、JAX/Flax、PyTorch Lightning。读完本文你将能按图索骥地找到每个知识点对应的可运行代码并理解其底层实现细节与训练超参数。章节定位图像 CNN 在概率机器学习书中的位置第 14 章是《Probabilistic Machine Learning》第 1 卷book1中专门讨论图像神经网络的章节主题覆盖卷积层与池化层的数学定义与实现从零构建 CNN 并训练图像分类模型现代架构ResNet、DenseNet与训练技巧批归一化、层归一化、Dropout、数据增强、多 GPU/TPU 训练历史脉络LeCun 1989 的原始 CNN 复现。在 pyprobml 仓库中该章的全部配套资源集中在 notebooks/book1/14/ 目录下包括 17 个 Notebook16 个可直接运行 1 个在supplementary/子目录与 1 个章节 README。测试方面仓库在 tests/test_notebooks.py 中对 Notebook 的导入与执行链路做了自动化校验可作为代码可运行性的佐证。配图与代码映射14.1–14.41 全表第 14 章 README 的核心是一张图号 → Notebook → 图片映射表。以下是完整映射关系图片资源位于书籍配套的 book1-figures 中不在本仓库内Notebook 列即为仓库内可复现对应图的代码文件| 图号 | 复现 Notebook仓库路径 | 图号 | 复现 Notebook仓库路径 | |--|--|--|--| | 14.1 | - | 14.2 | - | | 14.3 | - | 14.4 | - | | 14.5 | conv2d_jax.ipynb | 14.6 | - | | 14.7 | - | 14.8 | - | | 14.9 | conv2d_jax.ipynb | 14.10 | - | | 14.11 | - | 14.12 | - | | 14.13 | - | 14.14 | - | | 14.15 | - | 14.16 | - | | 14.17 | cnn_mnist_tf.ipynb | 14.18 | - | | 14.19 | - | 14.20 | - | | 14.21 | - | 14.22 | - | | 14.23 | - | 14.24 | - | | 14.25 | - | 14.26 | - | | 14.27 | - | 14.28 | - | | 14.29 | - | 14.30 | - | | 14.31 | - | 14.32 | - | | 14.33 | - | 14.34 | - | | 14.35 | - | 14.36 | - | | 14.37 | - | 14.38 | - | | 14.39 | - | 14.40 | - | | 14.41 | - | | |从源码结构可以推断README 明确把三张图的复现责任分配给两个 Notebook图 14.5 与 14.9卷积核可视化与卷积运算示意由 conv2d_jax.ipynb 复现图 14.17CNN 在 MNIST 上的训练曲线与预测可视化由 cnn_mnist_tf.ipynb 复现其余 38 张图未在仓库内绑定专属 Notebook属于书中直接排版插图。补充材料清单17 个可运行 Notebook 全景README 的第二个核心部分是 Supplementary material 表。结合仓库实际目录 notebooks/book1/14/完整的可用 Notebook 清单如下README 中指向外部 Colab 的条目已统一转换为仓库内相对路径| 主题 | 软件栈 | 仓库内 Notebook | |--|--|--| | 2D 卷积基础D2L 6.2 | PyTorch | conv2d_torch.ipynb | | 2D 卷积基础D2L 6.2 | JAX/Flax | conv2d_jax.ipynb | | LeNetD2L 6.5 | PyTorch | lenet_torch.ipynb | | LeNetD2L 6.5 | JAX/Flax | lenet_jax.ipynb | | MNIST 图像分类 CNN | TF2 | cnn_mnist_tf.ipynb | | CIFAR 图像分类 CNN | PyTorch | cnn_cifar_pytorch.ipynb | | CIFAR10 ResNetLightning/TPU | PyTorch Lightning | cifar10_cnn_lightning.ipynb | | 批归一化D2L 7.5 | PyTorch | batchnorm_torch.ipynb | | 批归一化D2L 7.5 | JAX/Flax | batchnorm_jax.ipynb | | 层归一化 | PyTorch | layer_norm_torch.ipynb | | 层归一化 | JAX/Flax | layer_norm_jax.ipynb | | 残差网络D2L 7.6 | PyTorch | resnet_torch.ipynb | | 残差网络D2L 7.6 | JAX/Flax | resnet_jax.ipynb | | 密集网络 DenseNetD2L 7.7 | PyTorch | densenet_torch.ipynb | | 密集网络 DenseNetD2L 7.7 | JAX/Flax | densenet_jax.ipynb | | 转置卷积D2L 13.10 | PyTorch | transposed_conv_torch.ipynb | | 转置卷积D2L 13.10 | JAX/Flax | transposed_conv_jax.ipynb | | 1989 年 LeCun CNN 带注释复现 | JAX/Flax | supplementary/lecun1989_with_commentary.ipynb |README 中还列出的其他主题多 GPU 训练、图像增强、ImageNet 分类器、迁移学习、Deep Dream、神经风格迁移指向外部教程未在仓库内保留对应 Notebook其中图像增强在 README 中指向 book1 第 19 章目录可在仓库 notebooks/book1/ 下按章检索。卷积的数学本质交叉相关、边缘检测与矩阵乘法conv2d_jax.ipynb以及对应的 conv2d_torch.ipynb是整个第 14 章的地基内容基于 D2L 6.2 节。它以最原始的双重循环实现了 2D 交叉相关cross-correlationdef corr2d(X: jnp.ndarray, K: jnp.ndarray) - jnp.ndarray: Compute 2D cross-correlation. h, w K.shape Y jnp.zeros((X.shape[0] - h 1, X.shape[1] - w 1)) for i in range(Y.shape[0]): for j in range(Y.shape[1]): Y Y.at[i, j].set(jnp.sum(X[i : i h, j : j w] * K)) return Y对 3x3 输入与 2x2 核K [[0,1],[2,3]]输出为[[19,25],[37,43]]PyTorch 版结果一致。注意 CNN 里卷积实际是交叉相关核不翻转这与数学卷积定义的区别是理解后面一切的基础。边缘检测核就是特征模板Notebook 构造了一个 6x8 的图片中间 4 列置 0 形成竖直条纹用 1x2 核K [[1.0, -1.0]]做交叉相关输出在1→0边界给出 1、在0→1边界给出 -1即竖直边缘检测器而对该图转置后应用同一核输出全为 0说明它检测不到水平边缘。这个实验直观展示了卷积核 手工设计的特征检测器这一核心思想。卷积即矩阵乘法Notebook 还演示了卷积的线性代数本质通过kernel2matrix把核 K 展开成 4x9 的稀疏矩阵 W使得W X.reshape(-1)与直接交叉相关结果完全一致用jnp.allclose/np.allclose断言验证。这一性质是理解现代 CNN 中 im2col 加速实现、以及转置卷积见后文的关键。用梯度下降学习核参数手工设计的核可以被学出来Notebook 定义了一个nn.Conv(1, kernel_size(1, 2), use_biasFalse)Flax 版PyTorch 版为nn.Conv2d(1, 1, kernel_size(1, 2), biasFalse)用边缘检测输出 Y 作为监督目标通过jax.value_and_grad 手动 SGD学习率 3e-2迭代 10 步损失从 19.368 降到 0.233学到的核逼近[[1.03, -0.93]]——正好是手工核[[1, -1]]的近似。这证明了卷积核是可学习的参数。多输入/多输出通道与 1x1 卷积多输入通道corr2d_multi_in对每个输入通道分别做交叉相关再求和。示例中 2 通道输入得到[[56,72],[104,120]]。多输出通道corr2d_multi_in_out把多组核的结果在通道维堆叠K形状为 (3,2,2,2) 时输出为 (3,2,2)。1x1 卷积corr2d_multi_in_out_1x1把输入 reshape 为 (c_i, h*w)、核 reshape 为 (c_o, c_i)用jnp.matmul完成——这与每个像素位置上对特征列做全连接变换完全等价。Notebook 用随机核验证了两条路径结果一致误差 1e-6。1x1 卷积因此常被用作跨通道的线性变换/通道压缩DenseNet 的 transition 层也用到见下文。池化pool2d(X, pool_size, mode)支持max与avg两种模式对 4x4 输入做 3x3 最大池化得到[[10,11],[14,15]]与 Flaxnn.max_pool/ PyTorchnn.MaxPool2d(3, padding0, stride1)的结果一致。池化通过空间降采样提供局部平移不变性并减少计算量。转置卷积上采样的卷积transposed_conv_jax.ipynb 与 transposed_conv_torch.ipynb 演示转置卷积transposed convolution即卷积的逆方向输入 2x2X[[0,1],[2,3]]、核K[[0,1],[2,3]]通过每个输入元素与核相乘后累加到输出对应区域Y[i:ih, j:jw] X[i,j]*K得到 3x3 输出[[0,0,1],[0,4,6],[4,12,9]]。PyTorch 版进一步验证用nn.ConvTranspose2d(1, 1, kernel_size2, biasFalse)并把核直接赋为 K输出与手写实现torch.allclose一致JAX 版则用jax.lax.conv_general_dilated核旋转 180 度做等价验证。转置卷积是生成模型如 VAE、GAN中从低分辨率特征图恢复高分辨率图像的常用手段。LeNet第一个现代 CNN 架构lenet_torch.ipynb含 lenet_jax.ipynb基于 D2L 6.5 复现 LeNet-5。模型以硬编码假设输入为 1x28x28Fashion-MNISTclass Reshape(torch.nn.Module): def forward(self, x): return x.view(-1, 1, 28, 28) net torch.nn.Sequential( Reshape(), nn.Conv2d(1, 6, kernel_size5, padding2), nn.Sigmoid(), nn.AvgPool2d(kernel_size2, stride2), nn.Conv2d(6, 16, kernel_size5), nn.Sigmoid(), nn.AvgPool2d(kernel_size2, stride2), nn.Flatten(), nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(), nn.Linear(120, 84), nn.Sigmoid(), nn.Linear(84, 10), )逐层打印形状可以看到特征图从 1x28x28 → 6x28x28 → 6x14x14 → 16x10x10 → 16x5x5 → 展平为 400 → 120 → 84 → 10 的完整降维过程。训练细节数据load_data_fashion_mnist(batch_size)用 torchvision 加载 Fashion-MNISTbatch_size256初始化对nn.Linear/nn.Conv2d使用xavier_uniform_优化SGDlr0.9, num_epochs10损失为nn.CrossEntropyLoss结果书中笔记本在 GPU 上的运行输出约 82% 训练准确率、0.82 测试准确率吞吐约 4.4 万 samples/sec在 cuda:0 上。Notebook 还封装了Animator实时绘制 train loss / train acc / test acc 三条曲线的 matplotlib 动画、try_gpu优先使用cuda:i否则退回 CPU、evaluate_accuracy_gpu等通用工具函数这套训练脚手架被本章后续多个 Notebook 复用。三种图像分类实战方案MNIST、CIFAR 与 LightningTF2 版MNIST 顺序式 CNNcnn_mnist_tf.ipynb 是图 14.17 的复现源也是 README 中唯一标注了图号的 TF2 Notebook。它用 KerasSequentialAPI 搭建经典小 CNNmodel models.Sequential() model.add(layers.Conv2D(32, (3, 3), activationrelu, input_shape(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activationrelu)) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activationrelu)) model.add(layers.Flatten()) model.add(layers.Dense(64, activationrelu)) model.add(layers.Dense(10, activationsoftmax))流程要点依赖probml_utils.mnist_helper_tfNotebook 中在缺失时自动pip install来下载 MNIST 并做可视化plot_dataset、find_interesting_test_images、plot_interesting_test_results数据 reshape 为 (60000, 28, 28, 1) / (10000, 28, 28, 1) 以符合input_shapemodel.compile(optimizeradam, losssparse_categorical_crossentropy, metrics[accuracy])训练 2 个 epoch笔记本运行输出显示epoch 0 训练损失 0.15、训练准确率 0.9532测试准确率 0.9871model.summary()显示 conv2d 输出 (None, 26, 26, 32)、320 个参数。PyTorch 版CIFAR 二分类与模型机制实验cnn_cifar_pytorch.ipynb 基于《Deep Learning With PyTorch》第 8 章把 CIFAR-10 缩减为二分类plane vs birdlabel_map {0: 0, 2: 1}。它的独特价值在于用大量小实验讲透 CNN 机制标准化的数据管线transforms.Normalize((0.4915, 0.4823, 0.4468), (0.2470, 0.2435, 0.2616))使用预计算的 RGB 通道均值/标准差卷积核几何nn.Conv2d(3, 16, kernel_size3)对 32x32 图输出 30x30无 padding加paddingkernel_size//2后输出保持 32x32。核权重形状为 (16, 3, 3, 3)nfeatures × nchannels × kernel × kernel手工设定核把权重填成 1/9 得到平均模糊滤波器填成[[-1,0,1],[-1,0,1],[-1,0,1]]得到竖直边缘检测器并用show_results对比输入输出最大池化nn.MaxPool2d(2)把特征图减半32x32 → 16x16首个 CNNNet类 2 个Conv3x3(pad1) tanh MaxPool2 2 个全连接层输入通道数/类别数均可配置因此后面直接复用于单通道 28x28 MNIST训练循环training_loop支持可选 L2 正则l2_regularizer参数对全部参数做p.pow(2).sum()SGD lr1e-2、50 epoch二分类训练损失从 0.577 降至约 0.25验证集准确率 88.65%模型保存/加载torch.save(model.state_dict(), data/birds_vs_airplanes.pt)后用load_state_dict恢复并用torch.testing.assert_allclose校验一致性Dropout 的正则化语义NetDropout展示训练态model.train()下两次前向结果不同随机丢弃np.allclose返回 False评估态model.eval()下确定返回 True——因为 dropout 状态继承自父nn.Module最终在完整 10 类 MNIST 上复用同一Netnhidden2020 epoch训练/测试准确率约 97.8%。PyTorch Lightning 版CIFAR10 ResNet18 GPU/TPUcifar10_cnn_lightning.ipynb 展示工程化训练框架是 README 补充材料表中唯一以 PyTorch Lightning 实现的项目硬件自适应通过USE_TPU开关选择 TPU安装torch_xla8 核或 GPUNUM_GPUS1AVAIL_GPUS/AVAIL_TPUS决定BATCH_SIZEGPU 512、TPU 4096、CPU 64与NUM_WORKERS数据增强开关DATA_AUG_TYPErnd时使用RandomCrop(32, padding4)RandomHorizontalFlip() ToTensor cifar10_normalization()来自pl_bolts测试集不做增强模型双选MODEL_TYPE可选simple来自 PyTorch 官方 CIFAR10 教程的 CNNConv5→MaxPool→Conv5→MaxPool→3 个全连接或resnettorchvision.models.resnet18(pretrainedFalse, num_classes10)并把首层改为Conv2d(3, 64, kernel_size3, stride1, padding1)、maxpool替换为nn.Identity()以适配 32x32 输入而非 ImageNet 的 224x224笔记本输出显示 ResNet18 约 11.2M 参数Lightning 封装LitCNN(LightningModule)用save_hyperparameters()记录lr0.05training_step/evaluate中计算F.log_softmaxF.nll_loss用torchmetrics.functional.accuracy统计准确率训练器配置Trainer(progress_bar_refresh_rate10, max_epochsMAX_EPOCHS, tpu_cores..., gpus..., loggerTensorBoardLogger(...), callbacks[LearningRateMonitor, ModelCheckpoint, EarlyStopping(val_acc, modemax)])checkpoint 保存在checkpoints/save_weights_onlyTrue, save_lastTrue断点续训LitCNN.load_from_checkpoint(checkpoints/last.ckpt)恢复模型并重新trainer.test结果笔记本运行输出的测试集准确率约 0.873、测试损失约 0.395并演示了%tensorboard --logdir lightning_logs/的日志查看方式。现代训练技巧批归一化与层归一化从零实现 BatchNorm 并接入 LeNetbatchnorm_torch.ipynb含 batchnorm_jax.ipynb基于 D2L 7.5 从零实现批归一化归一化语义全连接层沿 batch 维axis0逐特征计算均值/方差卷积层则沿 batch 与所有空间位置逐通道计算训练/推理双模式batch_norm(X, gamma, beta, moving_mean, moving_var, eps, momentum)用torch.is_grad_enabled()判断模式——训练时更新moving_mean/moving_var动量滑动平均推理时直接使用预计算统计量可学习参数BatchNorm层把 scalegamma初始化为 1、shiftbeta初始化为 0形状按num_dims取 (1, features) 或 (1, features, 1, 1)接入 LeNet在卷积/全连接层之后、激活函数之前插入 BNBatchNorm(6, num_dims4)、BatchNorm(120, num_dims2)等BN 的价值训练超参数为lr1.0, num_epochs10, batch_size256——比标准 LeNet 的lr0.9更激进README 注释说明BN 稳定了训练因此可以用更大的学习率。手写 BN 版得到 train acc 0.908 / test acc 0.860把模型替换为 PyTorch 内置nn.BatchNorm1d/BatchNorm2dC 实现更快后 test acc 提升到 0.876检查学到的参数net[1].gamma/net[1].beta显示每个通道学到的缩放与平移值如 gamma≈2.08、1.58…beta≈0.74、0.07…。层归一化与 BatchNorm 的对比实验layer_norm_jax.ipynb 与 layer_norm_torch.ipynb 用同一个 2x3 随机矩阵做最小对比BatchNorm沿 axis0batch 维归一化输出行内符号相反[[-1,1,1],[1,-1,-1]]LayerNorm沿 axis1特征维归一化输出按行标准化JAX 版输出如[[0.474, -1.391, 0.917],[1.414, -0.707, -0.707]]。两个 Notebook 均用手写 numpy 结果与框架层nn.BatchNorm(use_running_averageFalse, epsilon1e-6)/nn.LayerNorm()PyTorch 版nn.BatchNorm1d(D)/nn.LayerNorm(D)输出做allclose断言容差 1e-3验证实现等价。层归一化不依赖 batch 统计量因此不受小 batch 影响是 Transformer 等架构的默认选择。现代架构ResNet 与 DenseNetResNet残差块与恒等捷径resnet_torch.ipynb含 resnet_jax.ipynb基于 D2L 7.6class Residual(nn.Module): The Residual block of ResNet. def __init__(self, input_channels, num_channels, use_1x1convFalse, strides1): super().__init__() self.conv1 nn.Conv2d(input_channels, num_channels, kernel_size3, padding1, stridestrides) self.conv2 nn.Conv2d(num_channels, num_channels, kernel_size3, padding1) if use_1x1conv: self.conv3 nn.Conv2d(input_channels, num_channels, kernel_size1, stridestrides) else: self.conv3 None self.bn1 nn.BatchNorm2d(num_channels) ...关键设计残差块F.relu(self.bn2(self.conv2(F.relu(self.bn1(self.conv1(x)))))) self.conv3(x)——恒等捷径允许梯度直接回传缓解深层网络退化三种形态通道数不变Residual(3,3)输出保持 6x6仅变通道use_1x1convTrue输出 6x6x6同时降采样strides2输出 3x3——1x1 卷积用于维度对齐resnet_block每个 block 由 num_residuals 个残差块组成除首个 block 外块内第一个残差单元用use_1x1convTrue, strides2完成通道加倍空间减半完整 ResNet-18b17x7 conv stride2 BN ReLU 3x3 MaxPool stride2→ b2~b5通道 64→64→128→256→512每段 2 个残差块→ 全局平均池化 → 10 类全连接。对 224x224 输入打印各段输出形状64x56x56 → 128x28x28 → 256x14x14 → 512x7x7Fashion-MNIST 训练把 28x28 图 resize 到 96x96保证全局池化前为 3x3lr0.05, num_epochs10, batch_size256笔记本输出 test acc 0.924、吞吐 1364.5 examples/seccuda:0。DenseNet通道级联与 growth ratedensenet_torch.ipynb含 densenet_jax.ipynb基于 D2L 7.7conv_block按 BN→ReLU→Conv3x3 顺序组成与 ResNet 的conv→BN→激活顺序不同DenseBlock每个 conv-block 的输入是前面所有 conv-block 输出的通道级联。示例DenseBlock(2, 3, 10)3 通道输入经 2 个各 10 通道的 conv-block 后输出 23 通道3 10 10transition_blockBN → ReLU → Conv1x1 → AvgPool2d(2, 2)用 1x1 卷积压缩通道数、平均池化减半分辨率。示例 23→10 通道、8x8→4x4growth rate每个 conv-block 新增的通道数示例为 32称为增长率控制模型容量完整模型b1与 ResNet 相同 4 个 DenseBlock各 4 个 conv-block 3 个 transition BatchNorm2d ReLU AdaptiveMaxPool2d((1,1)) Flatten Linear(…, 10)。打印 96x96 输入的各段形状64x24x24 → DenseBlock 192x24x24 → transition 96x12x12 → …训练lr0.1, num_epochs10, batch_size256, resize96笔记本输出 test acc 0.886且注明训练速度明显慢于 ResNet通道级联导致计算量更大。历史复现LeCun 1989 原始 CNNFlaxsupplementary/lecun1989_with_commentary.ipynb 是基于 Flax 官方 Annotated MNIST 的带注释复现展示 1989 年论文中的原始 CNN与现代 CNN 的三个显著差异局部偏置而非共享偏置现代 CNN 同一特征图共享 bias而 1989 版每个位置的 bias 独立。Notebook 为此自定义LocalBias层bias self.param(bias, nn.initializers.zeros, bias_shape, jnp.float32)非规则连接H2 神经元只连接 12 个输入平面中的 8 个用 3 个独立卷积拼接实现自定义初始化variance_scaling(2.4**2 / 3, fan_in, uniform)复现论文的均匀初始化区间。其余工程细节同样完整MSE 损失标签映射到 ±1 的 one-hot、flax.training.train_state.TrainState管理参数与优化器状态optax.sgd, lr0.03、jax.value_and_grad计算梯度、jax.jit编译 train/eval 步、MNIST 下采样到 16x16 并归一化到 [-1,1]。参数形状断言逐一核对了每层张量如H1w kernel (5,5,1,12)、H3 (4*4*12, 30)、Out (30, 10)。训练 23 个 epoch 后约 95% 测试准确率——对 1989 年的网络而言已是里程碑式结果Notebook 运行输出显示 epoch 1 即达 88.29%。运行环境与依赖运行本章 Notebook 前需准备Jupyter/Colab所有 Notebook 均可直接打开运行多数 Notebook 在依赖缺失时通过%pip install -qq自动安装如flax、torch、torchvision、pytorch_lightning、lightning-bolts、torchmetrics、probml-utils框架版本从 Notebook 内嵌输出看PyTorch 版基于 1.8 系 APInn.Conv2d、nn.MaxPool2d、nn.BatchNorm1d/2d、nn.LayerNorm、nn.ConvTranspose2d、torchvision.datasets.FashionMNIST/CIFAR10/MNISTTF 版要求 TensorFlow ≥ 2.0Notebook 中有assert tf.__version__ 2.0JAX 版依赖jax/jax.numpy与flax.linen硬件训练部分需要 GPU各 Notebook 用try_gpu()自动选择cuda:iTF 版检测tf.config.list_physical_devices(GPU)无 GPU 时在 Colab 中可切换 Runtime 硬件加速器Lightning 版还支持 TPU需在笔记本设置中启用 TPU 并安装torch_xla数据下载Fashion-MNIST/CIFAR-10/MNIST 首次运行会从官方源自动下载到本地data/目录Notebook 中downloadTrue依赖清单仓库根目录的 requirements.txt、requirements-dev.txt 提供了完整依赖与开发依赖参考。学习路径建议结合 README 的编排顺序与源码实现推荐按以下路径学习本章先跑 conv2d_jax.ipynb或 torch 版建立交叉相关/卷积核/多通道/池化的基础直觉并对照图 14.5 与 14.9用 lenet_torch.ipynb 理解第一个完整 CNN 的组装与训练脚手架通过 cnn_mnist_tf.ipynb图 14.17对比 Keras 顺序式 API 的写法再用 cnn_cifar_pytorch.ipynb 深入卷积核、池化、Dropout 的机制实验依次学习 batchnorm_torch.ipynb、resnet_torch.ipynb、densenet_torch.ipynb 三个现代技巧/架构 Notebook体会手工实现 → 内置层替换 → 完整模型的递进节奏工程化场景参考 cifar10_cnn_lightning.ipynbcheckpoint、EarlyStopping、TensorBoard、TPU生成模型方向的读者可进一步研究 transposed_conv_torch.ipynb 与 layer_norm_torch.ipynb最后用 supplementary/lecun1989_with_commentary.ipynb 完成一次考古对比 1989 年与今日 CNN 设计哲学的差异。每份 Notebook 都自带可验证的运行输出损失曲线、准确率、形状打印配合 tests/test_notebooks.py 的自动化检查可以边改边跑、即时对照是理解图像卷积神经网络全链路最直接的代码级教材。赞分享机器学习深度学习【免费下载链接】pyprobmlPython code for Probabilistic Machine learning book by Kevin Murphy项目地址https://gitcode.com/gh_mirrors/py/pyprobml点击查看免费下载相关推荐30行代码实现图像识别CNN卷积神经网络原理与实战30行代码实现图像识别CNN卷积神经网络原理与实战 你还在为理解卷积神经网络Convolutional Neural NetworkCNN的复杂原理而头机器学习深度学习强化学习卷积神经网络CNN实战图像识别从入门到精通卷积神经网络CNN实战图像识别从入门到精通 本文全面解析卷积神经网络 CNN 在图像识别领域的实战应用从基础架构设计、参数配置到MNIST手写数字识别的完整示例工程教程3D打印机怎么做好Marlin固件稳定性测试一篇讲透的避坑指南3D打印机怎么做好Marlin固件稳定性测试一篇讲透的避坑指南 Marlin 是 3D 打印机领域装机量最大的开源固件同时支持 8 位和 32 位主控。Ma智能硬件嵌入式固件物联网上一篇Windows平台终极实时屏幕翻译工具完整指南打破语言障碍的智能解决方案下一篇DXVK跨平台游戏渲染加速3步让Windows游戏在Linux上流畅运行创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考