我如何使用 PyTorch 模型进行预测?
How do I predict using a PyTorch model?
我创建了一个 pyTorch 模型来对图像进行分类。
我通过 state_dict 和整个模型保存了一次:
torch.save(model.state_dict(), "model1_statedict")
torch.save(model, "model1_complete")
如何使用这些模型?
我想用一些图片来检查它们,看看它们是否好。
我正在加载模型:
model = torch.load(path_model)
model.eval()
这很好用,但我不知道如何使用它来预测新图片。
一个pytorch模型是一个函数。您为它提供适当定义的输入,它 returns 输出。如果您只想直观地检查给定特定输入图像的输出,只需调用它:
model.eval()
output = model(example_image)
def predict(self, test_images):
self.eval()
# model is self(VGG class's object)
count = test_images.shape[0]
result_np = []
for idx in range(0, count):
# print(idx)
img = test_images[idx, :, :, :]
img = np.expand_dims(img, axis=0)
img = torch.Tensor(img).permute(0, 3, 1, 2).to(device)
# print(img.shape)
pred = self(img)
pred_np = pred.cpu().detach().numpy()
for elem in pred_np:
result_np.append(elem)
return result_np
网络是 VGG-19 并参考我的源代码。
喜欢这个架构:
class VGG(object):
def __init__(self):
...
def train(self, train_images, valid_images):
train_dataset = torch.utils.data.Dataset(train_images)
valid_dataset = torch.utils.data.Dataset(valid_images)
trainloader = torch.utils.data.DataLoader(train_dataset)
validloader = torch.utils.data.DataLoader(valid_dataset)
self.optimizer = Adam(...)
self.criterion = CrossEntropyLoss(...)
for epoch in range(0, epochs):
...
self.evaluate(validloader, model=self, criterion=self.criterion)
...
def evaluate(self, dataloader, model, criterion):
model.eval()
for i, sample in enumerate(dataloader):
...
def predict(self, test_images):
...
if __name__ == "__main__":
network = VGG()
trainset, validset = get_dataset() # abstract function for showing
testset = get_test_dataset()
network.train(trainset, validset)
result = network.predict(testset)
我创建了一个 pyTorch 模型来对图像进行分类。 我通过 state_dict 和整个模型保存了一次:
torch.save(model.state_dict(), "model1_statedict")
torch.save(model, "model1_complete")
如何使用这些模型? 我想用一些图片来检查它们,看看它们是否好。
我正在加载模型:
model = torch.load(path_model)
model.eval()
这很好用,但我不知道如何使用它来预测新图片。
一个pytorch模型是一个函数。您为它提供适当定义的输入,它 returns 输出。如果您只想直观地检查给定特定输入图像的输出,只需调用它:
model.eval()
output = model(example_image)
def predict(self, test_images):
self.eval()
# model is self(VGG class's object)
count = test_images.shape[0]
result_np = []
for idx in range(0, count):
# print(idx)
img = test_images[idx, :, :, :]
img = np.expand_dims(img, axis=0)
img = torch.Tensor(img).permute(0, 3, 1, 2).to(device)
# print(img.shape)
pred = self(img)
pred_np = pred.cpu().detach().numpy()
for elem in pred_np:
result_np.append(elem)
return result_np
网络是 VGG-19 并参考我的源代码。
喜欢这个架构:
class VGG(object):
def __init__(self):
...
def train(self, train_images, valid_images):
train_dataset = torch.utils.data.Dataset(train_images)
valid_dataset = torch.utils.data.Dataset(valid_images)
trainloader = torch.utils.data.DataLoader(train_dataset)
validloader = torch.utils.data.DataLoader(valid_dataset)
self.optimizer = Adam(...)
self.criterion = CrossEntropyLoss(...)
for epoch in range(0, epochs):
...
self.evaluate(validloader, model=self, criterion=self.criterion)
...
def evaluate(self, dataloader, model, criterion):
model.eval()
for i, sample in enumerate(dataloader):
...
def predict(self, test_images):
...
if __name__ == "__main__":
network = VGG()
trainset, validset = get_dataset() # abstract function for showing
testset = get_test_dataset()
network.train(trainset, validset)
result = network.predict(testset)