Lesson-7 / app.py
DaniloTertu's picture
Update app.py
3d05645
import gradio as gr
import pickle
from fastai.collab import *
from fastai.tabular.all import *
import pandas
import pandas.core.indexes.numeric
#__all__ = ['NumberClass', 'learn', 'classify_image', 'categories', 'image', 'label', 'examples', 'intf']
class DotProductBias(Module):
def __init__(self, n_users, n_animes, n_factors, y_range=(0,10.5)):
self.user_factors = Embedding(n_users, n_factors)
self.user_bias = Embedding(n_users, 1)
self.anime_factors = Embedding(n_animes, n_factors)
self.anime_bias = Embedding(n_animes, 1)
self.y_range = y_range
def forward(self, x):
users = self.user_factors(x[:,0])
animes = self.anime_factors(x[:,1])
res = (users * animes).sum(dim=1, keepdim=True)
res += self.user_bias(x[:,0]) + self.anime_bias(x[:,1])
return sigmoid_range(res, *self.y_range)
def get_y(r):
result = learn.forward(r)
return result[0][0]
class CustomUnpickler(pickle.Unpickler):
def persistent_load(self, persid):
return None
with open('CollaborativeFiltering.pkl', 'rb') as f:
custom_unpickler = CustomUnpickler(f)
learn = custom_unpickler.load()
label = gr.outputs.Label()
usr = gr.inputs.Number(label = 'Usuário')
anime = gr.inputs.Number(label = 'Anime')
r = tensor([[usr, anime]])
inputs = [r]
output = gr.outputs.Textbox()
intf = gr.Interface(fn=get_y, inputs="r", outputs=output)
intf.launch(inline=False)