首页 > 解决方案 > Tensorflow 到 PyTorch - model.predict 等效

问题描述

  1. 我正在尝试检索我的训练的均方误差。在基于 TensorFlow 的原始代码中,我将此代码移至 PyTorch(出于研究原因)。

    原始 TensorFlow 代码:

    print("Calculating threshold")
    x_opt_predictions = model.predict(x_opt)
    print("Calculating MSE on optimization set...")
    mse = np.mean(np.power(x_opt - x_opt_predictions, 2), axis=1)
    print("mean is %.5f" % mse.mean())
    print("min is %.5f" % mse.min())
    print("max is %.5f" % mse.max())
    print("std is %.5f" % mse.std())
    tr = mse.mean() + mse.std()

pytorch的训练方法:

def train(net, x_train, x_opt, BATCH_SIZE, EPOCHS, input_dim):
    outputs = 0
    mse = 0
    optimizer = optim.SGD(net.parameters(), lr=0.001)
    loss_function = nn.MSELoss()
    loss = 0
    for epoch in range(EPOCHS):
        for i in tqdm(range(0, len(x_train), BATCH_SIZE)):
            batch_y = x_opt[i:i + BATCH_SIZE]
            
            net.zero_grad()
            
            outputs = net(batch_y)
            

            loss = loss_function(outputs, batch_y)
            loss.backward()
            optimizer.step()

        print(f"Epoch: {epoch}. Loss: {loss}")
        print("opt", x_opt.size(), "output", outputs.__sizeof__())

    # VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
    return np.mean(np.power(x_opt - outputs, 2), axis=1)
    # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  1. 如上所示,“输出”行不是预测的 numpy 数组,并且获取此等价物以生成阈值

  2. 如果有任何其他(改进的或缺失的)方法可以获取此值,请提前欣赏。

标签: pythontensorflowpytorch

解决方案


变量 output 是一个 pytorch 张量,可以将其转换为 numpy,您只需将这行代码更改为 thisreturn np.mean(np.power(x_opt - outputs, 2), axis=1)即可return np.mean(np.power(x_opt - outputs.cpu().data.numpy(), 2), axis=1)将张量转换为 numpy 数组。如果您没有在网络中使用 cuda,则不需要 .cpu() 部分。


推荐阅读