File size: 1,209 Bytes
aad08d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63d0aa5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from fastai.collab import load_learner
from fastai.tabular.all import *

class DotProductBias(Module):
    def __init__(self, n_users, n_movies, n_factors, y_range=(0,1.1)):
        self.user_factors = Embedding(n_users, n_factors)
        self.user_bias = Embedding(n_users, 1)
        self.movie_factors = Embedding(n_movies, n_factors)
        self.movie_bias = Embedding(n_movies, 1)
        self.y_range = y_range
        
    def forward(self, x):
        users = self.user_factors(x[:,0])
        movies = self.movie_factors(x[:,1])
        res = (users * movies).sum(dim=1, keepdim=True)
        res += self.user_bias(x[:,0]) + self.movie_bias(x[:,1])
        return sigmoid_range(res, *self.y_range)

def custom_accuracy(prediction, target):    
    # set all predictions above 0.95 as true positive (correct prediction)
    prediction = torch.where(prediction > 0.95, torch.tensor(1.0), prediction)
    # shape [64, 1] to [64]
    target = target.squeeze(1)
    correct = (prediction == target).float()
    accuracy = correct.sum() / len(target)
    return accuracy

async def setup_learner(model_filename: str):
    learn = load_learner(model_filename)
    learn.dls.device = 'cpu'
    return learn