MLP实现加法运算:PyTorch模型预测生成问题求助
解决加法神经网络的预测问题
你的代码训练部分逻辑正确,但预测环节存在两个核心问题:
model.generate方法不存在:PyTorch的Sequential模型没有内置generate方法,要获取预测结果,直接将输入张量传入模型即可(和训练时调用model(X)的方式一致)。- 输入张量维度不匹配:训练时的输入是
(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
相关产品推荐
相关产品推荐

