AI-PyTorch(一)基础代码实操和自动求导

一、环境搭建

Anaconda+VSC+PyTorch。VSC我已经有了,只需安装插件,这就不详说了。

组件 推荐版本/类型 必装/选装 核心作用
Anaconda 2025.03 或更高 (Python 3.12+) 必装 包管理器 + 虚拟环境隔离
Visual Studio Code 最新稳定版 (v1.90+) 已装 代码编辑器
VSC 插件 - Python 最新版 (ms-python.python) 必装 语法高亮、调试、环境识别
VSC 插件 - Pylance 最新版 (ms-python.vscode-pylance) 必装 类型检查与智能提示(依赖Python插件)
PyTorch 2.5.1 或 2.6.0 (稳定版) 必装 深度学习框架

1.Anaconda

++https://repo.anaconda.com/archive/Anaconda3-2025.12-1-Windows-x86_64.exe++

Anaconda 是一个Python/R 数据科学发行版 ,简单说它是一个打包好的 Python 环境 + 大量预装的数据科学工具包

2.PyTorch:

**深度学习框架,**做深度学习 / AI 项目的。

  • 用于构建和训练神经网络

  • 由 Meta(Facebook)开发

  • 广泛应用于:计算机视觉、NLP、强化学习等

用 Anaconda,安装 PyTorch 特别方便

  • 如果你是 NVIDIA 显卡用户(GPU 版)conda 会自动检测你的驱动并匹配兼容的 CUDA 版本。

    bash 复制代码
    conda install pytorch torchvision torchaudio -c conda-forge
  • 如果你没有 NVIDIA 显卡(CPU 版)

    bash 复制代码
    conda install pytorch torchvision torchaudio cpuonly -c conda-forge
bash 复制代码
// 创建专属环境
conda create -n pytorch_env python=3.12
conda activate pytorch_env

3.VSC

在vsc中开发,运行时,记得切pytorch_env

二、PyTorch基础

1.基本操作

1.1 数学运算

(1)创建张量

方法 说明 示例
torch.tensor(data) 从 Python 数据创建 torch.tensor([1, 2, 3])
torch.zeros(shape) 全0张量 torch.zeros(2, 3)
torch.ones(shape) 全1张量 torch.ones(2, 3)
torch.rand(shape) 均匀分布 [0,1) torch.rand(2, 3)
torch.randn(shape) 标准正态分布 torch.randn(2, 3)
torch.randint(low, high, shape) 随机整数 [low, high) torch.randint(1, 10, (2, 3))
torch.arange(start, end, step) 等差数列 torch.arange(0, 10, 2)
torch.linspace(start, end, steps) 等间隔数列 torch.linspace(0, 1, 5)
torch.eye(n) 单位矩阵 torch.eye(3)
torch.empty(shape) 未初始化内存(垃圾值) torch.empty(2, 3)
python 复制代码
import torch

# 1.创建张量。创建张量,可以里理解为声明变量、张量与python普通变量的区别:张量可以在GPU运行,速度翻倍,能用来计算梯度,可以直接批量计算。
#随机int,生成一个 2行3列 的张量,每个元素是在 [1, 10) 范围内的随机整数(即 1 到 9),manual_seed(42) 保证每次运行结果一样
torch.manual_seed(42)
a=torch.randint(1,10,(2,3),dtype=torch.int8)
print(a)

# 随机0-1均匀分布:生成一个 2行3列 的张量,每个元素是在 [0, 1) 区间内的随机浮点数(均匀分布),manual_seed(42) 保证每次运行结果一样
torch.manual_seed(42)
b=torch.rand((2,3),dtype=torch.float16)
print(b)

# 把张量 b(float16 类型)转换为 NumPy 数组
b.numpy()
print(b.numpy()) 

# 创建一个标量张量(0维张量),数值是 1,数据类型是 int16
c=torch.tensor(1,dtype=torch.int16)

# 创建一个标量张量,数值是 1.0,数据类型是 float32
d=torch.tensor(1.0,dtype=torch.float32)
# 专门用于标量张量(只有一个元素的张量),把它转换成 Python 原生数值类型
d.item()
print(d.item()) 

# 多元素用 tolist()
y = torch.tensor([1, 2, 3])
print(y.tolist()) # [1, 2, 3]

# 从 Python 列表创建张量
e = torch.tensor([1, 2, 3, 4])

# 查看形状、数据类型
print(e.shape)      # torch.Size([4])
print(e.dtype)      # torch.int64(默认)

# 改变形状
f = e.reshape(2, 2)
print(f)            # tensor([[1, 2], [3, 4]])
张量属性
属性 说明 示例
.shape 张量形状(元组) t.shapetorch.Size([2, 3])
.size() .shape t.size()torch.Size([2, 3])
.dtype 数据类型 t.dtypetorch.float32
.device 所在设备(CPU/GPU) t.devicedevice(type='cpu')
.ndim 维度数量 t.ndim2
.numel() 元素总数 t.numel()6
.requires_grad 是否需要梯度 t.requires_gradTrue/False
张量数据类型
类型 用途 内存占用
torch.float32 深度学习默认 (绝大多数场景),深度学习标准 4字节
torch.float16 省显存、加速(混合精度训练),GPU 加速,省显存 2字节
torch.int64 索引、标签 8字节
torch.int32 节省内存的整数 4字节
torch.int8 极省内存(量化模型) 1字节
torch.bool 条件判断、掩码 1字节
精度规则
复制代码
类型提升(低精度 → 高精度)
int16 + float32 → float32   # 自动提升
int8 + int32 → int32        # 自动提升

PyTorch 在处理不同类型张量的运算时,会遵循类型提升规则:

低精度类型会自动提升为高精度类型,避免数据丢失。

(2)对比普通变量与张量

对比维度 普通 Python 变量 PyTorch 张量
本质 Python 对象的引用(指向内存中的整数、字符串、列表等) 一个连续内存块,存储大量同类型数值(类似数组)
能装什么 任意类型(int, float, str, list, dict, 自定义对象...) 只能是数值(int, float,且所有元素类型必须一致)
计算方式 解释器逐行执行,循环慢 向量化运算(底层 C++/CUDA 实现,极快)
硬件支持 只能 CPU ✅ CPU + GPU(.to('cuda')
自动求导 ❌ 不支持 ✅ 支持(requires_grad=True
存储结构 分散在堆内存中,元素可能不连续 连续内存块(访问效率高)
典型用途 逻辑控制、字符串处理、数据结构存储 数值计算、深度学习、科学计算

(3)使用场景

场景 用谁 为什么
存放图片、音频、文本向量 张量 数据量大,需要 GPU 加速和批量运算
神经网络权重和偏置 张量 需要自动求导来更新
记录训练日志(loss、acc) 普通变量 就是单个数字,不需要张量的超能力
字符串处理、文件路径 普通变量 张量不支持字符串
简单的数学计算(a+b 都可以,少量数据用普通变量即可 杀鸡不用牛刀
大量数据排序、统计 张量(或 NumPy) 向量化操作快得多

(4)代数运算

运算 运算符 函数 是否支持广播 说明
加法 + torch.add(a, b) ✅ 支持 对应元素相加
减法 - torch.sub(a, b) ✅ 支持 对应元素相减
乘法(逐元素) * torch.mul(a, b) ✅ 支持 对应元素相乘(哈达玛积)
除法 / torch.div(a, b) ✅ 支持 对应元素相除
幂运算 ** torch.pow(a, b) ✅ 支持 a 的 b 次方
取负 - torch.neg(a) N/A 取每个元素的相反数
绝对值 - torch.abs(a) N/A 取每个元素的绝对值
平方根 - torch.sqrt(a) N/A 取每个元素的平方根
指数 - torch.exp(a) N/A e 的 a 次方
自然对数 - torch.log(a) N/A ln(a)
取整 - torch.floor(a) torch.ceil(a) torch.round(a) N/A 向下/向上/四舍五入取整
取余 % torch.remainder(a, b) ✅ 支持 a 除以 b 的余数

大部分逐元素运算(如加减乘除)确实要求形状完全一致,但 PyTorch 有一个"外挂"叫"广播机制(Broadcasting)",可以在特定条件下让形状不同的张量也能运算

广播:从最后一个维度开始,往前比较两个张量的形状,必须满足以下条件之一:

  1. 维度大小相等(比如都是 3)

  2. 其中一个维度大小是 1(可以被拉伸)

  3. 其中一个张量缺少这个维度(视为 1)

    import torch

    A = torch.tensor([[1, 2, 3], [4, 5, 6]]) # 形状 (2, 3)
    B = torch.tensor([10, 20, 30]) # 形状 (3,)
    C = A + B
    print(C)

    [[1+10, 2+20, 3+30], → [[11, 22, 33],
    [4+10, 5+20, 6+30]] [14, 25, 36]]

如果两个张量在某个维度上既不相等,也没有 1,就无法广播,直接报错。

(6)向量/矩阵运算

运算 运算符 函数 形状要求 说明
向量点积(内积) - torch.dot(a, b) 两者都是 1D,且长度相同 对应元素相乘再求和 → 标量
矩阵乘法(2D) @ torch.mm(a, b) a: (m×n), b: (n×p) 标准矩阵乘法 → (m×p)
批量矩阵乘法(3D+) @ torch.bmm(a, b) a: (b×n×m), b: (b×m×p) 批量矩阵乘法 → (b×n×p)
通用矩阵乘法(任意维度) @ torch.matmul(a, b) 自动适配 最推荐,自动处理各种维度
向量×矩阵 @ torch.matmul(a, b) a: (n,), b: (n, m) → (m,)
矩阵×向量 @ torch.matmul(a, b) a: (m, n), b: (n,) → (m,)
外积 - torch.outer(a, b) 两者都是 1D a 和 b 的外积 → (len(a), len(b))
矩阵转置 .T torch.transpose(a, 0, 1) 2D 行列互换
矩阵求逆 - torch.inverse(a) 方阵 (n×n) 矩阵的逆
矩阵行列式 - torch.det(a) 方阵 (n×n) 计算行列式(标量)
特征值/特征向量 - torch.linalg.eig(a) 方阵 (n×n) 计算特征值和特征向量

1.2 元素选取(重要)

方式 示例 返回类型 是否共享 内存 修改是否 影响原张量
整数索引 a[2, 3] 标量(或降维张量) ❌ 复制 ❌ 不会
整数张量索引(花式索引) a[[2, 3], [1, 2]] 新张量(形状同索引形状) ❌ 复制 ❌ 不会
切片 a[1:4, 2:5] 视图(View) 共享
切片 + 整数索引(混合) a[1:4, 2] 视图(View) 共享
切片 + 花式索引(混合) a[1:4, [1, 2]] 可能复制(⚠️ 不保证视图) ❌ 不保证 ❌ 可能不会
clone() a[1:4].clone() 独立副本 ❌ 不共享 ❌ 不会
索引
python 复制代码
torch.manual_seed(42)
a=torch.randint(1,10,(4,4),dtype=torch.int8) 
# tensor([[7, 6, 8, 5],
        # [1, 3, 8, 6],
        # [5, 3, 5, 5],
        # [9, 1, 1, 5]], dtype=torch.int8)
ix=a[[2,3],[2]] # [2,3]指2行,3行 ,[2]指2列,索引从0开始计
print(ix) #tensor([5, 1], dtype=torch.int8)
ix[1]=8  #当前只有索引 0 和 1
print(a) # a是不变的哈
切片
python 复制代码
# 切片
# a=tensor([[7, 6, 8, 5],
        # [1, 3, 8, 6],
        # [5, 3, 5, 5],
        # [9, 1, 1, 5]], dtype=torch.int8)
slice=a[:2,:3] #取前两行(索引 0 和 1)和前 3 列(索引 0,1,2)
slice[0][2]=12 #修改值
print(a) 
#原张量a发生变化了 tensor([[ 7,  6, 12,  5],
        # [ 1,  3,  8,  6],
        # [ 5,  3,  5,  5],
        # [ 9,  1,  1,  5]], dtype=torch.int8)

假设张量 a 是:

复制代码
        列0  列1  列2  列3
行0      1    2    3    4
行1      5    6    7    8    ← 前两行(行0,行1)
行2      9   10   11   12
         ↑          ↑
       前3列      第4列不取
       (列0,1,2)

执行 slice = a[:2, :3] 后,slice 得到的是绿色框里的部分:

复制代码
slice = [[1, 2, 3],   ← 行0,列0-2
         [5, 6, 7]]   ← 行1,列0-2
  • : 单独使用 = 全部取

  • :n = 从开头取到第 n-1 个(前 n 个)

  • m:n = 从第 m 个取到第 n-1 个

  • m: = 从第 m 个取到最后

  • ::k = 步长为 k

  • 本质上都是m:n:k,上面的写法是省略的写法


m:起始索引(包含)

n:结束索引(不包含

k:步长(默认为 1)

参数 步长为正(step > 0 步长为负(step < 0
start 默认值 0(开头) -1(末尾,即最后一个元素)
stop 默认值 张量长度(末尾之后) 负的 张量长度 减 1(开头之前)
取值方向 从左到右(正向) 从右到左(反向)

克隆
python 复制代码
# 克隆:clone后是新副本
torch.manual_seed(42)
q=torch.rand((2,3),dtype=torch.float16)
# tensor([[0.8823, 0.9150, 0.3828],
        # [0.9595, 0.3904, 0.6011]], dtype=torch.float16)
slice1=q[:2,:1].clone()
print(slice1) 
# tensor([[0.8823],
#         [0.9595]], dtype=torch.float16)
slice1[1][0]=12 #修改值
print(q) 
# tensor([[0.8823, 0.9150, 0.3828],
#         [0.9595, 0.3904, 0.6011]], dtype=torch.float16)
极值
python 复制代码
# q=tensor([[0.8823, 0.9150, 0.3828],
#         [0.9595, 0.3904, 0.6011]], dtype=torch.float16)

print(q.max()) #全局最大值
#tensor(0.9595, dtype=torch.float16)

print(q.min()) #全局最小值
#tensor(0.3828, dtype=torch.float16)

print(q.max(0)) #每列最大值 ,等价q.max(dim=0)
# torch.return_types.max(
# values=tensor([0.9595, 0.9150, 0.6011], dtype=torch.float16),
# indices=tensor([1, 0, 1]))

print(q.min(1)) #行最小值,等价q.max(dim=1)
# values=tensor([0.3828, 0.3904], dtype=torch.float16),
# indices=tensor([2, 1]))
复制代码
张量 q (2行 × 3列):
        列0     列1     列2
行0    0.8823  0.9150  0.3828   ← 行0的最小值在列2 (0.3828)
行1    0.9595  0.3904  0.6011   ← 行1的最小值在列1 (0.3904)
        ↑       ↑       ↑
    列0最大  列1最大  列2最大
    在行1    在行0    在行1
    (0.9595) (0.9150) (0.6011)

1.3 元素修改

步骤 操作类别 PyTorch函数/方法 说明 代码示例
调整shape 改变形状 torch.reshape() / tensor.view() 返回新的形状视图(view要求内存连续) x = torch.randn(4, 6) y = x.view(3, 8) z = x.reshape(2, 12)
压缩/扩展维度 torch.squeeze() / torch.unsqueeze() 删除/增加大小为1的维度 x = torch.randn(1, 3, 1, 5) y = x.squeeze() # (3,5) z = x.unsqueeze(0) # (1,1,3,1,5)
转置(交换维度) torch.transpose() / tensor.permute() 交换指定维度 / 按新顺序重排维度 x = torch.randn(2, 3, 4) y = x.transpose(0, 1) # (3,2,4) z = x.permute(2, 0, 1) # (4,2,3)
展平 torch.flatten() 将指定维度展平为一维 x = torch.randn(2, 3, 4) y = x.flatten(start_dim=1) # (2,12)
调整 类型 数据类型转换 tensor.to(dtype) / tensor.type() 改变张量的数据类型 x = torch.tensor([1, 2]) y = x.to(torch.float32) z = x.type(torch.float64)
设备转换 tensor.to(device) 在CPU/GPU之间移动张量 x = torch.randn(3,4) y = x.to('cuda') z = x.to('cpu')
调整 维度 增加新维度 torch.unsqueeze() 在指定位置插入大小为1的新维度(同上面) 同上 unsqueeze
删除维度(大小为1) torch.squeeze() 删除所有或指定大小为1的维度(同上面) 同上 squeeze
维度重排 torch.permute() / tensor.transpose() 任意交换维度顺序 / 交换两个维度(同上) 同上 permute / transpose
拆分 按块拆分 torch.chunk() 将张量沿指定维度均匀拆分为多个块 x = torch.randn(4, 8) chunks = x.chunk(2, dim=1) # 两个 (4,4)
按大小拆分 torch.split() 沿指定维度按指定大小或列表拆分 x = torch.randn(4, 8) splits = x.split([3, 5], dim=1) # (4,3), (4,5)
按索引拆分 torch.index_select() 按索引选择特定行/列(非严格拆分,但常用) x = torch.randn(4, 8) indices = torch.tensor([0, 2]) y = x.index_select(0, indices) # (2,8)
合并 拼接 torch.cat() 沿已有维度拼接(不增加维度) a = torch.randn(2,3) b = torch.randn(2,3) c = torch.cat([a,b], dim=0) # (4,3)
堆叠 torch.stack() 沿新维度堆叠(增加维度) a = torch.randn(2,3) b = torch.randn(2,3) c = torch.stack([a,b], dim=0) # (2,2,3)

2.自动求导

在训练神经网络时,我们需要不断调整参数(权重和偏置),让模型的预测结果越来越准。

  • 怎么调整? → 使用梯度下降(Gradient Descent)

  • 梯度是什么? → 梯度是损失函数对参数的偏导数,它指出了参数应该"往哪个方向调"能让损失下降得最快。

  • 求梯度需要计算导数,神经网络动辄百万、千万级别的参数,手动求导根本不现实。

于是PyTorch提供了**自动求导(Autograd)**机制:你只需要定义好前向计算(输入→输出),PyTorch会自动帮你算出所有参数的梯度。

(1)数学公式理解

(2)训练过程

复制代码
┌─────────────────────────────────────────────────────┐
│                    训练过程                          │
│                                                     │
│  ① 提前准备好样本      ② 随机初始化            ③ 计算误差        │
│     (x, y)         +      θ 组       →    h(x) - y   │
│      (固定不变)            (动态值)         (判断差多少)    │
│                              ↑                        │
│                              │                        │
│  ⑤ 更新 θ 组 ←──────────④ 梯度下降           │
│     (动态调整)            (根据误差方向调整)           │
│                              │                        │
│  ⑥ 重复 ①~⑤ 很多次...                               │
│     ↓                                                │
│  ⑦ 最终 θ 组固定下来(收敛),模型训练完成!            │
└─────────────────────────────────────────────────────┘

(x, y)(样本值)

  • (x, y)(样本值)就是训练集(Training Set)

  • 作用: 它们是"标准答案"或"老师"。在训练开始前,这些数据已经收集好了(比如过去一年的房价、猫狗的图片标签)。模型最终学得好不好,就是看预测出来的 h(x) 跟这些提前准备好的 y 像不像。

θ 组(参数)

  • θ 组(参数)叫模型的权重(Weights)参数(Parameters)

  • 作用: 它们就像是一块橡皮泥 ,或者是收音机上的调频旋钮

    • 一开始,它们是随机的(比如全是0或者随机小数)。

    • 在训练过程中,它们会动态地、一步一步地(通过梯度下降)发生变化。

    • 最终,它们会固定下来,变成一组最优的值。这时候,模型就"训练好了"。

梯度下降


假设损失函数是 J(θ)=θ^2(一个简单的抛物线),我们想找到使 J 最小的 θ。

手动计算过程
步骤 θθ 值 梯度 J′(θ)=2θJ′(θ)=2θ 更新(α=0.1α=0.1) 新 θθ
初始 10.0 20.0 10−0.1×20=8.0 8.0
第2步 8.0 16.0 8−0.1×16=6.4 6.4
第3步 6.4 12.8 6.4−0.1×12.8=5.12 5.12
... ... ... ... ...
第N步 ≈ 0 ≈ 0 趋近0 ≈ 0
代入到"房价预测"场景

假设我们要预测房价:

  • 提前准备的样本 (x, y)

    • x(面积):80㎡,100㎡,120㎡

    • y(真实房价):200万,250万,300万

  • θ 组(动态调整的参数)

    • 假设模型是

    • 一开始:θ0=0,θ1=1,预测 80㎡ 只有 80万(离谱!误差巨大)。

    • 训练中:通过梯度下降,θ1​ 从 1 慢慢变成 2.5,θ0​ 从 0 慢慢变成 0。

    • 最终:θ0=0,θ1=2.5。模型变成 h(x)=2.5x。预测 80㎡ 得出 200万,完美匹配!

(3)PyTorch

python 复制代码
# 自动求导
# 1.第一个参数:1.0(data):传入 1.0(Python 浮点数)→ 创建一个 0 维标量张量,值为 1.0,dtype 默认是 torch.float32。也可以传列表、嵌套列表来创建向量/矩阵:
# 2.requires_grad=True:表示这个张量是否需要被追踪梯度,只有浮点张量才能设 requires_grad=True
x=torch.tensor(2.0,requires_grad=True)
y=x**2+3*x+1
y.backward()
print("x =", x.item())  # x = 2.0
print("y =", y.item()) # y = 11.0
print("dy/dx =", x.grad.item()) #dy/dx = 7.0

# 向量
x1=torch.tensor([1.0,2.9,3.5],requires_grad=True)
w=torch.tensor([3.0,5.1,4.5],requires_grad=True)
b=torch.tensor([3.0,6.0,3.0],requires_grad=True)

y=w*x1+b
# backward() 要求标量
y.sum().backward()

print("dy/dx =", x1.grad)  # dy/dx = tensor([3.0000, 5.1000, 4.5000])
print("dy/dw =", w.grad)   # dy/dw = tensor([1.0000, 2.9000, 3.5000])
print("dy/db =", b.grad)   # dy/db = tensor([1., 1., 1.])

3.其他框架

分类 工具名称 所属公司 / 组织 流行程度与现状
基本操作层 PyTorch Meta (Facebook) 极流行:AI顶会论文中占比达80%,是当前研究与开发的主流框架。
TensorFlow Google 流行:市场占有率约37.5%,是企业级生产部署的重要选择。
MXNet Apache 基金会 已淘汰:曾由AWS支持,但官方已停止维护,不建议在新项目中使用。
集成、优化层 Keras Google 流行:TensorFlow官方高层API,用户友好,适合快速搭建原型。
PyTorch Lightning Grid.ai (社区项目) 流行:为PyTorch提供轻量级封装,将工程代码与科学逻辑分离,便于大规模训练。
FastAI fast.ai (社区项目) 小众但口碑好:在PyTorch之上构建,以极少的代码实现高质量基线,在教育领域很受欢迎。
模型应用层 Transformers Hugging Face 极流行:提供数千个预训练模型的统一接口,GitHub星标超16万,是NLP和基础模型时代的标准。
ModelScope (魔搭) 阿里巴巴达摩院 国内流行:国内最大的开源模型社区之一,提供模型体验、训练、部署一站式服务。
Paddle系列 (飞桨) 百度 特定领域流行:中国首个自主研发的产业级深度学习平台,在中文NLP、OCR等场景有独特优势。
  • 做研究或跟踪前沿模型PyTorch + Transformers 是当前最常见的组合。

  • 面向企业生产部署TensorFlow/KerasPaddlePaddle 在工程化方面有成熟的工具链。

  • 快速验证想法或做教学演示FastAIKeras 的上手成本会低很多。

  • 国内中文场景ModelScopePaddle系列 的本土化支持会更有优势。

如果下次有人给你推荐一个新的 AI 框架,你可以用这张图里的四个维度问自己:

  1. 接口友好吗? 我大概要花多久才能写个 Demo 出来?

  2. 定位匹配吗? 它是适合做研究快速试错,还是适合明天上线给客户用?

  3. 性能可迭代吗? 如果未来数据量涨 10 倍,这个框架有现成的优化方案吗?

  4. 社区有活人吗? 遇到问题,我能多快找到答案或源码?有人理你吗?

相关推荐
妙码生花1 小时前
golang 应用服务端部署(使用 systemd 服务)
开发语言·人工智能·后端·golang·node.js·php·gin
欧特克_Glodon1 小时前
OpenCV计算机视觉开发入门与实践<三十八>:图像添加数字水印
c++·人工智能·opencv·计算机视觉
智圣新创011 小时前
第二课堂育人体系数字化落地:从需求对齐到价值释放的全域建设路径
人工智能
2601_962284501 小时前
uv:终结 Python 虚拟环境管理乱局
python·项目管理·uv·虚拟环境·依赖管理
GlobalInfo1 小时前
34.2%年复合增长率背后,AI量子计算市场规模影响因素会是什么?
大数据·人工智能·量子计算
智驭未来掌门人1 小时前
从LLM Gateway到Agent Gateway:大模型网关架构演进的技术分析
人工智能
RisunJan1 小时前
DeepSeek 全景技术指南:从混合推理架构到提示语工程实战(2026.09)
大数据·人工智能·架构
空堂与归1 小时前
dsh 插件报「未注册 hmr」又空白?两处根因排查与解决
人工智能
能源革命1 小时前
AI 日报 2026-09-10
人工智能·dubbo