You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

55 lines
1.7 KiB

import time
import argparse
import torch
import sklearn
import numpy as np
import dataset
import util
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--model', choices=['intent', 'slot', 'joint'])
parser.add_argument('--dataset', choices=['atis', 'snips'])
parser.add_argument('--filters', type=int)
parser.add_argument('--runs', type=int, default=15)
parser.add_argument('--gpu', action="store_true") # pass for CUDA, otherwise will run on CPU
args = parser.parse_args()
args.dropout = 0
train, valid, test, num_words, num_intent, num_slot, wordvecs = dataset.load(args.dataset, batch_size=8, seq_len=50)
# change the model below
for sparsity in [0, 20, 40, 60, 80, 90, 95, 99]:
filters = 300 - 300 * (sparsity / 100)
model = util.load_model(args.model, num_words, num_intent, num_slot, args.dropout, wordvecs, 100, int(filters))
if args.gpu:
model = model.cuda()
print(f"sparsity {sparsity}, params {sum(p.numel() for p in model.parameters() if p.requires_grad)}")
times = []
criterion = torch.nn.CrossEntropyLoss(ignore_index=-1)
for i in range(args.runs):
start_time = time.time()
if args.model == 'intent':
util.valid_intent(model, test, criterion, args.gpu)
elif args.model == 'slot':
util.valid_slot(model, test, criterion, args.gpu)
elif args.model == 'joint':
util.valid_joint(model, test, criterion, args.gpu, 0.2)
end_time = time.time()
elapsed_time = end_time - start_time
times.append(elapsed_time)
print(f"mean: {sum(times) / float(len(times)):.5f} sec, std deviation: {np.std(times):.5f}")