def eval_regression(task): model_path = './model/{}.model'.format(task) D_m_text, D_m_audio, D_m_video, D_m_context = 300, 384, 35, 300 D_g, D_p, D_e, D_h, D_a = 150, 150, 100, 100, 100 cuda = torch.cuda.is_available() print('Loading model...') model = RegressionModel(D_m_text, D_m_audio, D_m_video, D_m_context, D_g, D_p, D_e, D_h, dropout_rec=0.1, dropout=0.25) if cuda: model.cuda() model.load_state_dict(torch.load(model_path)) loss_function = MaskedMSELoss() print('Evaluating model...') _, _, test_loader = train_regression.get_MOSEI_loaders( './data/regression.pkl', valid=0.0, batch_size=128, num_workers=0) _, mae, _, labels, preds, masks, sample_ids = train_regression.train_or_eval_model( model, loss_function, test_loader, None, cuda) # gather labels and predictions df = pd.DataFrame([(sample_id, label, pred) for label, pred, mask, sample_id in zip( labels, preds, masks, sample_ids) if mask == 1], columns=['sample_id', 'label', 'pred']) df['diff'] = (df.label - df.pred).abs() df['label_class'] = df.label.apply(discretize) df['pred_class'] = df.pred.apply(discretize) df = df.sort_values(by='diff', ascending=False) if_correct = df.label_class == df.pred_class print('mae =', mean_absolute_error(df.label, df.pred)) print('acc =', if_correct.sum() / len(if_correct)) df.to_csv('./analysis/{}.csv'.format(task), index=False)