python - Tensorflow 到 PyTorch - model.predict 等效
问题描述
我正在尝试检索我的训练的均方误差。在基于 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)
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如上所示,“输出”行不是预测的 numpy 数组,并且获取此等价物以生成阈值
如果有任何其他(改进的或缺失的)方法可以获取此值,请提前欣赏。
解决方案
变量 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() 部分。
推荐阅读
- flutter - 如果用户在 10 分钟内没有任何活动,Flutter 应用程序应该锁定屏幕
- python - IndexError:索引 9 超出轴 0 的范围,大小为 8
- javascript - 基于下拉值的 React-google-map 标记图标未显示正确的图标
- python - 为什么 Python 将 "bar" 中的 "foo" 评估为 False!= "baz"?
- algorithm - 范围查询如何与排序字符串表一起使用?
- azure - 用户访问查看 Microsoft Azure 中的自定义报告
- cuda - 如何为 CUDA 中的每个线程使用寄存器内存?
- python - 如何从 .aspx 页面中提取所有源代码?
- python - 正则表达式选择整行
- android - Android 模拟器超时