From 445095959323149776ccc899857fae57ae2ea845 Mon Sep 17 00:00:00 2001 From: "sweep-nightly[bot]" <131841235+sweep-nightly[bot]@users.noreply.github.com> Date: Thu, 12 Oct 2023 22:33:56 +0000 Subject: [PATCH 1/2] feat: Updated src/main.py --- src/main.py | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/src/main.py b/src/main.py index 243a31e..f194cf5 100644 --- a/src/main.py +++ b/src/main.py @@ -6,16 +6,28 @@ from torch.utils.data import DataLoader import numpy as np -# Step 1: Load MNIST Data and Preprocess -transform = transforms.Compose([ - transforms.ToTensor(), - transforms.Normalize((0.5,), (0.5,)) -]) +class MNISTTrainer: + def __init__(self): + # Load and preprocess MNIST data + self.transform = transforms.Compose([ + transforms.ToTensor(), + transforms.Normalize((0.5,), (0.5,)) + ]) + + self.trainset = datasets.MNIST('.', download=True, train=True, transform=self.transform) + self.trainloader = DataLoader(self.trainset, batch_size=64, shuffle=True) -trainset = datasets.MNIST('.', download=True, train=True, transform=transform) -trainloader = DataLoader(trainset, batch_size=64, shuffle=True) + def train(self, model, optimizer, criterion, epochs): + # Training loop + for epoch in range(epochs): + for images, labels in self.trainloader: + optimizer.zero_grad() + output = model(images) + loss = criterion(output, labels) + loss.backward() + optimizer.step() + print(f'Epoch {epoch+1}/{epochs} Loss: {loss.item()}') -# Step 2: Define the PyTorch Model class Net(nn.Module): def __init__(self): super().__init__() @@ -30,19 +42,14 @@ def forward(self, x): x = self.fc3(x) return nn.functional.log_softmax(x, dim=1) -# Step 3: Train the Model + def train(self, optimizer, criterion, epochs): + trainer = MNISTTrainer() + trainer.train(self, optimizer, criterion, epochs) + +# Train the model model = Net() optimizer = optim.SGD(model.parameters(), lr=0.01) criterion = nn.NLLLoss() - -# Training loop -epochs = 3 -for epoch in range(epochs): - for images, labels in trainloader: - optimizer.zero_grad() - output = model(images) - loss = criterion(output, labels) - loss.backward() - optimizer.step() +model.train(optimizer, criterion, 3) torch.save(model.state_dict(), "mnist_model.pth") \ No newline at end of file From 302941d0f1cf65bbf2167b8e2fc21399dba553fd Mon Sep 17 00:00:00 2001 From: "sweep-nightly[bot]" <131841235+sweep-nightly[bot]@users.noreply.github.com> Date: Thu, 12 Oct 2023 22:39:40 +0000 Subject: [PATCH 2/2] feat: Updated src/api.py --- src/api.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/api.py b/src/api.py index 36c257a..88f3dbd 100644 --- a/src/api.py +++ b/src/api.py @@ -19,10 +19,14 @@ @app.post("/predict/") async def predict(file: UploadFile = File(...)): + # Preprocess the image image = Image.open(file.file).convert("L") image = transform(image) image = image.unsqueeze(0) # Add batch dimension + + # Make a prediction with the loaded model with torch.no_grad(): output = model(image) _, predicted = torch.max(output.data, 1) + return {"prediction": int(predicted[0])}