In [1]:
import argparse
import os
import shutil
import gzip
import torch
import torch.nn as nn
from torch.autograd import Variable
import torch
import torch.nn as nn
from torch.autograd import Variable
from dpp_nets.utils.language import Vocabulary, BeerDataset, custom_collate
from dpp_nets.layers.layers import ChunkTrainerReinforce, ChunkTrainerRelReinforce
from dpp_nets.utils.language import EvalSet
In [33]:
# Load saved checkpoint
model = 'shortwords1reg0.1reg_mean30.0lr0.0001reinforce_ckp.pth.tar'
model_dir = '/Users/Max/checkpoints/beer_reviews/reinforce/'
model_path = model_dir + model
model = torch.load(model_path, map_location=lambda storage, loc: storage)
In [ ]:
from dpp_nets.utils.language import Vocabulary
embd_path = '/Users/Max/data/beer_reviews/review+wiki.filtered.200.txt.gz'
word_path = '/Users/Max/data/beer_reviews/reviews.all.train.words.txt.gz'
# Set-up Vocabulary
vocab = Vocabulary()
vocab.loadPretrained(embd_path)
vocab.setStops()
vocab.loadCorpus(word_path)
vocab.updateEmbedding()
vocab.setCuda(False)
vocab.EmbeddingBag.load_state_dict(model['embedding'])
In [ ]:
EMBD_DIM = 200
KERNEL_DIM = 200
HIDDEN_DIM = 500
ENC_DIM = 200
TARGET_DIM = 3 if model['aspect'] in set(['all', 'short']) else 1
ALPHA_ITER = 1
if model['mode'] == 'sents':
trainer = ChunkTrainerReinforce(EMBD_DIM, HIDDEN_DIM, KERNEL_DIM, ENC_DIM, TARGET_DIM, ALPHA_ITER)
else:
trainer = ChunkTrainerRelReinforce(EMBD_DIM, HIDDEN_DIM, KERNEL_DIM, ENC_DIM, TARGET_DIM, ALPHA_ITER)
trainer.load_state_dict(model['model'])
trainer.activation = nn.Sigmoid()
trainer.reg = model['reg']
trainer.reg_mean = model['reg_mean']
rat_path = '/Users/Max/data/beer_reviews/annotations.json'
evalset = EvalSet(rat_path, vocab)
In [ ]:
trainer.kernel_net.layer1.weight
In [ ]:
# Plot a table
print('__________________________Training Table__________________________')
for k, v in model['train_loss'].items():
epoch, loss, pred_loss, reg_loss = k, v[0], model['train_pred_loss'][k][0], model['train_reg_loss'][k][0]
print(str.join(" | ", ['Epoch: %d' % (epoch), 'Loss: %.5f' % (loss),
'Pred Loss: %.5f' % (pred_loss), 'Reg Loss: %.5f' % (reg_loss)]))
In [ ]:
from dpp_nets.helper.plotting import plot_floats
# Training Plots
plot_floats(model['train_loss'], xlabel='Epochs', ylabel='MSE + Reg', title='Training MSE + Reg')
plot_floats(model['train_pred_loss'], xlabel='Epochs', ylabel='MSE', title='Training MSE')
plot_floats(model['train_reg_loss'], xlabel='Epochs', ylabel='Reg', title='Training Reg')
In [ ]:
print('_________________________Validation Table_________________________')
for k, v in model['val_loss'].items():
epoch, loss, pred_loss, reg_loss = k, v[0], model['val_pred_loss'][k][0], model['val_reg_loss'][k][0]
print(str.join(" | ", ['Epoch: %d' % (epoch), 'Loss: %.5f' % (loss),
'Pred Loss: %.5f' % (pred_loss), 'Reg Loss: %.5f' % (reg_loss)]))
In [ ]:
from dpp_nets.helper.plotting import plot_floats
# Training Plots
plot_floats(model['val_loss'], xlabel='Epochs', ylabel='MSE + Reg', title='Validation MSE + Reg')
plot_floats(model['val_pred_loss'], xlabel='Epochs', ylabel='MSE', title='Validation MSE')
plot_floats(model['val_reg_loss'], xlabel='Epochs', ylabel='Reg', title='Validation Reg')
In [ ]:
# Evaluation on Test Set
loss, pred_loss, reg_loss = evalset.computeLoss(trainer, model['mode'])
print(str.join(" | ", ['Test Set:', 'Loss: %.5f' % (loss),
'Pred Loss: %.5f' % (pred_loss), 'Reg Loss: %.5f' % (reg_loss)]))
prec, extract = evalset.evaluatePrecision(trainer,model['mode'])
print(str.join(" | ", ['Test Set:', 'Precision: %.5f' % (prec), 'Extract: %.5f' % (extract)]))
In [28]:
# Random Samples
evalset.sample(trainer, model['mode'])
In [11]:
# Random Marginals
evalset.computeMarginals(trainer, model['mode'], 397)
In [22]:
evalset.computeMUEPredLoss(trainer, model['mode'],100)
Out[22]:
In [13]:
evalset.computeMAPPredLoss(trainer, model['mode'])
Out[13]:
In [14]:
from torch.autograd import Variable
review = evalset.vocab.returnEmbds(evalset.words[0].clean.keys()).unsqueeze(0)
target = Variable(torch.stack([evalset.targets[0] for _ in range(100)]))
In [15]:
trainer.alpha_iter = 100
trainer.sampler.alpha_iter = 100
trainer(review, target)
Out[15]: