A_Dog_Or_A_Cat / app.py
sankhyikii's picture
Update app.py
cfe0bd9
import requests
import gradio as gr
import torch
from torchvision.models import alexnet
import torch.nn as nn
from torchvision import transforms
LABELS = {0:'Cat', 1:'Dog'}
model = alexnet(pretrained=True)
for param in model.parameters():
param.requires_grad = False
# # Add a avgpool here
# avgpool = nn.AdaptiveAvgPool2d((7, 7))
#
# # Replace the classifier layer
# # to customise it according to our output
model.classifier = nn.Sequential(
nn.Linear( 256*7*7, 1024),
nn.Linear(1024, 256),
nn.Linear(256, 2))
checkpoint = torch.load(
"CatVsDogsModel.pth", map_location=torch.device("cpu")
)
model.load_state_dict(checkpoint["state_dict"])
model = model.to('cpu')
transform = transforms.Compose(
[transforms.Resize((128, 128)), transforms.ToTensor()]
)
def predict(img):
img = transform(img).to('cpu')
img = img.unsqueeze(0)
with torch.no_grad():
out= model(img)
probability = torch.nn.functional.softmax(out[0],dim=0)
print(out)
print(type(img))
values, indices = torch.topk(probability,k=2)
return {LABELS[i]: v.item() for i,v in zip(indices,values)}
iface = gr.Interface(fn=predict, inputs=gr.inputs.Image(type='pil'), outputs="label").launch()
iface.launch(share=True)