In [3]:
%reload_ext autoreload
%autoreload 2
%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = [40, 30]
In [4]:
import fastai as fai
from fastai.basic_data import DataLoader
from data_loader import *
import numpy as np
from torch.utils.data import SubsetRandomSampler
from model import *
from model_bn import *
from torch import optim
import dill
import papermill as pm
from main import *
import pandas as pd
In [5]:
optimizer = 'Adam'
num_workers=8
maxsize=100000
batch_size=2048
n_epochs=500
batch_norm = True
dataset='data/speedup_dataset.h5'
In [6]:
train_dl, val_dl = train_dev_split(dataset, batch_size, num_workers, maxsize)
db = fai.basic_data.DataBunch(train_dl, val_dl)
In [7]:
input_size = train_dl.dataset.X.shape[1]
output_size = train_dl.dataset.Y.shape[1]
model = None
if batch_norm:
model = Model_BN(input_size, output_size)
else:
model = Model(input_size, output_size)
criterion = nn.MSELoss()
l = fai.Learner(db, model, loss_func=criterion)
if optimizer == 'SGD':
l.opt_func = optim.SGD
In [ ]:
In [12]:
l.lr_find()
In [13]:
l.recorder.plot()
In [14]:
lr = 0.001
In [15]:
l.fit_one_cycle(300, lr)
In [18]:
l.recorder.plot_losses()
In [17]:
l.save(f"speedup_{optimizer}_batch_norm_{batch_norm}_mse")
In [8]:
l = l.load(f"speedup_{optimizer}_batch_norm_{batch_norm}_mse")
In [9]:
val_df = pd.DataFrame()
train_df = pd.DataFrame()
preds, targets = l.get_preds(fai.basic_data.DatasetType.Valid)
preds = preds.reshape((-1,)).numpy()
targets = targets.reshape((-1,)).numpy()
val_df['pred'] = preds
val_df['target'] = targets
val_df['abs_diff'] = np.abs(preds - targets)
val_df['APE'] = np.abs(val_df.target - val_df.pred)/val_df.target * 100
preds, targets = l.get_preds(fai.basic_data.DatasetType.Train)
preds = preds.reshape((-1,)).numpy()
targets = targets.reshape((-1,)).numpy()
train_df['pred'] = preds
train_df['target'] = targets
train_df['abs_diff'] = np.abs(preds - targets)
train_df['APE'] = np.abs(train_df.target - train_df.pred)/train_df.target * 100
In [19]:
val_df.abs_diff.describe()
Out[19]:
In [11]:
val_df.APE.describe()
Out[11]:
In [ ]: