def objective(batch_size, hidden_size, learning_rate): batch_size = int(batch_size) hidden_size = int(hidden_size) TEXT, vocab_size, word_embeddings, train_iter, valid_iter, test_iter = load_patents.load_dataset( batch_size, cache_data=False) output_size = 2 embedding_length = 300 weights = word_embeddings model = LSTMClassifier(batch_size, output_size, hidden_size, vocab_size, embedding_length, word_embeddings) #model = AttentionModel(batch_size, output_size, hidden_size, vocab_size, embedding_length, weights) #model = RNN(batch_size, output_size, hidden_size, vocab_size, embedding_length, weights) #model = RCNN(batch_size, output_size, hidden_size, vocab_size, embedding_length, weights) #model = SelfAttention(batch_size, output_size, hidden_size, vocab_size, embedding_length, weights) loss_fn = F.cross_entropy for epoch in range(10): #(model, train_iter, epoch, batch_size, learning_rate) train_loss, train_acc = train_model(model, train_iter, epoch, batch_size, learning_rate) val_loss, val_acc = eval_model(model, valid_iter, batch_size) test_loss, test_acc = eval_model(model, test_iter, batch_size) print(f'Test Loss: {test_loss:.3f}, Test Acc: {test_acc:.2f}%') return test_acc
def run_best_model(args): learning_rate = args.lr batch_size = args.batch_size hidden_size = args.hidden_size epochs = args.epochs cache_data = args.cache_data output_size = 2 embedding_length = 300 TEXT, vocab_size, word_embeddings, train_iter, valid_iter, test_iter = load_patents.load_dataset( batch_size, cache_data=cache_data) weights = word_embeddings model = LSTMClassifier(batch_size, output_size, hidden_size, vocab_size, embedding_length, word_embeddings) acc_list = [] val_list = [] for epoch in range(epochs): #(model, train_iter, epoch, batch_size, learning_rate) train_loss, train_acc = train_model(model, train_iter, epoch, batch_size, learning_rate) val_loss, val_acc = eval_model(model, valid_iter, batch_size) print( f'EPOCH {epoch} -- Train/Val Loss: {train_loss:.3f}/{val_loss:.3f}, Train/Val Acc: {train_acc:.2f}%/{val_acc:.2f}%' ) acc_list.append(train_acc) val_list.append(val_acc) plt.plot(acc_list, label="train") plt.plot(val_list, label="val") plt.savefig('acc_graph.png') test_loss, test_acc = eval_model(model, test_iter, batch_size) print("performance of model:") print(f'Test Loss: {test_loss:.3f}, Test Acc: {test_acc:.2f}%')
def train_and_val(args): TEXT, vocab_size, word_embeddings, train_iter, valid_iter, test_iter = load_patents.load_dataset( ) learning_rate = args.lr batch_size = args.batch_size output_size = 2 hidden_size = 256 embedding_length = 300 weights = word_embeddings #I think ???????? if args.arch == 'LSTM': model = LSTMClassifier(batch_size, output_size, hidden_size, vocab_size, embedding_length, word_embeddings) elif args.arch == 'RNN': model = AttentionModel(batch_size, output_size, hidden_size, vocab_size, embedding_length, weights) elif args.arch == 'RNN': model = RNN(batch_size, output_size, hidden_size, vocab_size, embedding_length, weights) elif args.arch == 'RNN': model = CNN(batch_size, output_size, in_channels, out_channels, kernel_heights, stride, padding, keep_probab, vocab_size, embedding_length, weights) elif args.arch == 'RNN': model = RCNN(batch_size, output_size, hidden_size, vocab_size, embedding_length, weights) elif args.arch == 'selfAttn': model = SelfAttention(batch_size, output_size, hidden_size, vocab_size, embedding_length, weights) loss_fn = F.cross_entropy for epoch in range(10): train_loss, train_acc = train_model(model, train_iter, loss_fn, epoch) val_loss, val_acc = eval_model(model, valid_iter, loss_fn) print( f'Epoch: {epoch+1:02}, Train Loss: {train_loss:.3f}, Train Acc: {train_acc:.2f}%, Val. Loss: {val_loss:3f}, Val. Acc: {val_acc:.2f}%' ) test_loss, test_acc = eval_model(model, test_iter, loss_fn) print(f'Test Loss: {test_loss:.3f}, Test Acc: {test_acc:.2f}%') ts = time.time() timestamp = time.ctime(ts) with open("./results.out", "w+") as f: f.write(timestamp + '\n') f.write(f'Test Loss: {test_loss:.3f}, Test Acc: {test_acc:.2f}%\n') # for arg in args: # #f.write(arg.name + ':') # f.write(str(arg) + ', ') f.write("Epochs: " + str(args.epochs)) f.write("\n")
def run_best_model(args): learning_rate = args.lr batch_size = args.batch_size hidden_size = args.hidden_size epochs = args.epochs output_size = 2 embedding_length = 300 TEXT, vocab_size, word_embeddings, train_iter, valid_iter, test_iter = load_patents.load_dataset( batch_size) weights = word_embeddings model = LSTMClassifier(batch_size, output_size, hidden_size, vocab_size, embedding_length, word_embeddings) for epoch in range(epochs): #(model, train_iter, epoch, batch_size, learning_rate) train_loss, train_acc = train_model(model, train_iter, epoch, batch_size, learning_rate) val_loss, val_acc = eval_model(model, valid_iter, batch_size) test_loss, test_acc = eval_model(model, test_iter, batch_size) print("performance of model:") print(f'Test Loss: {test_loss:.3f}, Test Acc: {test_acc:.2f}%')