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

MLP实现加法运算:PyTorch模型预测生成问题求助

解决加法神经网络的预测问题

你的代码训练部分逻辑正确,但预测环节存在两个核心问题:

  1. model.generate 方法不存在:PyTorch的Sequential模型没有内置generate方法,要获取预测结果,直接将输入张量传入模型即可(和训练时调用model(X)的方式一致)。
  2. 输入张量维度不匹配:训练时的输入是(N, D)形状的张量(N个样本,每个样本D维),而你定义的idx是1D张量[3,4],模型无法直接处理。需要为其添加批量维度,转换为2D张量(即使只有一个样本)。

修正后的预测代码

# 切换模型到评估模式(无训练专属层时可选,但这是标准评估流程)
model.eval()

# 定义测试输入,转换为模型要求的2D张量(形状为(1, 2))
test_input = torch.tensor([3.0, 4.0]).unsqueeze(0)  # 添加批量维度
# 也可以用reshape实现:test_input = torch.tensor([3.0,4.0]).reshape(1,2)

# 获取预测结果,评估时无需计算梯度
with torch.no_grad():
    prediction = model(test_input)
print(f"输入[3,4]的预测结果: {prediction.item():.4f}")

# 测试多个输入的示例
test_inputs = torch.tensor([[1.5, 2.5], [0.3, 0.7], [10.0, 20.0]])
with torch.no_grad():
    predictions = model(test_inputs)
print("\n多个输入的预测结果:")
for input_pair, pred in zip(test_inputs, predictions):
    print(f"{input_pair.numpy()} → {pred.item():.4f}")

完整修正代码

将预测部分替换为上述代码后,完整可运行代码如下:

import torch

torch.manual_seed(42)

N = 1000  # number of samples
D = 2     # Input dimension
C = 1     # Output dimension
lr = 1e-2 # learning rate

X = torch.rand(N, D)                      # 1000 numbers of 2 dims
y = torch.sum(X, axis=-1).reshape(-1, C)  # This is summing X rows and reshaping it to 1 output dimension

model = torch.nn.Sequential(torch.nn.Linear(D, C))

criterion = torch.nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=lr)

for i in range(500):
    y_pred = model(X)
    loss = criterion(y_pred, y)
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()
    if i % 50 == 0:
        print(i)
        print('---')
        print(loss.item())

# 预测环节
model.eval()
# 单个输入测试
test_input = torch.tensor([3.0, 4.0]).unsqueeze(0)
with torch.no_grad():
    prediction = model(test_input)
print(f"输入[3,4]的预测结果: {prediction.item():.4f}")

# 多个输入测试
test_inputs = torch.tensor([[1.5, 2.5], [0.3, 0.7], [10.0, 20.0]])
with torch.no_grad():
    predictions = model(test_inputs)
print("\n多个输入的预测结果:")
for input_pair, pred in zip(test_inputs, predictions):
    print(f"{input_pair.numpy()} → {pred.item():.4f}")

关键说明

  • model.eval():切换到评估模式,确保模型中训练专属层(如Dropout、BatchNorm)按评估逻辑运行,是PyTorch评估的标准操作。
  • torch.no_grad():评估阶段无需计算梯度,使用该上下文管理器可节省内存并提升计算速度。
  • 张量维度匹配:模型输入必须与训练时的输入维度一致((批量大小, 输入维度)),单个样本需通过unsqueeze或reshape添加批量维度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:21:26