深度学习里程碑:ResNet(残差网络)从理论到实战全解析

深度学习里程碑:ResNet(残差网络)从理论到实战全解析

目录

### 文章目录

  • [深度学习里程碑:ResNet(残差网络)从理论到实战全解析](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [目录](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [@[toc]](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [1. 引言:为什么我们需要 ResNet?](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [1.1 常见误区与调试技巧](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [2. 核心原理:残差学习与恒等映射](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [2.1 为什么要相加?](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [2.2 拓展概念:为什么叫"残差"?](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [3. 代码实现:构建一个残差块](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [3.1 正面示例:标准 BasicBlock (PyTorch)](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [3.2 错误实例:相加位置不对](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [4. 项目实战:基于 ResNet18 的病理图像分类](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [4.1 实战步骤](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [4.2 训练建议](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [5. 高级使用技巧:性能压榨](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [5.1 ResNet-D 改进版](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [5.2 混合精度训练 (Mixed Precision)](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [6. 实际工作中的应用建议](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [6.1 什么时候不该用 ResNet?](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [6.2 迁移学习技巧](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)
  • [7. 总结](#文章目录 深度学习里程碑:ResNet(残差网络)从理论到实战全解析 目录 @[toc] 1. 引言:为什么我们需要 ResNet? 1.1 常见误区与调试技巧 2. 核心原理:残差学习与恒等映射 2.1 为什么要相加? 2.2 拓展概念:为什么叫“残差”? 3. 代码实现:构建一个残差块 3.1 正面示例:标准 BasicBlock (PyTorch) 3.2 错误实例:相加位置不对 4. 项目实战:基于 ResNet18 的病理图像分类 4.1 实战步骤 4.2 训练建议 5. 高级使用技巧:性能压榨 5.1 ResNet-D 改进版 5.2 混合精度训练 (Mixed Precision) 6. 实际工作中的应用建议 6.1 什么时候不该用 ResNet? 6.2 迁移学习技巧 7. 总结)

1. 引言:为什么我们需要 ResNet?

在 2015 年之前,深度学习界普遍认为"网络越深,效果越好"。然而,当研究人员尝试将网络堆叠到 20 层甚至 50 层时,发现准确率反而下降了。这并不是由于过拟合,而是退化问题(Degradation Problem)

1.1 常见误区与调试技巧

  • 错误实例 :认为增加层数后损失函数(Loss)升高是因为梯度消失。
    • 纠正:在现代网络中,由于有了 Batch Normalization,梯度消失已得到缓解。深层网络 Loss 高主要是因为网络太难优化,无法学到恒等映射。
  • 调试技巧:如果你发现训练集上的 Loss 竟然比浅层网络还要高,那么优先考虑引入残差连接,而不是盲目增加学习率。

2. 核心原理:残差学习与恒等映射

ResNet 的核心在于残差块(Residual Block)。其数学表达为:
y = F ( x , { W i } ) + x y = F(x, \{W_i\}) + x y=F(x,{Wi})+x

2.1 为什么要相加?

传统的网络试图学习映射 H ( x ) H(x) H(x),而 ResNet 试图学习 F ( x ) = H ( x ) − x F(x) = H(x) - x F(x)=H(x)−x。当 F ( x ) = 0 F(x) = 0 F(x)=0 时,网络实现了恒等映射,保证了深层网络的性能至少不会比浅层网络差。

2.2 拓展概念:为什么叫"残差"?

"残差"在统计学中指观测值与预测值之间的差。在 ResNet 中,它指代的是输入 x x x 与理想映射 H ( x ) H(x) H(x) 之间的差异。通过学习这个"差值",优化难度大幅降低。


3. 代码实现:构建一个残差块

3.1 正面示例:标准 BasicBlock (PyTorch)

python 复制代码
import torch
import torch.nn as nn

class BasicBlock(nn.Module):
    def __init__(self, in_channels, out_channels, stride=1):
        super(BasicBlock, self).__init__()
        self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1, bias=False)
        self.bn1 = nn.BatchNorm2d(out_channels)
        self.relu = nn.ReLU(inplace=True)
        self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=False)
        self.bn2 = nn.BatchNorm2d(out_channels)
        
        # Shortcut 连接:如果输入输出维度不一致,需要用 1x1 卷积对齐
        self.shortcut = nn.Sequential()
        if stride != 1 or in_channels != out_channels:
            self.shortcut = nn.Sequential(
                nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride, bias=False),
                nn.BatchNorm2d(out_channels)
            )

    def forward(self, x):
        identity = self.shortcut(x)
        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)
        out = self.conv2(out)
        out = self.bn2(out)
        out += identity  # 残差相加
        out = self.relu(out)
        return out

3.2 错误实例:相加位置不对

  • 现象 :将 out += identity 放在 self.relu(out) 之后。
  • 结果:这样做会导致相加后的结果永远是正数,破坏了残差学习的数学性质,模型收敛速度会变慢。

4. 项目实战:基于 ResNet18 的病理图像分类

假设我们要处理医疗影像数据集 PathMNIST,识别 9 类组织切片。

4.1 实战步骤

  1. 数据预处理:由于 ResNet 默认输入是 224x224,而 PathMNIST 是 28x28,我们需要调整 Resize 或修改第一层卷积。
  2. 模型初始化:建议加载预训练权重,但修改分类头。
python 复制代码
from torchvision import models

model = models.resnet18(pretrained=True)
# 修改全连接层以适配 9 分类任务
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 9)

# 调试技巧:查看参数量
print(f"Total parameters: {sum(p.numel() for p in model.parameters())}")

4.2 训练建议

  • Loss 选择 :医疗图像常有类别不平衡,建议使用 Weighted CrossEntropy
  • 优化器 :对于 ResNet,SGD + Momentum 往往比 Adam 能获得更高的最终准确率,尽管 Adam 收敛更快。

5. 高级使用技巧:性能压榨

5.1 ResNet-D 改进版

在实际工业界,我们常使用 ResNet-D 结构。它在 Shortcut 通道使用 AvgPool 替代 Stride=2Conv,能够减少信息丢失。

5.2 混合精度训练 (Mixed Precision)

ResNet 结构非常适合使用 FP16 训练。

python 复制代码
from torch.cuda.amp import autocast, GradScaler

scaler = GradScaler()
with autocast():
    output = model(input)
    loss = criterion(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
  • 效果:在不损失精度的情况下,显存占用降低 40%,速度提升 2x。

6. 实际工作中的应用建议

6.1 什么时候不该用 ResNet?

  • 端侧设备 :如果你的模型要部署在低算力手机或嵌入式芯片,请优先选择 MobileNetV3ShuffleNet。ResNet 的计算量对于移动端依然偏重。
  • 超轻量级任务:如果特征非常简单,残差连接可能导致过度拟合。

6.2 迁移学习技巧

在工业级项目(如质检、安防)中,千万不要从零开始训练

  1. 先冻结 ResNet 的前两层(提取通用特征)。
  2. 用大容量数据集(如 ImageNet)的权重进行 Warm-up。
  3. 最后以极低的学习率全量微调。

7. 总结

ResNet 不仅仅是一个网络结构,它更是一种设计思想:通过 Shortcut 连接,让梯度在深层网络中"穿梭"自如。时至今日,无论是 Transformer 中的 Residual Connection,还是检测算法中的 Backbone,ResNet 的影子无处不在。


相关推荐
chem41112 小时前
玩客云 边缘AI模型 本地搭建部署 llama.cpp qwen
linux·人工智能·llama
清 晨2 小时前
TikTok Shop 跨境卖家最新合规与增长应对:从“内容冲量”升级为“商品与履约可控”
大数据·人工智能·跨境电商·tiktok·营销策略
轴测君2 小时前
MobileNet V1
人工智能·pytorch·笔记
ASS-ASH2 小时前
霸王色霸气的本质概括分析
人工智能·python·机器学习·大脑·脑电波
bst@微胖子2 小时前
LlamaIndex数据准备 + Hugging Face模型微调 + LlamaIndex RAG集成实现企业产品知识库微调
人工智能·机器学习
ValidationExpression3 小时前
学习:词嵌入(Word Embedding / Text Embedding)技术
python·学习·ai
CoCo的编程之路3 小时前
从“手写UI”到“智能生成”的工具深度评测
人工智能·ai编程·comate·智能编程助手·文心快码baiducomate
liliangcsdn3 小时前
如何使用lambda对python列表进行排序
开发语言·python
YH12312359h3 小时前
YOLOv8_PST模型玉米生长阶段自动识别与分类
人工智能·yolo·分类