梯度下降与反向传播算法:NYU-DLSP20 第二周课程笔记的数学原理与 PyTorch 实现
示例工程【免费下载链接】NYU-DLSP20NYU Deep Learning Spring 2020项目地址https://gitcode.com/gh_mirrors/pyt/pytorch-Deep-Learning点击查看免费下载本文基于 NYU-DLSP20NYU Deep Learning Spring 2020课程第二周第一节讲义意大利语版主讲人 Yann LeCun整理撰写。文章以参数化模型、损失函数、梯度下降、反向传播的数学推导为主线并结合本仓库的 PyTorch 实践代码与优化器实现帮助读者建立从「线性层 非线性激活」到「自动求导」的完整认知最终能够在 PyTorch 中独立搭建可训练的多层神经网络并理解其梯度更新过程。目录参数化模型Parametrised Models计算图的框图记法Block Diagram Notations损失函数Loss Functions梯度下降Gradient Descent随机梯度下降的优势Advantages of SGD传统神经网络的结构通过非线性函数的反向传播通过加权求和的反向传播PyTorch 实现神经网络广义反向传播通过功能模块与雅可比矩阵多级图Multi-Stage Graph中的反向传播参数化模型Parametrised Models课程首先引入参数化模型的概念。所谓参数化模型本质上就是一组依赖于**输入input与可训练参数trainable parameters**的函数$$ \bar{y} G(x,w) $$其中 $x$ 是输入$w$ 是参数向量$\bar{y}$ 是模型输出预测值。从课程原义看输入与参数之间并没有本质区别——两者都只是函数的自变量。唯一的差异在于参数的共享方式可训练参数在全部训练样本之间共享而输入则随样本不同而变化。在大多数深度学习框架如 PyTorch中参数是**隐式implicit**的调用模型函数时并不显式传入参数参数被「保存」在函数对象内部——这正是面向对象object-oriented建模方式的体现。在监督学习范式下模型输出 $\bar{y}$ 会进入损失函数代价函数$C(y, \bar{y})$与真实输出 $y$ 进行比较。参数化模型的计算图如下图所示图 1参数化模型的计算图表示来源docs/it/week02/02-1.md参数化函数的经典例子线性模型Linear Model输入向量各分量的加权求和$$ \bar{y} \sum_i w_i x_i, \quad C(y,\bar{y}) \Vert y - \bar{y}\Vert^2 $$最近邻Nearest Neighbour给定输入向量 $\mathbf{x}$ 与权重矩阵 $\mathbf{W}$矩阵的每一行由 $k$ 索引输出是距离输入 $\mathbf{x}$ 最近的矩阵行所对应的 $k$ 值$$ \bar{y} \underset{k}{\arg\min} \Vert x - w_{k,.} \Vert^2 $$值得注意的是参数化模型也可以包含非常复杂的函数——线性模型只是最简单的一种特例。从源码看参数化模型的对象化封装在 PyTorch 中参数被封装在nn.Module子类的对象内部而非每次调用时显式传入。本仓库的螺旋分类实践 04-spiral_classification.ipynb 正是这一思想的直接体现# nn package to create our linear model # each Linear module has a weight and bias model nn.Sequential( nn.Linear(D, H), nn.Linear(H, C) )nn.Linear内部持有权重矩阵与偏置向量调用model(X)时并不需要把参数作为函数参数传入——参数是「保存」在模块内部的。计算图的框图记法课程给出了一套用于绘制计算图computation graph的框图符号这些符号贯穿后续所有章节变量Variables输入变量observed input表示系统观测到的输入例如训练数据 $x$计算变量computed variable表示由某个确定性函数计算得到的变量。确定性函数Deterministic Functions接受多个输入可产生多个输出含有隐式参数变量 $w$圆角一侧表示「容易计算」的方向在图中由 $x$ 计算 $\bar{y}$ 比反向更容易这正是前向传播的方向。标量值函数Scalar-Valued Function用于表示代价成本函数隐含标量输出接受多个输入输出单个值通常为输入之间的距离度量。损失函数损失函数loss function是训练过程中需要最小化的目标函数。课程将其分为两类1. 单样本损失Per Sample Loss$$ L(x,y,w) C(y, G(x,w)) $$即对单个样本 $(x, y)$损失等于代价函数在模型输出上的取值。2. 平均损失Average Loss给定一组样本集合$$S \lbrace (x[p],y[p]) \mid p \in \lbrace 0, \cdots, P-1 \rbrace \rbrace$$集合 $S$ 上的平均损失为$$ L(S,w) \frac{1}{P} \sum_{(x,y) \in S} L(x,y,w) $$图 2带平均损失模型的计算图来源docs/it/week02/02-1.md在标准监督学习范式下单样本损失就是代价函数的输出。机器学习本质上是在做函数优化通常是求最小值它也可能涉及在两个函数之间寻找纳什均衡Nash Equilibrium例如 GAN生成对抗网络。这些优化通常通过基于梯度的方法完成但不一定是梯度下降本身。梯度下降基于梯度的方法Gradient-Based Method是一类假设可以方便计算函数梯度、从而寻找函数极小值的方法。其前提是目标函数连续且几乎处处可微并不要求处处可微。直觉描述课程给出一个非常直观的比喻想象你身处浓雾深夜的山中想要下山回到村庄但视线受限——你只能在紧邻的周围寻找最陡的下降方向然后朝那个方向迈出一步。梯度下降正是「每一步都沿着当前点的负梯度方向前进」的迭代过程。两种更新规则全量batch梯度下降更新规则$$ w \leftarrow w - \eta \frac{\partial L(S,w)}{\partial w} $$随机梯度下降SGD, Stochastic Gradient Descent先随机挑选一个样本 $p \in \lbrace 0, \cdots, P-1 \rbrace$再更新$$ w \leftarrow w - \eta \frac{\partial L(x[p], y[p],w)}{\partial w} $$其中 $w$ 表示待优化的参数$\eta$ 是学习率步长。学习率的深层含义课程特别指出这里的 $\eta$ 是常数但在更复杂的算法中它可以是矩阵若 $\eta$ 是半正定矩阵我们仍然会「向下走」但不一定沿着最陡下降方向事实上最陡下降方向未必是我们想要移动的方向——这是二阶优化方法如牛顿法及其变体的核心动机之一。不可微函数与零阶方法如果函数不可微——例如存在「洞」、呈阶梯状或平坦区域梯度不提供任何信息——则需要求助于其他方法称为零阶方法0-th Order Methods或无梯度方法Gradient-Free Methods。深度学习几乎完全依赖基于梯度的方法。强化学习中的梯度估计强化学习RL则涉及梯度估计Gradient Estimation因为目标函数通常没有显式的梯度形式。课程以「机器人学骑自行车」为例机器人会不时摔倒目标函数衡量自行车保持不倒的时间——但这个目标函数没有梯度。机器人只能不断尝试不同的行为。关键区别在于监督学习中代价函数 $C$ 通常是可微的且网络基于梯度训练强化学习中代价函数 $C$通常不可微甚至是完全未知的——它像黑盒一样输入进去、返回一个输出。这使得 RL 效率很低尤其在参数向量维数很高时解空间巨大难以找到移动方向。课程进一步介绍 RL 中非常流行的Actor-Critic演员-评论家方法评论家critic本质上是一个已知且可训练的模块 $C$我们可以训练这个可微的 $C$ 模块去近似代价/奖励函数奖励是负代价更像惩罚。这就把代价函数变得可微至少可用可微函数近似从而可以对它做反向传播。仓库中的优化器实现佐证本仓库 extra/utils/optim.py 定义了一个基于torch.optim.Optimizer的基类Optim其step()方法遍历所有参数组for group in self.param_groups: for p in group[params]: if p.grad is None: continue self.my_step(p, self.state[p], group)子类只需实现my_step()即可定义自己的更新规则。例如 extra/optimization.ipynb 中手写的 SGDclass SGDOptimizer(Optim): def __init__(self, params, lr): defaults dict(lrlr) super(SGDOptimizer, self).__init__(params, defaults) def my_step(self, p, state, group): lr group[lr] d_p p.grad.data p.data.add_(-group[lr], d_p)这里的p.data.add_(-lr, d_p)正是课程公式 $w \leftarrow w - \eta \frac{\partial L}{\partial w}$ 的直接翻译。随机梯度下降的优势实际训练中我们用随机梯度来计算目标函数关于参数的梯度不再计算所有样本的平均全量梯度而是只取一个样本计算其损失 $L$ 与梯度然后沿负梯度方向前进一步$$ w \leftarrow w - \eta \frac{\partial L(x[p], y[p],w)}{\partial w} $$即$w$ 更新为 $w$ 减去「步长 × 该样本损失关于参数的梯度」。噪声轨迹与平均行为如果对单个样本做更新会得到非常嘈杂的轨迹如下图所示损失并不是直接「下山」而是随机的——每个样本都会把损失拉向不同方向只是平均值最终把我们带向平均损失的极小值。图 3单样本更新下的随机梯度下降轨迹来源docs/it/week02/02-1.md课程强调虽然看起来低效但在机器学习语境下当样本之间存在冗余redundancy时SGD 比全量批量梯度下降快得多。实际中的批处理Batching在实践中我们并不会真的在单个样本上做 SGD而是使用小批量mini-batch对一批随机样本的梯度求平均然后沿负梯度方向前进一步。这样做的唯一理由是更高效地利用现有硬件GPU、多核 CPU——批量计算更容易并行化批处理是最简单的并行化方式。仓库中的完整训练循环04-spiral_classification.ipynb 给出了一个标准训练循环完整体现了「前向 → 计算损失 → 清零梯度 → 反向传播 → 更新参数」的流程learning_rate 1e-3 lambda_l2 1e-5 model nn.Sequential( nn.Linear(D, H), nn.Linear(H, C) ) model.to(device) criterion torch.nn.CrossEntropyLoss() # we use the optim package to apply # stochastic gradient descent for our parameter updates optimizer torch.optim.SGD(model.parameters(), lrlearning_rate, weight_decaylambda_l2) # built-in L2 # Training for t in range(1000): # Feed forward to get the logits y_pred model(X) # Compute the loss and accuracy loss criterion(y_pred, y) score, predicted torch.max(y_pred, 1) acc (y predicted).sum().float() / len(y) # zero the gradients before running the backward pass optimizer.zero_grad() # Backward pass to compute the gradient of loss w.r.t our learnable params loss.backward() # Update params optimizer.step()这里可以看到 PyTorch 的批处理更新是隐式的torch.optim.SGD默认按参数组整体更新等价于在全量/批量梯度上更新weight_decay提供了内置的 L2 正则化。而loss.backward()正是课程所讲的自动反向传播——用户无需手写任何梯度公式。传统神经网络的结构传统神经网络本质上是线性运算层与逐点非线性运算层交替堆叠线性运算概念上就是矩阵-向量乘法——输入向量乘以权重矩阵非线性运算将加权和向量的每个分量通过一个简单的非线性函数如 $\texttt{ReLU}(\cdot)$、$\tanh(\cdot)$ 等。图 4传统神经网络结构来源docs/it/week02/02-1.md关于「几层网络」的约定图 4 所示是一个2 层网络因为计数的是「线性 非线性」的成对组合pairs。有些人称之为 3 层网络是因为他们在数变量层间向量。课程特别强调一个关键观察如果中间没有非线性那么整个网络可以合并为单层使用不同的权重——因为两个线性函数的复合仍然是线性函数。这解释了为什么现代神经网络必须依赖非线性激活函数。线性块与非线性块的内部结构下图展示了网络的线性与非线性功能块如何堆叠图 5线性与非线性块的内部结构来源docs/it/week02/02-1.md在图中$s[i]$ 是第 $i$ 个单元的加权和$$ s[i]\sum_{j \in UP(i)}w[i,j]\cdot z[j] $$其中 $UP(i)$ 表示 $i$ 的前驱节点集合$z[j]$ 是上一层第 $j$ 个输出。而单元输出$$ z[i]f(s[i]) $$其中 $f$ 是非线性函数。通过非线性函数的反向传播反向传播的第一种方式是穿过一个非线性函数。我们把网络中的某个特定非线性函数 $h$ 单独拿出来其余部分视为「黑盒」。图 6通过非线性函数进行反向传播来源docs/it/week02/02-1.md链式法则Chain Rule使用复合函数求导的链式法则计算梯度$$ g(h(s)) g(h(s))\cdot h(s) $$其中 $h(s)$ 是 $z$ 关于 $s$ 的导数即 $\frac{\mathrm{d}z}{\mathrm{d}s}$。把导数之间的连接写清楚上式可改写为$$ \frac{\mathrm{d}C}{\mathrm{d}s} \frac{\mathrm{d}C}{\mathrm{d}z}\cdot \frac{\mathrm{d}z}{\mathrm{d}s} \frac{\mathrm{d}C}{\mathrm{d}z}\cdot h(s) $$因此如果网络中存在一连串这样的函数我们就可以逐个相乘所有 $h$ 函数的导数一路链式乘法回传到最底层——这就是反向传播的朴素形态。扰动视角的理解用「扰动」来思考更直观将 $s$ 扰动 $\mathrm{d}s$$z$ 将被扰动$$\mathrm{d}z \mathrm{d}s \cdot h(s)$$这进而扰动 $C$$$ \mathrm{d}C \mathrm{d}z\cdot\frac{\mathrm{d}C}{\mathrm{d}z} \mathrm{d}s\cdot h(s)\cdot\frac{\mathrm{d}C}{\mathrm{d}z} $$再次得到与链式法则相同的公式。扰动语言把抽象的求导变成了「误差如何逐层传播」的直觉。通过加权求和的反向传播对于线性模块反向传播发生在加权求和上。这里我们把整个网络视为黑盒只关注从变量 $z$ 连向一组变量 $s$ 的 3 条连接图 7通过加权求和进行反向传播来源docs/it/week02/02-1.md这次扰动是加权和$Z$ 影响多个变量。将 $z$ 扰动 $\mathrm{d}z$$s[0]$、$s[1]$、$s[2]$ 分别被扰动$$ \mathrm{d}s[0]w[0]\cdot \mathrm{d}z $$$$ \mathrm{d}s[1]w[1]\cdot \mathrm{d}z $$$$ \mathrm{d}s[2]w[2]\cdot\mathrm{d}z $$这会通过如下方式扰动 $C$$$ \mathrm{d}C \mathrm{d}s[0]\cdot \frac{\mathrm{d}C}{\mathrm{d}s[0]}\mathrm{d}s[1]\cdot \frac{\mathrm{d}C}{\mathrm{d}s[1]}\mathrm{d}s[2]\cdot\frac{\mathrm{d}C}{\mathrm{d}s[2]} $$于是 $C$ 的变化是这 3 个变化的总和$$ \frac{\mathrm{d}C}{\mathrm{d}z} \frac{\mathrm{d}C}{\mathrm{d}s[0]}\cdot w[0]\frac{\mathrm{d}C}{\mathrm{d}s[1]}\cdot w[1]\frac{\mathrm{d}C}{\mathrm{d}s[2]}\cdot w[2] $$这就是线性层反向传播的本质上游梯度乘以对应权重后求和即「梯度沿边的权重回传」。它对应了 PyTorch 中nn.Linear在反向传播时将梯度按权重矩阵转置回传的操作。PyTorch 实现神经网络传统神经网络的框图线性块$s_{k1}w_k z_k$非线性块$z_kh(s_k)$![传统神经网络的框图线性块与非线性块交替](https://raw.gitcode.com/gh_mirrors/pyt/pytorch-Deep-Learning/raw/3049c83260ba05700e2ab9b7ed13cdbe5ddba0fd/docs/images/week02/02-1/Figure 7.png?utm_sourcegitcode_repo_files)其中 $w_k$ 是矩阵$z_k$ 是向量$h$ 是对每个分量应用标量函数 $h$。这是一个3 层网络按线性-非线性成对计数为 3 对不过大多数现代神经网络并不具有如此清晰的线性/非线性分界结构要复杂得多。面向对象的 PyTorch 实现课程给出了用 PyTorch 以面向对象方式实现神经网络的完整代码import torch from torch import nn image torch.randn(3, 10, 20) d0 image.nelement() class mynet(nn.Module): def __init__(self, d0, d1, d2, d3): super().__init__() self.m0 nn.Linear(d0, d1) self.m1 nn.Linear(d1, d2) self.m2 nn.Linear(d2, d3) def forward(self, x): z0 x.view(-1) # appiattimento del vettore di input (flatten input tensor) s1 self.m0(z0) z1 torch.relu(s1) s2 self.m1(z1) z2 torch.relu(s2) s3 self.m2(z2) return s3 model mynet(d0, 60, 40, 10) out model(image)代码要点解析类定义与参数持有先为网络定义类并在构造函数中使用预定义的nn.Linear类初始化线性层。线性层必须是独立对象因为每个层都包含自己的参数向量nn.Linear还会隐式添加偏置向量bias。前向函数定义forward函数描述如何计算输出使用torch.relu作为非线性激活。不需要为 relu 单独初始化对象因为它没有参数。自动求导我们不需要自己计算梯度——只要给出forward函数PyTorch 就知道如何反向传播并计算梯度这正是 03-autograd_tutorial.ipynb 中详细介绍的 autograd 机制。维度流转以本代码为例输入image形状为(3, 10, 20)nelement()得到 $d0 3\times10\times20 600$。forward中先x.view(-1)展平为 600 维向量随后依次经过m0(600→60)、ReLU、m1(60→40)、ReLU、m2(40→10)最终输出 10 维的 logits对应 10 个类别。广义反向传播通过功能模块与雅可比矩阵前面两节是反向传播的特例课程进一步给出更一般化的形式——通过任意「功能模块functional module」的反向传播图 8通过功能模块进行反向传播来源docs/it/week02/02-1.md向量函数的链式法则设模块输入为 $z_f$维度 $[d_f\times 1]$输出为 $z_g$维度 $[d_g\times 1]$$$ \frac{\partial c}{\partial z_f}\frac{\partial c}{\partial z_g}\cdot \frac{\partial z_g}{\partial z_f} $$对应维度关系$$ [1\times d_f] [1\times d_g]\times[d_g\times d_f] $$这是用链式法则计算 $\frac{\partial c}{\partial z_f}$ 的基本公式。课程特别提醒一个约定标量函数关于向量的梯度是与被求导向量同维的向量为保持记号一致这里将其写作行向量而非列向量。雅可比矩阵Jacobian Matrix矩阵 $\frac{\partial z_g}{\partial z_f}$ 的每个元素为$$ \left(\frac{\partial z_g}{\partial z_f}\right)_{ij}\frac{\partial (z_g)_i}{\partial (z_f)_j} $$也就是说第 $ij$ 个元素等于输出向量第 $i$ 个分量对输入向量第 $j$ 个分量的偏导。给定损失关于 $z_g$ 的梯度我们需要这个雅可比矩阵来计算损失关于 $z_f$ 的梯度。级联cascade的关键结论如果有一串模块我们只需逐个相乘所有模块的雅可比矩阵就能得到损失关于所有内部变量的梯度。从源码看雅可比思想的落地PyTorch 的 autograd 引擎正是以「反向图」的方式逐节点累积梯度链式相乘雅可比03-autograd_tutorial.ipynb 对此有专门讲解而 extra/b-custom_grads.ipynb 则演示了如何自定义梯度函数——即用户手动提供模块的「雅可比乘积」来参与反向传播。多级图中的反向传播考虑神经网络中堆叠的多个模块多级图multi-stage graph图 9多级图中的反向传播来源docs/it/week02/02-1.md两类梯度反向传播算法需要两组梯度关于**状态states**的梯度——网络中每个模块关于**权重weights**的梯度——特定模块内的所有参数。因此每个模块关联两个雅可比矩阵都可以用链式法则进行反向传播。向量函数的链式法则对第 $k$ 个模块 $z_{k1} f_k(z_k, w_k)$关于状态的梯度$$ \frac{\partial c}{\partial z_k}\frac{\partial c}{\partial z_{k1}}\cdot \frac{\partial z_{k1}}{\partial z_k}\frac{\partial c}{\partial z_{k1}}\cdot \frac{\partial f_k(z_k,w_k)}{\partial z_k} $$关于权重的梯度$$ \frac{\partial c}{\partial w_k}\frac{\partial c}{\partial z_{k1}}\cdot \frac{\partial z_{k1}}{\partial w_k}\frac{\partial c}{\partial z_{k1}}\cdot \frac{\partial f_k(z_k,w_k)}{\partial w_k} $$每个模块的两个雅可比矩阵一个关于 $z[k]$状态一个关于 $w[k]$权重。与训练循环的对应这条公式链与 PyTorch 的训练流程一一对应loss.backward()执行从损失开始、沿多级图逐模块回传的链式求导计算出每个nn.Linear参数权重与偏置的.gradoptimizer.step()则用这些梯度执行更新规则。以本仓库 extra/optimization.ipynb 中的带动量 SGD 为例可以看到「梯度累积状态 更新参数」的实现class SGDMomentumOptimizer(Optim): def __init__(self, params, lr, momentum): defaults dict(lrlr, momentummomentum) super(SGDMomentumOptimizer, self).__init__(params, defaults) def my_step(self, p, state, group): lr group[lr] momentum group[momentum] d_p p.grad.data if v not in state: state[v] torch.clone(d_p).detach() else: state[v] d_p momentum * state[v] d_p state[v] p.data.add_(-group[lr] * d_p)其中速度项v的更新v d_p momentum * v是带动量 SGD 的标准形式动量参数momentum通常取 0.9 左右而p.data.add_(-lr * d_p)仍是课程更新公式的落地。总结与延伸阅读核心公式链参数化模型 $\bar{y}G(x,w)$ → 损失 $L(S,w)\frac{1}{P}\sum L(x,y,w)$ → 更新规则 $w \leftarrow w - \eta \frac{\partial L}{\partial w}$SGD 取单个样本或小批量。反向传播本质沿计算图反向应用链式法则——非线性块回传乘 $h(s)$线性块加权和回传按权重加权求和一般模块则用雅可比矩阵连乘。工程落地PyTorch 中只需定义nn.Module子类与forwardautograd 自动完成全部梯度计算训练循环 zero_grad()→backward()→step()。与本主题直接相关的仓库资源docs/it/week02/02-1.md本文依据的意大利语课程笔记英文原版04-spiral_classification.ipynb含 SGD 优化器与完整训练循环的螺旋分类实践extra/utils/optim.pyOptim优化器基类extra/optimization.ipynb手写 SGD / 带动量 SGD / RMSProp / Adam 优化器对比03-autograd_tutorial.ipynbPyTorch autograd 自动求导教程extra/b-custom_grads.ipynb自定义梯度雅可比乘积的实现示例。赞分享示例工程【免费下载链接】NYU-DLSP20NYU Deep Learning Spring 2020项目地址https://gitcode.com/gh_mirrors/pyt/pytorch-Deep-Learning点击查看免费下载相关推荐梯度下降与反向传播算法精解NYU-DLSP20 第二周课程笔记PyTorch 实现篇梯度下降与反向传播算法精解NYU DLSP20 第二周课程笔记PyTorch 实现篇 本文整理自 NYU Deep Learning Spring 202示例工程NYU-DLSP20 第二周深度学习课程梯度下降、反向传播算法与 PyTorch 神经网络实战NYU DLSP20 第二周深度学习课程梯度下降、反向传播算法与 PyTorch 神经网络实战 本文基于 NYU Deep Learning Spring 2示例工程NYU-DLSP20 第 2 周梯度下降与反向传播算法导论PyTorch 实现NYU DLSP20 第 2 周梯度下降与反向传播算法导论PyTorch 实现 导读 本文整理自 NYU Deep Learning Spring 202示例工程上一篇如何为深度学习项目做贡献Awesome Deep Learning Resources 社区终极指南下一篇SQLAlchemy 版本计数器Version Counter配置完全指南从整数计数到服务端版本控制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

个人技能数据基础设施:构建可验证、可衰减、可进化的技能事件流系统

个人技能数据基础设施:构建可验证、可衰减、可进化的技能事件流系统

1. 项目概述:当“skills”不再只是简历上的单词,而成为可验证、可组合、可进化的个人能力操作系统“skills”这个词最近在技术社区、职业发展平台和教育产品后台的搜索日志里,出现频率陡增——但它早已不是求职简历末尾那行加粗的“Technical…

2026/10/10 12:16:53 阅读更多 →
262K 长上下文实测:把整本书喂给 Yandex 新模型,它记住了多少

262K 长上下文实测:把整本书喂给 Yandex 新模型,它记住了多少

262K 长上下文实测:把整本书喂给 Yandex 新模型,它记住了多少 【免费下载链接】AliceAI-Foundation-80B-A3B-Base 项目地址: https://ai.gitcode.com/hf_mirrors/yandex/AliceAI-Foundation-80B-A3B-Base "上下文 262K"在参数表里只是…

2026/10/10 12:16:53 阅读更多 →
把几百 MB 的三维模型,变成对方点开就能看的一个网页

把几百 MB 的三维模型,变成对方点开就能看的一个网页

内测免费不用注册模型不上传断网也能用中文界面 把几百 MB 的三维模型, 变成对方点开就能看的一个网页 导入 .glb 模型 → 导出一个网页文件 → 把这个文件发给客户。 客户不用装 UG / SolidWorks / 任何三维软件,手机、平板、电脑有浏览器就能打开&am…

2026/10/10 12:15:52 阅读更多 →

最新新闻

高通 IQ9075 大模型 Benchmark 全维度实测:从算力基准到场景落地,TaoToken 统一 Key 打通评测链路

高通 IQ9075 大模型 Benchmark 全维度实测:从算力基准到场景落地,TaoToken 统一 Key 打通评测链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 15:59:48 阅读更多 →
同一数据库中两个表间复制数据:用 TaoToken 统一 Key 打通 AI 辅助 SQL 生成与校验

同一数据库中两个表间复制数据:用 TaoToken 统一 Key 打通 AI 辅助 SQL 生成与校验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 15:59:48 阅读更多 →
5 分钟用 Ollama 跑 DeepSeek Coder 33B:VS Code 自动补全 + Gradio 本机 Web Chat 全流程

5 分钟用 Ollama 跑 DeepSeek Coder 33B:VS Code 自动补全 + Gradio 本机 Web Chat 全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 15:59:48 阅读更多 →
FRFT做LFM参数估计:原理、离散实现与工程避坑指南

FRFT做LFM参数估计:原理、离散实现与工程避坑指南

简介:这份资源面向雷达、通信与信号处理方向的学习者和研究人员,聚焦线性调频(LFM)信号的参数估计问题,借助分数阶傅里叶变换(FRFT)在时频域上揭示信号时变频率特性,从而提取中心频率…

2026/10/10 15:59:48 阅读更多 →
YOLOv8-pose本地部署实战:从环境搭建到跌倒检测

YOLOv8-pose本地部署实战:从环境搭建到跌倒检测

简介:本资源是一套开箱即用的人体姿势识别实战方案,面向人工智能初学者、计算机视觉开发者及教学实践者,解决图片与视频中人体关键点检测与姿态分析的快速落地问题。压缩包共4个文件(31.33MB),含YOLOv8s-po…

2026/10/10 15:59:47 阅读更多 →
从零打造Linux无线热点:hostapd配置实战与排错指南

从零打造Linux无线热点:hostapd配置实战与排错指南

聊到把一台普通Linux设备变成无线热点,绕不开的工具就是hostapd。我在实际项目里用它把一台旧笔记本和一张USB无线网卡改造成了机房临时调试用的接入点,说实话,这个工具配置起来不算难,但坑确实不少,尤其是初学者容易卡…

2026/10/10 15:58:46 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →