My model predictions keep changing even though I have set model.eval()
and no_grad()
. I am following examples from Natural Language Processing with PyTorch. generate_batches
is from the book. demo_model
is a class that includes model
(torch model) and some other attributes.
demo_model.data.set_split('val')
batch_generator = generate_batches(demo_model.data, batch_size=10, device=demo_model.device, shuffle = False, #demo_model.data._lookup_dict['val'][1]
drop_last = False)
bt = next(batch_generator)
demo_model.model.eval()
with torch.no_grad():
y_pred = demo_model.model(bt['demo_feat'].type(torch.FloatTensor))
bt['demo_feat'], bt['y_feat'], y_pred.flatten()#.sort()
def generate_batches(dataset, batch_size, shuffle=True, drop_last=True, device="cpu"):
"""
A generator function which wraps the PyTorch DataLoader. It will
ensure each tensor is on the write device location.
"""
dataloader = DataLoader(dataset=dataset, batch_size=batch_size, shuffle=shuffle, drop_last=drop_last)
for data_dict in dataloader:
out_data_dict = {}
for name, tensor in data_dict.items():
out_data_dict[name] = data_dict[name].to(device)
yield out_data_dict
My model is a simple 2 layer model with dropout and relu.
class Demo(nn.Module):
def __init__(self):
super(Demo, self).__init__()
self.agefc1 = nn.Linear(2, 20)
self.agefc2 = nn.Linear(20, 1)
def forward(self, demo_in):
demo_in = self.agefc1(demo_in)
demo_in = F.relu(F.dropout(demo_in, p = .5))
demo_in = self.agefc2(demo_in)
demo_in = F.dropout(demo_in, p = .5)
return demo_in
Example output (2 separate runs in jupyter lab):
(tensor([[ 1.1856, 0.0000],
[ 0.6062, 0.0000],
[-0.4473, 0.0000],
[ 1.0276, 1.0000],
[ 1.5016, 0.0000],
[ 0.1848, 0.0000],
[ 0.8695, 0.0000],
[ 1.9757, 1.0000],
[-0.9740, 0.0000],
[-1.3427, 0.0000]], dtype=torch.float64),
tensor([712.5783, 69.1400, 212.7758, 53.3617, 586.6400, 36.5867, 59.6350,
482.8508, 450.3008, 163.0558], dtype=torch.float64),
tensor([43.3376, 0.0000, 16.7106, 48.0151, 50.6728, 43.9258, 28.6625, 10.7091,
4.8271, 0.0000]))
(tensor([[ 1.1856, 0.0000],
[ 0.6062, 0.0000],
[-0.4473, 0.0000],
[ 1.0276, 1.0000],
[ 1.5016, 0.0000],
[ 0.1848, 0.0000],
[ 0.8695, 0.0000],
[ 1.9757, 1.0000],
[-0.9740, 0.0000],
[-1.3427, 0.0000]], dtype=torch.float64),
tensor([712.5783, 69.1400, 212.7758, 53.3617, 586.6400, 36.5867, 59.6350,
482.8508, 450.3008, 163.0558], dtype=torch.float64),
tensor([37.5727, 0.0000, 19.0388, 57.4453, 0.0000, 0.0000, 35.3358, 46.8472,
32.5002, 22.6629]))
I’m guessing I’m missing something simple.