import torch import torchvision import base64 import json import numpy as np from PIL import Image from io import BytesIO # Preprocessing steps for the image image_transforms = torchvision.transforms.Compose([torchvision.transforms.ToTensor()]) model_file = '/opt/ml/model' model = torch.jit.load(model_file) # Put model in evaluation mode for inferencing model.eval() def lambda_handler(event, context): image_bytes = event['body'].encode('utf-8') image = Image.open(BytesIO(base64.b64decode(image_bytes))).convert(mode='L') image = image.resize((28, 28)) probabilities = model.forward(image_transforms(np.array(image)).reshape(-1, 1, 28, 28)) label = torch.argmax(probabilities).item() return { 'statusCode': 200, 'body': json.dumps( { "predicted_label": label, } ) }