使用模型推断批次与使用 pytorch 的个体时的不同结果
differing results when using model to infer on a batch vs individual with pytorch
我有一个神经网络,它接受维度为 (batch_size, 100, 1, 1) 的输入张量并生成维度为 (batch_size, 3, 64, 64) 的输出张量。
使用模型推断一批两个元素和单独推断元素时,我得到了不同的结果。
使用下面的代码,我初始化了一个维度为 (2, 100, 1, 1) 的 pytorch 张量。我将这个张量传递给模型,然后获取模型输出的第一个元素并存储在变量 result1 中。对于 result2,我只是直接 运行 通过我的模型的原始输入张量的第一个元素。
inputbatch=torch.randn(2, Z_DIM, 1, 1, device=device)
inputElement=inputbatch[0].unsqueeze(0)
result1=model(inputbatch)[0]
result2=model(inputElement)
我的期望是 result1 和 result2 相同。但是 result1 和 result2 是完全不同的。谁能解释为什么这两个输出不同。
这可能是因为您的模型有一些随机过程,这些过程要么是特定于训练的,您没有禁用它们(例如,通过使用 model.eval()
),要么是推理过程中模型需要的。
要测试以上内容,请使用:
model = model.eval()
在获得 result1
.
之前
我有一个神经网络,它接受维度为 (batch_size, 100, 1, 1) 的输入张量并生成维度为 (batch_size, 3, 64, 64) 的输出张量。 使用模型推断一批两个元素和单独推断元素时,我得到了不同的结果。
使用下面的代码,我初始化了一个维度为 (2, 100, 1, 1) 的 pytorch 张量。我将这个张量传递给模型,然后获取模型输出的第一个元素并存储在变量 result1 中。对于 result2,我只是直接 运行 通过我的模型的原始输入张量的第一个元素。
inputbatch=torch.randn(2, Z_DIM, 1, 1, device=device)
inputElement=inputbatch[0].unsqueeze(0)
result1=model(inputbatch)[0]
result2=model(inputElement)
我的期望是 result1 和 result2 相同。但是 result1 和 result2 是完全不同的。谁能解释为什么这两个输出不同。
这可能是因为您的模型有一些随机过程,这些过程要么是特定于训练的,您没有禁用它们(例如,通过使用 model.eval()
),要么是推理过程中模型需要的。
要测试以上内容,请使用:
model = model.eval()
在获得 result1
.