13个算法工程师必须掌握的PyTorch Tricks

机器学习工程师的线性代数肌肉记忆:NumPy与SciPy底层实战 线性代数是机器学习的底层操作系统,它定义了向量空间、矩阵变换与数值稳定性等核心机制。其原理体现在特征协方差计算、梯度更新公式和SVD降维等关键环节,技术价值在于保障模型收敛性、内存效率与数值鲁棒性。典型应用场景包括特征工程中的标准化、推荐系统的稀疏矩阵分解、神经网络权重诊断及高维推理优化。本文聚焦NumPy ndarray内存结构与SciPy线性代数模块的工程级差异,深入解析strides步长机制、csr_matrix稀疏存储逻辑、linalg.solve替代inv的精度优势等真实开发痛点,帮助工程师将抽象 阅读详情

来自 | 知乎   作者丨z.defying

链接丨https://zhuanlan.zhihu.com/p/76459295

仅作学术分享,如有侵权,请联系删文。

   目录

1、指定GPU编号

2、查看模型每层输出详情

3、梯度裁剪

4、扩展单张图片维度

5、one hot编码

6、防止验证模型时爆显存

7、学习率衰减

8、冻结某些层的参数

9、对不同层使用不同学习率

10、模型相关操作

11、Pytorch内置one hot函数

12、网络参数初始化

13、加载内置预训练模型


   1、指定GPU编号

  • 设置当前使用的GPU设备仅为0号设备,设备名称为 /gpu:0:os.environ["CUDA_VISIBLE_DEVICES"] = "0"

  • 设置当前使用的GPU设备为0,1号两个设备,名称依次为 /gpu:0、/gpu:1:os.environ["CUDA_VISIBLE_DEVICES"] = "0,1" ,根据顺序表示优先使用0号设备,然后使用1号设备。

指定GPU的命令需要放在和神经网络相关的一系列操作的前面。


   2、查看模型每层输出详情

Keras有一个简洁的API来查看模型的每一层输出尺寸,这在调试网络时非常有用。现在在PyTorch中也可以实现这个功能。

使用很简单,如下用法:

from torchsummary import summarysummary(your_model, input_size=(channels, H, W))

input_size 是根据你自己的网络模型的输入尺寸进行设置。


   3、梯度裁剪(Gradient Clipping)

import torch.nn as nn
outputs = model(data)loss= loss_fn(outputs, target)optimizer.zero_grad()loss.backward()nn.utils.clip_grad_norm_(model.parameters(), max_norm=20, norm_type=2)optimizer.step()

nn.utils.clip_grad_norm_ 的参数:

  • parameters – 一个基于变量的迭代器,会进行梯度归一化

  • max_norm – 梯度的最大范数

  • norm_type – 规定范数的类型,默认为L2

@不椭的椭圆 提出:梯度裁剪在某些任务上会额外消耗大量的计算时间,可移步评论区查看详情。


   4、扩展单张图片维度

因为在训练时的数据维度一般都是 (batch_size, c, h, w),而在测试时只输入一张图片,所以需要扩展维度,扩展维度有多个方法:

import cv2import torch
image = cv2.imread(img_path)image = torch.tensor(image)print(image.size())
img = image.view(1, *image.size())print(img.size())
# output:# torch.Size([h, w, c])# torch.Size([1, h, w, c])

或

import cv2import numpy as np
image = cv2.imread(img_path)print(image.shape)img = image[np.newaxis, :, :, :]print(img.shape)
# output:# (h, w, c)# (1, h, w, c)

或(感谢 @coldleaf 的补充)

import cv2import torch
image = cv2.imread(img_path)image = torch.tensor(image)print(image.size())
img = image.unsqueeze(dim=0)  print(img.size())
img = img.squeeze(dim=0)print(img.size())
# output:# torch.Size([(h, w, c)])# torch.Size([1, h, w, c])# torch.Size([h, w, c])

tensor.unsqueeze(dim):扩展维度,dim指定扩展哪个维度。

tensor.squeeze(dim):去除dim指定的且size为1的维度,维度大于1时,squeeze()不起作用,不指定dim时,去除所有size为1的维度。


   5、独热编码

在PyTorch中使用交叉熵损失函数的时候会自动把label转化成onehot,所以不用手动转化,而使用MSE需要手动转化成onehot编码。

import torchclass_num = 8batch_size = 4
def one_hot(label):    """    将一维列表转换为独热编码    """    label = label.resize_(batch_size, 1)    m_zeros = torch.zeros(batch_size, class_num)    # 从 value 中取值,然后根据 dim 和 index 给相应位置赋值    onehot = m_zeros.scatter_(1, label, 1)  # (dim,index,value)
    return onehot.numpy()  # Tensor -> Numpy
label = torch.LongTensor(batch_size).random_() % class_num  # 对随机数取余print(one_hot(label))
# output:[[0. 0. 0. 1. 0. 0. 0. 0.] [0. 0. 0. 0. 1. 0. 0. 0.] [0. 0. 1. 0. 0. 0. 0. 0.] [0. 1. 0. 0. 0. 0. 0. 0.]]

注:第11条有更简单的方法。


   6、防止验证模型时爆显存

验证模型时不需要求导,即不需要梯度计算,关闭autograd,可以提高速度,节约内存。如果不关闭可能会爆显存。

with torch.no_grad():    # 使用model进行预测的代码    pass

感谢@zhaz 的提醒,我把 torch.cuda.empty_cache() 的使用原因更新一下。

这是原回答:

Pytorch 训练时无用的临时变量可能会越来越多,导致 out of memory ,可以使用下面语句来清理这些不需要的变量。

官网 上的解释为:

Releases all unoccupied cached memory currently held by the caching allocator so that those can be used in other GPU application and visible innvidia-smi. torch.cuda.empty_cache()

意思就是PyTorch的缓存分配器会事先分配一些固定的显存,即使实际上tensors并没有使用完这些显存,这些显存也不能被其他应用使用。这个分配过程由第一次CUDA内存访问触发的。

而 torch.cuda.empty_cache() 的作用就是释放缓存分配器当前持有的且未占用的缓存显存,以便这些显存可以被其他GPU应用程序中使用,并且通过 nvidia-smi命令可见。注意使用此命令不会释放tensors占用的显存。

对于不用的数据变量,Pytorch 可以自动进行回收从而释放相应的显存。

更详细的优化可以查看 优化显存使用 和 显存利用问题。


   7、学习率衰减

import torch.optim as optimfrom torch.optim import lr_scheduler
# 训练前的初始化optimizer = optim.Adam(net.parameters(), lr=0.001)scheduler = lr_scheduler.StepLR(optimizer, 10, 0.1)  # # 每过10个epoch,学习率乘以0.1
# 训练过程中for n in n_epoch:    scheduler.step()    ...

可以随时查看学习率的值:optimizer.param_groups[0]['lr']。

还有其他学习率更新的方式:

1、自定义更新公式:

scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda epoch:1/(epoch+1))

2、不依赖epoch更新学习率:

lr_scheduler.ReduceLROnPlateau()提供了基于训练中某些测量值使学习率动态下降的方法,它的参数说明到处都可以查到。
提醒一点就是参数 mode='min' 还是'max',取决于优化的的损失还是准确率,即使用 scheduler.step(loss)还是scheduler.step(acc) 。

   8、冻结某些层的参数

参考:https://www.zhihu.com/question/311095447/answer/589307812

在加载预训练模型的时候,我们有时想冻结前面几层,使其参数在训练过程中不发生变化。

我们需要先知道每一层的名字,通过如下代码打印:

net = Network()  # 获取自定义网络结构for name, value in net.named_parameters():    print('name: {0},\t grad: {1}'.format(name, value.requires_grad))

假设前几层信息如下:

name: cnn.VGG_16.convolution1_1.weight, grad: Truename: cnn.VGG_16.convolution1_1.bias, grad: Truename: cnn.VGG_16.convolution1_2.weight, grad: Truename: cnn.VGG_16.convolution1_2.bias, grad: Truename: cnn.VGG_16.convolution2_1.weight, grad: Truename: cnn.VGG_16.convolution2_1.bias, grad: Truename: cnn.VGG_16.convolution2_2.weight, grad: Truename: cnn.VGG_16.convolution2_2.bias, grad: True

后面的True表示该层的参数可训练,然后我们定义一个要冻结的层的列表:

no_grad = [    'cnn.VGG_16.convolution1_1.weight',    'cnn.VGG_16.convolution1_1.bias',    'cnn.VGG_16.convolution1_2.weight',    'cnn.VGG_16.convolution1_2.bias']

冻结方法如下:

net = Net.CTPN()  # 获取网络结构for name, value in net.named_parameters():    if name in no_grad:        value.requires_grad = False    else:        value.requires_grad = True

冻结后我们再打印每层的信息:

name: cnn.VGG_16.convolution1_1.weight, grad: Falsename: cnn.VGG_16.convolution1_1.bias, grad: Falsename: cnn.VGG_16.convolution1_2.weight, grad: Falsename: cnn.VGG_16.convolution1_2.bias, grad: Falsename: cnn.VGG_16.convolution2_1.weight, grad: Truename: cnn.VGG_16.convolution2_1.bias, grad: Truename: cnn.VGG_16.convolution2_2.weight, grad: Truename: cnn.VGG_16.convolution2_2.bias, grad: True

可以看到前两层的weight和bias的requires_grad都为False,表示它们不可训练。

最后在定义优化器时,只对requires_grad为True的层的参数进行更新。

optimizer = optim.Adam(filter(lambda p: p.requires_grad, net.parameters()), lr=0.01)

   9、对不同层使用不同学习率

我们对模型的不同层使用不同的学习率。

还是使用这个模型作为例子:

net = Network()  # 获取自定义网络结构for name, value in net.named_parameters():    print('name: {}'.format(name))
# 输出:# name: cnn.VGG_16.convolution1_1.weight# name: cnn.VGG_16.convolution1_1.bias# name: cnn.VGG_16.convolution1_2.weight# name: cnn.VGG_16.convolution1_2.bias# name: cnn.VGG_16.convolution2_1.weight# name: cnn.VGG_16.convolution2_1.bias# name: cnn.VGG_16.convolution2_2.weight# name: cnn.VGG_16.convolution2_2.bias

对 convolution1 和 convolution2 设置不同的学习率,首先将它们分开,即放到不同的列表里:

conv1_params = []conv2_params = []
for name, parms in net.named_parameters():    if "convolution1" in name:        conv1_params += [parms]    else:        conv2_params += [parms]
# 然后在优化器中进行如下操作:optimizer = optim.Adam(    [        {"params": conv1_params, 'lr': 0.01},        {"params": conv2_params, 'lr': 0.001},    ],    weight_decay=1e-3,)

我们将模型划分为两部分,存放到一个列表里,每部分就对应上面的一个字典,在字典里设置不同的学习率。当这两部分有相同的其他参数时,就将该参数放到列表外面作为全局参数,如上面的`weight_decay`。

也可以在列表外设置一个全局学习率,当各部分字典里设置了局部学习率时,就使用该学习率,否则就使用列表外的全局学习率。

   10、模型相关操作

这个内容比较多,我写成了一篇文章:https://zhuanlan.zhihu.com/p/73893187

  

   11、Pytorch内置one_hot函数

感谢@yangyangyang 补充:Pytorch 1.1后,one_hot可以直接用torch.nn.functional.one_hot。

然后我将Pytorch升级到1.2版本,试用了下 one_hot 函数,确实很方便。

具体用法如下:

import torch.nn.functional as Fimport torch
tensor =  torch.arange(0, 5) % 3  # tensor([0, 1, 2, 0, 1])one_hot = F.one_hot(tensor)
# 输出:# tensor([[1, 0, 0],#         [0, 1, 0],#         [0, 0, 1],#         [1, 0, 0],#         [0, 1, 0]])

F.one_hot会自己检测不同类别个数,生成对应独热编码。我们也可以自己指定类别数:

tensor =  torch.arange(0, 5) % 3  # tensor([0, 1, 2, 0, 1])one_hot = F.one_hot(tensor, num_classes=5)
# 输出:# tensor([[1, 0, 0, 0, 0],#         [0, 1, 0, 0, 0],#         [0, 0, 1, 0, 0],#         [1, 0, 0, 0, 0],#         [0, 1, 0, 0, 0]])

升级 Pytorch (cpu版本)的命令:conda install pytorch torchvision \-c pytorch

(希望Pytorch升级不会影响项目代码)

   12、网络参数初始化

神经网络的初始化是训练流程的重要基础环节,会对模型的性能、收敛性、收敛速度等产生重要的影响。

以下介绍两种常用的初始化操作。

(1) 使用pytorch内置的torch.nn.init方法。

常用的初始化操作,例如正态分布、均匀分布、xavier初始化、kaiming初始化等都已经实现,可以直接使用。具体详见PyTorch 中 torch.nn.init 中文文档。

init.xavier_uniform(net1[0].weight)

(2) 对于一些更加灵活的初始化方法,可以借助numpy。

对于自定义的初始化方法,有时tensor的功能不如numpy强大灵活,故可以借助numpy实现初始化方法,再转换到tensor上使用。

for layer in net1.modules():    if isinstance(layer, nn.Linear): # 判断是否是线性层        param_shape = layer.weight.shape        layer.weight.data = torch.from_numpy(np.random.normal(0, 0.5, size=param_shape))         # 定义为均值为 0,方差为 0.5 的正态分布

 

   13、加载内置预训练模型

torchvision.models模块的子模块中包含以下模型:

  • AlexNet

  • VGG

  • ResNet

  • SqueezeNet

  • DenseNet

导入这些模型的方法为:

import torchvision.models as modelsresnet18 = models.resnet18()alexnet = models.alexnet()vgg16 = models.vgg16()

有一个很重要的参数为pretrained,默认为False,表示只导入模型的结构,其中的权重是随机初始化的。

如果pretrained 为 True,表示导入的是在ImageNet数据集上预训练的模型。

import torchvision.models as modelsresnet18 = models.resnet18(pretrained=True)alexnet = models.alexnet(pretrained=True)vgg16 = models.vgg16(pretrained=True)

更多的模型可以查看:https://pytorch-cn.readthedocs.io/zh/latest/torchvision/torchvision-models/

2D卷积原理与实现:从图像模糊到边缘检测的底层算法 卷积是数字图像处理中的核心数学运算,它通过一个称为卷积核的小矩阵在图像上滑动,对局部像素进行加权求和,从而实现对图像特征的提取和变换。其原理基于信号处理中的线性系统理论,通过设计不同的卷积核权重,可以控制图像信息的局部聚合与重组方式。这一基础操作的技术价值在于,它不仅是实现模糊、锐化、边缘检测等传统图像滤波的通用方法,更是现代深度学习卷积神经网络(CNN)进行特征提取的底层引擎。在应用场景上,从手机美颜滤镜、Photoshop工具到计算机视觉中的物体识别,都离不开卷积运算。本文聚焦于2D卷积的实战实现,深入 阅读详情

相关推荐

Google Colab机器学习实战:免费GPU+Notebook高效开发指南

Jupyter Notebook 是数据科学与机器学习最主流的交互式开发范式,而 GPU 加速则是深度学习模型训练的基础设施。理解 Notebook 的执行机制、GPU 资源调度原理及内存/显存协同管理,是提升实验效率的关键技术能力。Google Colab 以预配置环境、即开即用的 T4/A100 GPU 和无缝集成 Google Drive 的特性,显著降低了从想法验证到结果可视化的工程门槛。它特别适用于教学演示、Kaggle 竞赛探索、论文可复现性构建及轻量级 POC 快速交付等场景。本文深入解析 C

weixin_34007886的博客 465

PyTorch优化器相关使用方式和trick集锦(持续更新ing...)

本文介绍PyTorch优化器相关内容

诸神缄默不语的博客 556

NumPy高性能数据处理:内存视图、零拷贝与底层优化实战

NumPy 不仅是数组计算库,更是连接 Python 与底层 C 内存的高性能桥梁。其核心原理在于通过内存视图(view)、步长(strides)和 dtype 控制实现零拷贝操作,从而规避 Python 对象开销与冗余内存分配。技术价值体现在毫秒级确定性、超低内存占用及对 OpenBLAS、AVX 等硬件加速的原生支持。典型应用场景包括实时特征工程、时序滑动窗口、结构化日志解析、大文件内存映射(memmap)及边缘设备流式处理。本文聚焦生产环境中反复验证的 NumPy 高性能模式,深入剖析 np.from

weixin_30906185的博客 461

PyTorch Trick集锦

PyTorch Trick集锦欢迎使用Markdown编辑器1、指定GPU编号2、查看模型每层输出详情3、梯度裁剪(Gradient Clipping)4.扩展tensor维度5、独热编码6、防止验证模型时爆显存7、学习率衰减冻结某些层的参数9、对不同层使用不同学习率10、模型相关操作11、网络参数初始化12、加载内置预训练模型如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 1、指定GPU

qq_45752541的博客 1704

大模型如何赋能C++代码优化:从模式识别到系统级重构

代码优化是提升软件性能的核心环节,尤其在C++这类系统级编程中,优化往往涉及对硬件架构、内存模型和并发机制的深刻理解。其基本原理在于通过剖析程序热点、识别性能瓶颈,并应用数据结构优化、算法改进及并行化等技术手段来提升执行效率。在AI时代,大模型为这一传统领域带来了新的技术价值:它能够基于海量代码语料进行模式识别,快速定位潜在的性能反模式(如缓存不友好的访问、不必要的动态内存分配),并提供优化建议。这种能力尤其适用于代码理解与文档化、模式识别与建议、以及代码重构与生成等应用场景。例如,在优化高并发C++模块时

weixin_33816946的博客 450

Python实时流数据预测与动态可视化实战

流式数据是指持续生成、无固定边界的时间序列数据,其核心挑战在于低延迟处理与内存可控性。基于Python构建实时预测系统,需突破传统批处理思维,采用在线特征工程(如Welford算法)、环形缓冲区与增量学习模型(如SGDRegressor.partial_fit),以实现单步预测的稳定性与误差可控性。技术价值体现在端到端<100ms延迟、7×24小时稳定运行及毫秒级动态图表渲染。典型应用场景包括工业传感器监控、金融行情实时预警和IoT设备预测性维护。本文聚焦streaming data与real-time p

weixin_30765577的博客 458

PyTorch一些trick

1 可查询站点 PyTorch中文教程 Apache PyTorch中文文档 Pytorch Doc 2 安装 3 备注 CPU上的所有张量(CharTensor除外)都支持与Numpy的相互转换。Torch张量和NumPy数组将共享它们的底层内存位置,因此当一个改变时,另外也会改变。 评估模型时阻止grad属性计算:代码块包装在 with torch.no_grad()、requires_grad = False nn.Module中parameters()获取模型可学习参数 ...

zhulinniao 394

YOLO-Master与YOLO26解析:从模块化框架到边缘部署实战

目标检测是计算机视觉的核心任务,旨在识别并定位图像中的物体。其原理通常基于深度学习模型,通过卷积神经网络提取特征,并预测物体的类别和边界框。该技术的价值在于为自动驾驶、安防监控、工业质检等场景提供自动化视觉感知能力。随着应用深入,模型效率与部署便捷性成为关键,催生了针对实际痛点的模块化改进方案。其中,YOLO-Master作为一个集成框架,强调模块化设计和前沿技术集成,允许用户灵活组合主干网络、颈部网络和检测头等组件。而YOLO26则是一个面向效率与部署优化的具体模型,尤其针对yolo26部署和yolo26

weixin_30530339的博客 336

torch - 打印 model 梯度更新情况

打印所有参数(输出model下所有参数,一大串,眼花缭乱的) train_loss = lw[0] * loss0 + lw[1] * loss1 + lw[2] * loss2 # loss backward for name, parms in model.named_parameters(): print('\nBefore backward\n') print('-->name:', name) print('-->para:', parms) p

喵 1578

癌症免疫治疗预测神器TIDE:从原理到实战(避坑指南)

本文详细解析了癌症免疫治疗预测工具TIDE的核心原理及实战应用。TIDE算法通过模拟肿瘤免疫逃逸的两种核心机制(T细胞功能障碍和排除),为临床决策提供精准预测。文章涵盖数据准备、标准化流程、网页工具操作指南及结果解读,帮助科研人员和临床医生避开常见误区,优化免疫治疗策略。

weixin_29309475的博客 200

Docker网络冲突?手把手教你解决Dify社区版无法访问172.18.0.0网段的问题

本文详细解析了在部署Dify社区版时,因Docker默认网段与局域网冲突导致无法访问172.18.0.0网段的问题。通过剖析Docker网络原理,提供了修改Docker守护进程默认地址池的根治方案,并介绍了在Compose文件中指定自定义网络等备选方法,帮助用户彻底解决网络冲突,保障服务稳定运行。

p8q9r0的博客 486

从YOLOv1到v13:核心模块演进与目标检测实战调优指南

目标检测是计算机视觉的核心任务,旨在定位和识别图像中的物体。其主流算法可分为两阶段和单阶段范式,其中以YOLO为代表的单阶段检测器因其速度快、易于部署而广泛应用于实时场景。理解其原理,关键在于掌握骨干网络、特征融合和预测头等核心组件的设计演变。例如,C3和C2f模块通过跨阶段部分连接优化了梯度流与特征复用,而SPPF结构则高效地融合了多尺度上下文信息,这些改进直接提升了模型对复杂场景(如小目标、密集目标)的检测能力。对于工程实践,从Anchor-Based到Anchor-Free的演进,反映了算法在精度与泛

weixin_33923762的博客 389

告别复杂配置!5分钟在Vue/React项目中集成讯飞语音听写WebSocket API

本文详细介绍了如何在Vue/React项目中快速集成讯飞语音听写WebSocket API,实现高效语音识别功能。通过对比不同通信方案,突出WebSocket在实时语音交互中的优势,并提供框架适配、音频处理及性能优化等关键技术点,帮助开发者5分钟内完成专业级语音听写功能集成。

weixin_28730353的博客 274

YOLO算法演进:从v1到v8的目标检测技术解析

目标检测是计算机视觉中的核心技术之一,其核心任务是在图像中定位并识别物体。YOLO(You Only Look Once)系列算法作为单阶段检测的代表,通过将目标检测视为回归问题,实现了速度与精度的平衡。从YOLOv1到YOLOv8,算法经历了多次迭代,包括引入Batch Normalization、Anchor Boxes、FPN多尺度融合等关键技术。这些改进不仅提升了模型的检测精度,还优化了工程部署效率,使其在实时视频分析、自动驾驶、工业检测等场景中广泛应用。YOLOv8进一步整合了多任务学习和动态正样

weixin_34197488的博客 308

大模型抽取知识图谱三元组的可行性分析

通过结合传统信息抽取模型与大语言模型的混合架构,可高效完成从学术文献到知识图谱三元组的全流程构建。分阶段优化:传统模型负责粗粒度抽取,大模型负责细粒度修正。灵活提示设计:通过少样本学习引导大模型理解领域本体。严格质量控制:结合规则引擎和人工校验,确保三元组准确性。该方案可显著提升知识图谱构建效率,适用于学术研究、企业知识库等场景。

qq_20647053的博客 1067

Python爬虫:抓取餐饮平台顾客评分与评价的完整教程

本文介绍了如何使用Python爬虫技术抓取餐饮平台上的餐厅评分和评论数据。我们通过三种主要的抓取方法:静态网页抓取(requests)、动态网页抓取(Selenium)和API抓取,展示了如何抓取餐饮平台的数据。还介绍了如何使用pandas对抓取的数据进行存储、清洗、分析,并进行可视化和情感分析。通过本文的学习,您应该能够掌握如何使用Python爬虫抓取餐饮平台的评论数据,并将这些数据应用于市场分析、顾客反馈和服务优化等领域。

2201_76125261的博客 1144

NumPy实操手册:从内存机制到工业级数据处理

NumPy是Python科学计算的基石,其核心并非语法糖,而是基于连续内存布局与固定类型数组的高效数值计算协议。理解ndarray的data buffer、dtype、shape和strides四要素,是掌握广播、视图、副本等关键机制的前提;而广播本质是编译期内存地址映射规则,非数据复制。这种底层设计赋予NumPy远超原生Python的向量化能力,使其成为数据清洗、信号处理、图像计算及机器学习预处理的首选工具。本文聚焦真实业务场景——如CSV高效加载、滚动窗口统计、跨库协同(Pandas/PyTorch)与

weixin_33767813的博客 475

【STM32实物】基于STM32的扫地机器人/小车控制系统设计

扫地机器人系统采用分层结构设计,主要包括底层硬件控制层、中间数据处理层和上层用户交互层。底层硬件控制层负责对各个硬件模块进行控制和数据采集,中间数据处理层负责对采集到的数据进行处理和解算,上层用户交互层负责与用户进行交互并显示系统状态信息。

嵌入式阿齐Archie 1万+

【Reading Notes】(5)Favorite Articles from 2022

自然语言本身是人类创造出来的数据,其中每个单词、每个字符都是人类写下来的,天然带有语义,因此从严格意义上说,NLP的预训练任务不能被视为真正的无监督预训练,至多算是弱监督的预训练。显然“椅子”属于“家具”,而“电视机”属于“家电”,但是“按摩椅”属于“家具”还是“家电”,就很难判断——这就是语义粒度的增加引发的确定性的下降。有人猜测,尽管这次裁员比例不会像马斯克对推特那样,直接砍掉50%那么夸张,但由于Meta员工数量远超推特,且近年来迅速膨胀,此次最终裁员的绝对数量可能超过推特。

bryant_meng 448

知识库构建革命:基于Agent的智能检索系统设计

本文聚焦“基于Agent的智能检索系统”这一前沿技术,系统讲解其设计逻辑、核心技术与落地方法。我们将覆盖从基础概念(如Agent如何“理解”知识)到实战代码(如何用Python搭建原型系统)的全链路内容,帮助技术开发者、企业知识管理负责人理解这一技术为何能颠覆传统知识库。本文将按“问题引入→核心概念→技术原理→实战落地→未来趋势”的逻辑展开:先用“老图书馆的困境”故事引出传统知识库的问题;再用“智能图书管理员”类比解释Agent如何革新检索;接着拆解NLP、对话管理、知识推理等核心技术;

AI智能探索者的博客 728

10、硬件工程师笔试面试——继电器(2025版本)

在设计电路时,应综合考虑SSR的优势和局限性,确保选择合适的型号,并采取适当的设计措施来优化性能和可靠性。继电器的主要功能是利用较小的电流或电压来控制较大电流或电压的电路,实现信号的放大和隔离。在处理继电器故障时,应综合考虑电源、线圈、触点和负载等因素,及时进行故障诊断和处理,以确保电路系统的稳定性和安全性。由于汽车电子系统的复杂性,继电器的设计和选择必须考虑到系统的特定要求,包括电流容量、电压等级、环境条件(如温度、湿度、振动)以及所需的保护和隔离功能。确定线圈的工作电压或电流,以及吸合电压或电流。

XU157303764的博客 3734

超深神经网络实战:1607层ConvNext训练全指南

超深神经网络(如千层以上)的核心挑战并非理论不可行,而是梯度消失与信号衰减在工程实现中的真实体现。其本质是前向激活分布失控与反向梯度流断裂的物理过程,需通过LayerNorm等归一化机制进行信号整形,并依赖skip connection构建稳定梯度通路。LayerScale作为关键初始化策略,以极小初始增益保障捷径主导的早期收敛性,显著提升训练鲁棒性。在CIFAR-10等中小数据集上,结合PyTorch 2.0编译优化、梯度检查点与混合精度,可实现在单卡RTX 4090上稳定训练1004层乃至1607层Co

xpmwgcwm的博客 465

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【Reading Notes】(6)Favorite Articles from 2023

Feature-Based Knowledge,一般而言,在基于特征的知识迁移中,研究的对象包括了:如何需选择知识类型?对于台积电的客户来说,这个数字是难以接受的,因为客户需要为整个晶圆买单,包括其中有缺陷的芯片。最后大家采取了一个折中方案,4号线经过北大的789米轨道段,将采用世界上最先进的轨道减振技术,也就是在钢轨下铺设钢弹簧浮置板。毕竟,有苹果这样的金主愿意成为台积电新制造工艺的第一个客户,能分担台积电先进制程节点的研发费用和专用工厂的建设费用。(2023年01月01日)(2023年01月04日)

bryant_meng 1717

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

从Jupyter Notebook到生产级模型服务的工程实践

模型服务化是机器学习落地的核心环节,本质是将离线可复现的分析流程转化为高可用、低延迟、可观测的在线系统。其技术原理涵盖环境一致性保障、数据契约定义与结构化可观测性建设,核心价值在于 bridging the gap between research and production——支撑模型在真实业务中稳定运行。典型应用场景包括时序异常检测、实时推荐、智能风控等需7×24小时响应的线上AI服务。本文聚焦Notebook to Production过程中的三大断层与FastAPI+Triton实战方案,提供可直

weixin_30565327的博客 494

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 19岁华裔天才辍学MIT,创办AI独角兽,5年市值73亿美元!
下一篇: 哈哈哈!当前的人工智能有多智障?
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值