You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

扩散模型采样外部点时张量拼接维度错误求助

扩散模型采样维度错误排查方案

第一个错误:Dimension out of range (expected to be in range of [-1, 0], but got 1)

这个错误核心是**torch.cat拼接的两个张量维度不匹配**:

  • 假设你的xt是[batch_size, 2]形状的张量(对应每个点的x、y坐标),而ts是[batch_size]的一维张量(时间步标量)。一维张量仅存在dim=0维度,用dim=1拼接会超出其维度范围。
  • 解决方法:先将ts升维为[batch_size, 1],再执行拼接:
    # 把一维的ts升为二维
    ts = ts.unsqueeze(1)
    est_noise = netD(torch.cat((xt, ts), dim=1))
    

第二个错误:mat1 and mat2 shapes cannot be multiplied (2x2 and 3x24)

这个错误说明输入netD的张量特征维度与网络第一层不匹配:

  • 你的netD第一层应该期望输入特征数为3(2个坐标+1个时间步),但调整xt维度后,输入特征数变成了2,导致第一层的矩阵(比如nn.Linear(3,24))无法和2x2形状的输入张量做乘法。
  • 解决方法:
    • 确认netD输入层维度:检查网络第一个线性层是否为nn.Linear(3, ...),如果是,必须保证输入张量最后一维为3(即[batch_size, 3])。
    • 对齐采样与训练的输入逻辑:测试正方形外的点时,xt形状要和训练时一致(比如[batch_size, 2]),加上升维后的ts([batch_size,1]),拼接后得到[batch_size,3]的输入张量。
    • 排查维度调整操作:确认调整xt维度时,没有误将其改成[batch_size,1]或其他不符合要求的形状。

额外验证点

  • 训练与采样的输入构造逻辑必须完全一致:训练时如何拼接坐标与时间步输入给netD,采样时就要完全照搬,包括维度处理细节。
  • 测试正方形外的点时,确保xt的张量形状和训练时的坐标输入形状一致,不要因点的位置改变张量维度。

内容的提问来源于stack exchange,提问作者Eliza R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:52:07