pytorch——从核心特性到多模态与相机系统优化的实践

导言:博学而约取,厚积而薄发。

PyTorch深度解析:从多模态大模型到相机3A算法的技术实践与创新

作为一名正在冲刺校招的大四学生,我在刷牛客算法题、啃C++技术栈、整理八股笔记的过程中发现:深度学习框架不再是“科研大佬专属”——PyTorch的灵活设计能帮我把算法题思路快速落地成模型,其接口逻辑C++的面向对象思想异曲同工,甚至很多校招八股考点(如自动求导、模型部署)都能通过实战吃透。本文是我结合课程项目、校招备考和算法刷题经历,对PyTorch的深度总结,既有核心技术解析,也藏了我踩过的坑和备考干货,适合和我一样的学生党参考。

一、PyTorch核心特性:从灵活性到高效性的技术跃迁

PyTorch最打动我的点,是它“像写C++结构体一样灵活定义模型,像做算法题一样调试逻辑”的特性。作为习惯了C++静态编译的学生,我最初担心动态框架会“逻辑混乱”,但实际用下来发现:它把“研发效率-运行性能-校招考点”完美串联了——比如动态计算图的调试技巧是校招八股常问,张量运算和算法题的矩阵操作一脉相承,而生态工具链刚好覆盖我做课程项目的全流程。

1.1 动态计算图的进化:编译优化与动态性的兼容

动态计算图是我入门PyTorch时的“最大惊喜”,也帮我吃透了校招常考的“静态图vs动态图”八股考点。刚学的时候我用C++的思维去套,总觉得“逐行执行会慢”,直到做课程设计时踩了个坑:用静态图框架写ResNet时,因为少定义一个激活函数调了3小时,而PyTorch的动态图让我能逐行打印张量形状,10分钟就定位到问题。

PyTorch 2.0的
torch.compile
更让我惊艳——之前做“图像分类竞赛”时,模型推理慢得没法提交,用它编译后速度提升40%,而且不用改一行原有代码(这点对刷算法题出身的我太友好了,不用重构逻辑)。其核心逻辑其实和算法题的“预计算优化”很像:用
torch._dynamo
提前捕获重复执行的代码块,再交给后端优化,就像我们刷动态规划题时提前缓存中间结果。

例如,对ResNet模型进行编译优化后,在GPU上的推理速度可提升30%-50%,且无需修改原有动态图代码:



import torch
import torchvision.models as models
 
# 加载预训练模型
model = models.resnet50(pretrained=True).eval()
# 编译模型(自动优化计算图)
compiled_model = torch.compile(model)
 
# 测试性能
input_tensor = torch.randn(16, 3, 224, 224).cuda()
# 编译后推理(首次执行包含编译过程,后续执行复用优化结果)
with torch.no_grad():
    for _ in range(100):
        output = compiled_model(input_tensor)

这种“动态调试+静态优化”的模式,完全适配学生的学习和项目场景:刷算法题时用动态图快速验证思路,做课程项目时用编译优化提升性能,校招面试时还能结合这个点讲“框架选型逻辑”——这也是我整理八股时总结的“加分回答模板”。

我的C++视角感悟

作为C++学习者,我发现PyTorch的张量设计和C++的数组封装逻辑很像:比如
torch.Tensor

view
方法对应C++的指针重定向(不拷贝数据),
clone
对应深拷贝。这种对比学习法帮我同时吃透了两门技术,校招面字节时被问到“PyTorch张量和C++数组的区别”,我就用这个思路回答,面试官很认可。

1.2 张量计算体系:从基础运算到异构计算适配

张量是PyTorch的“基石”,也是校招八股的高频考点。我最初把它当成“高级数组”,直到刷牛客上的“矩阵快速幂”题时发现:PyTorch的张量运算能直接复用算法题思路,而且比手写C++矩阵乘法快10倍(还不用处理内存泄漏)。除了基础运算,这三个高阶优化是我做项目和备考时总结的“核心考点”:

混合精度计算:通过
torch.cuda.amp
模块支持FP16/FP32混合精度训练,在保证模型精度的前提下,将显存占用降低50%以上,训练速度提升20%-30%,尤其适用于多模态大模型等显存密集型任务。

分布式张量:借助
torch.distributed

torch.distributed.nn
实现张量的分布式拆分与聚合,支持数据并行、模型并行与流水线并行等多种分布式训练模式,可适配千卡级集群的大规模训练需求。

稀疏张量支持:通过
torch.sparse
模块
提供稀疏张量运算,针对多模态模型中大量冗余的特征参数,可通过稀疏化处理降低存储成本与计算开销。

1.3 生态系统升级:从单模态工具到多模态全链路支持

PyTorch的生态对学生党太友好了——不用自己造轮子,就能把课程项目从“跑通”做到“拿奖”。我整理了一份“学生党常用工具链清单”,结合算法题、C++和八股考点做了标注,表格里的“我的使用场景”都是真实项目经历:

技术环节

核心工具

多模态适配能力

数据处理

TorchVision

Torchaudio     TorchText

做“图文检索课程设计”时,用TorchVision加载图像、Torchaudio处理音频,配合自己写的C++数据清洗脚本,3天就搭好数据集;牛客上的“多模态分类题”也能用这些工具快速预处理

模型构建

Hugging Face Transformers Fairscale

Hugging Face有现成的CLIP模型,我基于它改造成课程项目;写模型时参考C++的类继承思想,自定义跨模态模块,面试时被问到“如何设计自定义层”就举这个例子

训练优化

PyTorch Lightning DeepSpeed

用PyTorch Lightning封装训练循环,像写算法题模板一样复用代码;刷牛客“模型优化题”时,用混合精度训练解决显存不足问题,这也是校招八股常考的“显存优化技巧”

部署推理

TorchScript、ONNX

PyTorch Mobile

校招面试常问“如何部署PyTorch模型”,我用ONNX把课程项目模型导出,再用C++写推理代码,完美结合两大技术栈;PyTorch Mobile的量化工具帮我把模型部署到手机端做演示,加分不少

二、PyTorch在多模态大模型优化中的深度实践

多模态大模型是我今年校招的“重点备考方向”,也是课程项目的热门选题。作为学生,我没法接触工业级数据,但用PyTorch+公开数据集就能复现核心逻辑。其核心挑战“模态异质性”,其实和牛客上的“多条件排序题”思路很像——都是找到不同维度的“统一衡量标准”。下面是我结合课程项目和八股笔记整理的实战方案。

2.1 模态对齐:从对比学习到跨模态注意力机制

模态对齐的本质是构建统一的语义空间,使不同模态的特征具有可比较性。目前主流的对齐策略可分为三种范式,PyTorch均能通过模块化设计高效实现:

晚期融合(独立编码+特征对齐):这是CLIP模型采用的核心策略,通过独立的图像编码器(ViT/ResNet)与文本编码器(Transformer)分别提取特征,再通过对比损失实现语义对齐。PyTorch的
nn.Transformer

torchvision.models
模块可快速复现该架构,且支持自定义损失函数优化对齐效果。

早期融合(原始信号混合编码):将图像块与文本Token在输入层拼接,通过统一编码器处理。例如将256×256图像编码为16×16的视觉Token,与文本Token拼接后输入Transformer。PyTorch的
torch.nn.Embedding

nn.Conv2d
可实现多模态Token
的统一编码,配合
torch.cat
完成模态混合。

中期融合(层次化交叉注意力):BLIP模型采用的进阶策略,在编码器中间层通过多轮交叉注意力实现模态交互。PyTorch可通过自定义交叉注意力模块实现这一逻辑,例如在文本编码器与图像编码器的中间层插入双向注意力交互:



import torch
import torch.nn as nn
 
class CrossAttention(nn.Module):
    def __init__(self, d_model, nhead):
        super().__init__()
        # 文本到图像的交叉注意力
        self.text2img_attn = nn.MultiheadAttention(d_model, nhead, batch_first=True)
        # 图像到文本的交叉注意力
        self.img2text_attn = nn.MultiheadAttention(d_model, nhead, batch_first=True)
        self.norm = nn.LayerNorm(d_model)
 
    def forward(self, text_feat, img_feat):
        # 文本特征引导图像特征优化
        img_attn, _ = self.text2img_attn(img_feat, text_feat, text_feat)
        img_feat = self.norm(img_feat + img_attn)
        # 图像特征引导文本特征优化
        text_attn, _ = self.img2text_attn(text_feat, img_feat, img_feat)
        text_feat = self.norm(text_feat + text_attn)
        return text_feat, img_feat
 
# 中期融合示例:2轮交叉注意力交互
cross_attn = CrossAttention(d_model=512, nhead=8)
text_feat = torch.randn(32, 20, 512)  # [batch, text_len, dim]
img_feat = torch.randn(32, 16, 512)   # [batch, img_patches, dim]
for _ in range(2):
    text_feat, img_feat = cross_attn(text_feat, img_feat)

我做“图文检索课程设计”时,先试了晚期融合(最快跑通),后来改成中期融合提升精度,最终拿了课程A。三种策略的选型技巧,我总结成了校招面试能直接用的“答题框架”:

赶deadline/做原型:选晚期融合,复用预训练模型,像搭积木一样快

追求精度/做竞赛:选中期融合,交叉注意力的代码逻辑和C++的双向链表处理很像,理解起来不费劲

小样本场景:早期融合风险高,不建议学生党轻易尝试(我踩过坑,数据量不够时精度反而下降)

2.2 模型适配:参数高效微调的技术选型与实践

“参数高效微调”是校招八股的“高频难点”,也是学生党做项目的“刚需”——我们的电脑显存有限,全量微调大模型根本跑不动。我结合牛客上“空间优化题”的思路,总结了三种方案的实战选型:比如用LoRA微调CLIP时,显存占用从16G降到4G,刚好能在我的笔记本上跑。

LoRA(低秩适应):在Transformer的注意力层插入低秩矩阵,仅训练秩矩阵参数(通常占总参数的0.1%-1%)。适用于图文分类、检索等判别式任务,前文已给出CLIP模型的LoRA适配示例,其优势是训练稳定、显存占用低。

Prefix Tuning(前缀调优):在输入序列前添加可训练的前缀Token,冻结模型主体参数。适用于文本生成、图文生成等生成式任务,PyTorch的
nn.Parameter
可快速构建可训练前缀:



from transformers import CLIPTextModel
 
class PrefixTuningCLIP(nn.Module):
    def __init__(self, model_name, prefix_len=10, d_model=512):
        super().__init__()
        # 加载预训练文本编码器
        self.text_model = CLIPTextModel.from_pretrained(model_name)
        # 冻结主体参数
        for param in self.text_model.parameters():
            param.requires_grad = False
        # 可训练前缀Token
        self.prefix = nn.Parameter(torch.randn(1, prefix_len, d_model))
        self.prefix_len = prefix_len
 
    def forward(self, input_ids):
        # 拼接前缀与输入序列
        batch_size = input_ids.size(0)
        prefix = self.prefix.repeat(batch_size, 1, 1)  # [batch, prefix_len, dim]
        # 构造新输入:前缀 + 原始文本
        new_input_ids = torch.cat([torch.ones(batch_size, self.prefix_len).long().cuda(), input_ids], dim=1)
        # 替换输入嵌入:前缀部分用可训练嵌入,文本部分用原始嵌入
        embeddings = self.text_model.get_input_embeddings()(new_input_ids)
        embeddings[:, :self.prefix_len, :] = prefix
        # forward传播
        outputs = self.text_model(inputs_embeds=embeddings)
        return outputs

我整理了一份“参数高效微调八股表”,把校招常考的考点和实战注意事项都列进去了,比死记硬背管用:

微调方案

可训练参数占比

适用任务类型

PyTorch实现难度

LoRA

0.1%-1%

我做“图文分类课程作业”时用的方案,训练时只改0.5%的参数,显存占用降70%,代码参考牛客上“局部更新数组”的思路

低(PEFT库直接调用)

Prefix Tuning

1%-3%

我做“数据增强实验报告”时用的方案,用Stable Diffusion生成1000张图文对,把模型准确率从65%提到78%。代码里的推理循环,我参考了牛客上“批量处理数据”的优化思路,比原始代码快3倍:

中(需自定义前缀拼接逻辑)

P-tuning v2

0.5%-2%

小样本多模态任务

中(需设计提示Token结构)

2.3 数据增强:多模态协同增强的技术创新

数据稀缺与噪声问题是多模态训练的核心痛点,PyTorch生态通过”单模态增强+跨模态生成”的组合策略实现数据扩充,最新研究成果进一步提升了增强效果的真实性与多样性:

单模态增强的精细化:针对不同模态特性设计专属增强策略,例如图像增强采用
torchvision.transforms.v2
的组合变换(随机裁剪、色彩抖动、混合增强),文本增强采用
nlpaug
的上下文感知替换(基于BERT的同义词替换)。

跨模态生成增强:基于扩散模型生成高质量跨模态数据,例如利用Stable Diffusion生成与文本匹配的图像,或通过BLIP生成图像对应的描述文本。PyTorch的
diffusers
库提供了开箱即用的扩散模型工具,可快速构建数据生成流水线:



from diffusers import StableDiffusionPipeline
import torch
 
# 加载扩散模型
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16).cuda()
# 基于文本生成图像(扩充图文训练对)
text_prompts = [
    "a cat sitting on a windowsill at sunset",
    "a dog running in a green field with flowers"
]
# 生成图像并转换为PyTorch张量
for prompt in text_prompts:
    image = pipe(prompt, num_inference_steps=20).images[0]
    # 转换为模型输入格式
    img_tensor = torchvision.transforms.ToTensor()(image).unsqueeze(0)  # [1, 3, 512, 512]

这里分享一个学生党专属技巧:用“多模态增强+算法题思路”搞定小样本问题。我做课程项目时数据不够,就用牛客上“生成测试用例”的思路,用扩散模型生成辅助数据,再用C++写脚本筛选高质量样本——这个方法在面试时讲出来,面试官说“很有工程思维”。

三、PyTorch在相机3A算法优化中的工程化创新

相机3A算法是我《计算机视觉课程设计》的选题,也是校招硬件岗常问的结合点。传统3A算法的手工特征很像“硬编码的算法题”,而用PyTorch改造成深度学习版本后,鲁棒性提升明显。作为学生,我没有工业级数据集,但用公开数据集+自己拍的照片,照样复现了核心逻辑,还顺便吃透了“模型量化”“端侧部署”等八股考点。

3.1 自动对焦(AF):从清晰度预测到场景自适应对焦

传统AF算法的“对比度检测”很像牛客上的“峰值查找题”,但低光场景下容易找错峰值。我做课程设计时,用“双分支模型”解决了这个问题——本质是把“单一特征判断”改成“特征+场景分类”的多条件决策,和算法题里的“分类讨论”思路一致。

核心模型设计:采用轻量化骨干网络(如MobileNetV3)构建双分支模型,一支预测图像各区域的清晰度分数,另一支分类场景类型(低光、人像、风景),根据场景动态调整对焦策略。PyTorch的
torch.nn.Sequential
可快速构建轻量化模型:



import torch
import torch.nn as nn
import torchvision.models as models
 
class AdaptiveAFModel(nn.Module):
    def __init__(self):
        super().__init__()
        # 轻量化骨干网络(MobileNetV3)
        backbone = models.mobilenet_v3_small(pretrained=True).features
        self.backbone = nn.Sequential(*list(backbone.children())[:-1])  # 移除最后一层
        # 清晰度预测分支
        self.focus_branch = nn.Sequential(
            nn.Conv2d(576, 256, 3, padding=1),
            nn.ReLU(),
            nn.AdaptiveAvgPool2d((16, 16)),  # 输出16×16的清晰度热力图
            nn.Conv2d(256, 1, 1),
            nn.Sigmoid()
        )
        # 场景分类分支
        self.scene_branch = nn.Sequential(
            nn.AdaptiveAvgPool2d((1, 1)),
            nn.Flatten(),
            nn.Linear(576, 8),  # 8类场景分类
            nn.Softmax(dim=1)
        )
 
    def forward(self, x):
        feat = self.backbone(x)
        focus_heatmap = self.focus_branch(feat)  # [batch, 1, 16, 16] 清晰度热力图
        scene_prob = self.scene_branch(feat)     # [batch, 8] 场景概率
        return focus_heatmap, scene_prob

工程化优化(校招重点):我把模型部署到树莓派时,踩了很多坑,最终总结出“学生党端侧部署三步法”,刚好覆盖八股考点:量化:用
torch.quantization
把模型转成INT8,我测过显存从200M降到50M,推理延迟从50ms降到12ms(满足实时要求)

算子裁剪:参考C++的“冗余代码删除”思路,把模型里用不到的卷积层删掉,适配树莓派的轻量GPU

推理加速:用PyTorch Mobile编译,比直接用Python推理快3倍,这里有个小技巧:编译时指定“针对ARM架构优化”

我的课程设计成果:用这个模型做了“手机摄像头自动对焦演示”,低光场景(比如晚上室内)对焦成功率从传统算法的60%提到88%,答辩时拿了优秀项目。代码里的清晰度热力图可视化,我用了C++写的OpenCV脚本辅助展示,完美结合两大技术栈。

3.2 自动曝光(AE):端到端曝光参数预测与动态校准

传统AE算法的“亮度均值调整”很像牛客上的“简单贪心题”,但逆光场景下会“顾此失彼”。我做项目时引入“动态校准”,本质是把“一次性决策”改成“带反馈的迭代优化”,和动态规划题的“状态转移”逻辑一样——用前一帧的误差调整当前决策,精度立马提升。



class EEDAEModel(nn.Module):
    def __init__(self):
        super().__init__()
        # 特征提取骨干网络
        self.backbone = models.resnet18(pretrained=True)
        # 替换最后一层为曝光参数预测
        self.fc = nn.Linear(1000, 3)  # 输出:快门速度(对数域)、ISO、光圈
        # 动态校准模块(根据亮度误差调整参数)
        self.calibration = nn.Sequential(
            nn.Linear(4, 16),  # 输入:预测参数+实际亮度误差
            nn.ReLU(),
            nn.Linear(16, 3)   # 输出:参数校准量
        )
 
    def forward(self, x, prev_brightness_err=None):
        feat = self.backbone(x)
        params = self.fc(feat)  # 初始曝光参数预测
        # 训练阶段:利用前一帧亮度误差进行动态校准
        if self.training and prev_brightness_err is not None:
            calib_input = torch.cat([params, prev_brightness_err.unsqueeze(1)], dim=1)
            calib_delta = self.calibration(calib_input)
            params = params + calib_delta
        return params
 
# 训练逻辑:引入亮度误差反馈
model = EEDAEModel()
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)
 
for batch in dataloader:
    images, target_params, brightness_err = batch
    # 利用前一帧亮度误差校准当前预测
    pred_params = model(images, brightness_err)
    loss = criterion(pred_params, target_params)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

该方案的核心创新点在于动态校准机制:通过前一帧图像的亮度误差(实际亮度与理想亮度的差值)调整当前参数预测,解决了传统算法”一次性预测”的局限性。在逆光场景测试中,该方案的亮度均匀性指标提升35%,过曝/欠曝发生率从27%降至8%。

3.3 自动白平衡(AWB):光源识别与色彩校准的协同优化

传统AWB的“灰度世界假设”是校招常考的计算机视觉基础题,但混合光源下会失效。我做课程设计时,把它改成“光源识别+色彩校准”的协同模型——相当于给算法加了“先验知识”,和牛客上的“分类+回归”组合题思路一致。

光源识别分支:采用CNN识别场景中的光源类型(白炽灯、日光灯、太阳光、混合光源等),为色彩校准提供先验知识。

色彩校准分支:根据光源类型预测RGB增益系数,调整图像色彩平衡。同时引入色彩恒常性损失函数,确保不同光源下白色物体的色彩一致性:



class ColorConstancyLoss(nn.Module):
    def forward(self, rgb_images, gain_params):
        # 应用RGB增益
        r_gain, g_gain, b_gain = gain_params.chunk(3, dim=1)
        calibrated_imgs = rgb_images * torch.cat([r_gain, g_gain, b_gain], dim=1).unsqueeze(2).unsqueeze(3)
        # 色彩恒常性约束:灰度世界假设(各通道均值相等)
        channel_means = torch.mean(calibrated_imgs, dim=[2, 3])  # [batch, 3]
        mean_diff = torch.std(channel_means, dim=1).mean()  # 通道均值标准差(越小越好)
        return mean_diff
 
# 协同模型训练
model = AWBCooperativeModel()  # 包含光源识别与色彩校准分支
color_loss = ColorConstancyLoss()
param_loss = nn.MSELoss()
 
for batch in dataloader:
    images, target_gains, light_source = batch
    pred_gains, pred_light = model(images)
    # 混合损失:参数精度损失 + 色彩恒常性损失 + 光源识别损失
    loss = param_loss(pred_gains, target_gains) + 0.1 * color_loss(images, pred_gains) + 0.05 * nn.CrossEntropyLoss()(pred_light, light_source)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

我用自己拍的“混合光源照片集”(比如台灯+阳光的场景)测试,色温误差从传统算法的1000K降到400K,肉眼看白色杯子不再偏黄。这里分享一个八股考点:色彩恒常性损失函数的设计逻辑,其实和算法题里的“约束优化”一致——通过强制通道均值接近,实现色彩校准。

四、学生党学习PyTorch的干货总结(附备考资源)

4.1 我的学习路径(从入门到做项目)

基础阶段(2周):用C++对比学张量运算,比如
torch.matmul
对应C++的矩阵乘法实现,刷LeetCode第48题(旋转图像)时用PyTorch复现,加深理解

进阶阶段(1个月):做“MNIST分类”入门模型,重点练动态图调试(校招常考“如何定位梯度消失”),用
torch.autograd
打印梯度

项目阶段(2个月):从“单模态”到“多模态”,先做图像分类,再做图文检索,最后挑战3A算法复现,每步都写实验报告(面试时能当项目经历讲)

编译优化持续深化:PyTorch 2.x系列版本将进一步优化
torch.compile
的后端编译器,支持更多异构硬件(如RISC-V架构、专用AI芯片),并实现动态图与静态图的无缝切换。

多模态与嵌入式的深度融合:PyTorch Mobile将新增多模态模型的专用优化算子,支持图像、文本、音频的端侧协同推理,推动多模态技术在手机、相机等终端设备的普及。

大模型训练效率提升:通过改进分布式训练框架(如Fairscale的混合并行策略)、引入增量训练机制,降低千亿级多模态模型的训练成本,使大模型技术更易落地。

4.2 校招高频考点&刷题资源

高频考点

我的备考技巧

对应资源

动态图vs静态图

用C++静态编译对比理解,结合调试经历讲区别

牛客“深度学习框架对比”专题

自动求导原理

手动推导简单模型的梯度,再用
backward()
验证

PyTorch官方教程+LeetCode第152题(乘积最大子数组)梯度思路

模型量化与部署

用树莓派实际部署一次,记录过程中的问题

PyTorch Mobile官方文档+我的课程设计报告

多模态融合策略

复现CLIP的晚期融合,再改造成中期融合,对比效果

Hugging Face CLIP源码+牛客“多模态分类”竞赛

核心挑战

技术瓶颈

PyTorch生态解决方案

多模态数据标注成本高

跨模态数据标注需专业知识,标注效率低

采用弱监督学习(如CLIP的图文配对自监督)、半自动化标注工具(基于预训练模型生成候选标注)

嵌入式设备实时性约束

模型体积大、推理延迟高,难以适配终端硬件

模型量化、剪枝(TorchPrune)、算子优化(PyTorch Mobile)、异构推理(GPU+NPU协同)

大模型可解释性差

多模态模型决策逻辑不透明,难以调试与优化

采用注意力可视化工具(Captum)、特征归因分析、模型蒸馏简化决策链路

3A算法与深度学习融合难点

传统算法与模型输出的参数衔接不顺畅,易出现突变

设计参数平滑过渡模块、引入传统算法输出作为模型先验、在线自适应融合策略

五、结语:写给和我一样的学生党

作为大四学生,我想说:PyTorch不是“遥不可及的工具”,而是我们串联算法题、技术栈、课程项目和校招的“核心纽带”。刷牛客算法题时积累的逻辑思维,学C++时养成的工程习惯,背八股时总结的考点框架,都能在PyTorch实战中落地——这也是我写这篇博客的初衷:把零散的知识点串成体系。

如果你也是正在备考或做项目的学生,不妨从“小目标”开始:用PyTorch复现一道算法题,改造一个课程项目,甚至部署到单片机上做演示。这些经历不仅能帮你吃透技术,更能成为校招面试时的“加分项”。后续我会持续分享牛客算法题的PyTorch解法、C++与PyTorch的对比笔记,欢迎一起交流进步!

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...