|
- #!/usr/bin/python
- #coding=utf-8
- '''
- GPU INFERENCE INSTANCE
-
- If there are Chinese comments in the code,please add at the beginning:
- #!/usr/bin/python
- #coding=utf-8
- Due to the adaptability of a100, please use the recommended image of the
- platform with cuda 11.Then adjust the code and submit the image.
- The image of this example is: dockerhub.pcl.ac.cn:5000/user-images/openi:cuda111_python37_pytorch191
- In the environment, the uploaded dataset will be automatically placed in the /dataset directory.
- if MnistDataset_torch.zip is selected,Then the dataset directory is /dataset/test;
-
- The model file selected is in /model directory.
- The result download path is under /result . and the Qizhi platform will provide file downloads under the /result directory.
-
- 本例中的镜像是dockerhub.pcl.ac.cn:5000/user-images/openi:cuda111_python37_pytorch191
- 选择的数据集被放置在/dataset目录
- 选择的模型文件放置在/model目录
- 输出结果路径是/result目录
-
- !!!注意:目前推理的资源环境不支持联网,所以镜像无法使用公网镜像,镜像必须先提交到启智平台;推理的数据集也需要先上传到启智平台
-
- '''
-
-
- import numpy as np
- import torch
- from torchvision.datasets import mnist
- from torch.utils.data import DataLoader
- from torchvision.transforms import ToTensor
- import os
- import argparse
- from model import Model
-
-
-
- # Training settings
- parser = argparse.ArgumentParser(description='PyTorch MNIST Example')
- #获取模型文件名称
- parser.add_argument('--modelname', help='model name')
-
-
-
- if __name__ == '__main__':
- args, unknown = parser.parse_known_args()
- print('cuda is available:{}'.format(torch.cuda.is_available()))
- device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
-
- test_dataset = mnist.MNIST(root='/dataset/test', train=False, transform=ToTensor(),
- download=False)
- test_loader = DataLoader(test_dataset, batch_size=256)
- #如果文件名确定,model_path可以直接写死
- model_path = '/model/'+args.modelname
-
- model = Model().to(device)
- checkpoint = torch.load(model_path)
- model.load_state_dict(checkpoint['model'])
-
- model.eval()
-
- correct = 0
- _sum = 0
-
- for idx, (test_x, test_label) in enumerate(test_loader):
- test_x = test_x
- test_label = test_label
- predict_y = model(test_x.to(device).float()).detach()
- predict_ys = np.argmax(predict_y.cpu(), axis=-1)
- label_np = test_label.numpy()
- _ = predict_ys == test_label
- correct += np.sum(_.numpy(), axis=-1)
- _sum += _.shape[0]
- print('accuracy: {:.2f}'.format(correct / _sum))
- #结果写入/result
- filename = 'result.txt'
- file_path = os.path.join('/result', filename)
- with open(file_path, 'w') as file:
- file.write('accuracy: {:.2f}'.format(correct / _sum))
|