print('model sayz:') print('I am Loaded') temp_list = [0.5, 1., 2.] policy_list = ['greedy', 'temp'] seq_length = 111 alice_string = list('Alice') # Generate some sentences by sampling from the model for policy in policy_list: for temperature in temp_list: char_list = [] hidden = None for alice in alice_string: idx = dataset.convert_to_idx(alice) char_list.append(idx) generator = torch.tensor([idx]).unsqueeze(-1) generator = generator.to(device) generator, hidden = model.forward(generator, hidden) for _ in range(seq_length): if policy == 'greedy': idx = torch.argmax(generator).item() else: temp = generator.squeeze() / temperature soft = torch.softmax(temp, dim=0) idx = torch.multinomial(soft, 1).item() generator = torch.tensor([idx]).unsqueeze(-1) generator = generator.to(device) generator, hidden = model.forward(generator, hidden)
def train(config): def acc(predictions, targets): hotvec = predictions.argmax(-2) == targets accuracy = torch.mean(hotvec.float()) return accuracy # Initialize the device which to run the model on device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print(device) # Initialize the dataset and data loader (note the +1) dataset = TextDataset(config.txt_file, config.seq_length) data_loader = DataLoader(dataset, config.batch_size, num_workers=0) print('batch', config.batch_size) vocabulary_size = dataset.vocab_size print('vocab', vocabulary_size) # Initialize the model that we are going to use model = TextGenerationModel(config.batch_size, config.seq_length, vocabulary_size=vocabulary_size, lstm_num_hidden=config.lstm_num_hidden, lstm_num_layers=config.lstm_num_layers, dropout=1 - config.dropout_keep_prob, device=device) model = model.to(device) # Setup the loss and optimizer criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=config.learning_rate, weight_decay=1e-5) gamma = 1 - config.learning_rate_decay lr_optim = torch.optim.lr_scheduler.StepLR(optimizer, config.learning_rate_step, gamma=gamma, last_epoch=-1) print('Hi') acc_list = [] loss_list = [] step_list = [] text_list = [] epoch = 100 offset = 2380 temperature = 1 policy = 'greedy' for e in range(epoch): torch.save(model.state_dict(), str(e + 1) + 'tunedmodel.pt') for step, (batch_inputs, batch_targets) in enumerate(data_loader): # Only for time measurement of step through network lr_optim.step() optimizer.zero_grad() t1 = time.time() inputs = torch.stack([*batch_inputs], dim=1) targets = torch.stack([*batch_targets], dim=1) inputs = inputs.to(device) targets = targets.to(device) out = model.forward(inputs)[0] out = out.permute(0, 2, 1) loss = criterion(out, targets) accuracy = acc(out, targets) torch.nn.utils.clip_grad_norm(model.parameters(), max_norm=config.max_norm) loss.backward() optimizer.step() # Just for time measurement t2 = time.time() examples_per_second = config.batch_size / float(t2 - t1) if step % config.print_every == 0: print('accuracy, loss, step: \n', np.around(accuracy.item(), 4), np.around(loss.item(), 4), step, '\n') acc_list.append(accuracy.item()) loss_list.append(loss.item()) step_list.append(step + offset * e) if step % config.sample_every == 0: # Generate some sentences by sampling from the model generator = torch.randint(low=0, high=vocabulary_size, size=(1, 1)).to(device) hidden = None char_list = [] for _ in range(config.seq_length): generator, hidden = model.forward(generator, hidden) if policy == 'greedy': idx = torch.argmax(generator).item() else: pass generator = torch.Tensor([idx]).unsqueeze(-1) generator = generator.to(device) char_list.append(idx) char = dataset.convert_to_string(char_list) with open("MyTunedBook.txt", "a") as text_file: print('Epoch. ', e, 'Stahp: ', step, '\n Output: ', char, file=text_file) print('Epoch. ', e, 'Stahp: ', step, '\n Output: ', char) text_list.append((str((step + offset * e)) + '\n' + char)) pass if step == config.train_steps: # If you receive a PyTorch data-loader error, check this bug report: # https://github.com/pytorch/pytorch/pull/9655 break print('Done training.') with open('FinalTunedBook.txt', 'w+') as f: for item in text_list: f.write("%s\n" % item) # save with pandas header = ['accuracy', 'length', 'loss', 'step'] savefiles = zip(acc_list, [config.seq_length] * len(acc_list), loss_list, step_list) df = pd.DataFrame(list(savefiles), columns=header) df.to_csv('GEN' + str(config.seq_length) + 'tunedlstm.csv') print('I am Loaded') temp_list = [0., 0.5, 1., 2.] policy_list = ['greedy', 'temp'] seq_length = 111 alice_string = list('Alice') # Generate some sentences by sampling from the model for policy in policy_list: for temperature in temp_list: char_list = [] hidden = None for alice in alice_string: idx = dataset.convert_to_idx(alice) char_list.append(idx) generator = torch.tensor([idx]).unsqueeze(-1) generator = generator.to(device) generator, hidden = model.forward(generator, hidden) for _ in range(seq_length): if policy == 'greedy': idx = torch.argmax(generator).item() else: temp = generator.squeeze() / temperature soft = torch.softmax(temp, dim=0) idx = torch.multinomial(soft, 1)[-1].item() generator = torch.tensor([idx]).unsqueeze(-1) generator = generator.to(device) generator, hidden = model.forward(generator, hidden) char_list.append(idx) char = dataset.convert_to_string(char_list) with open( "BonusTemp" + str(int(np.floor(temperature))) + "Book.txt", "w+") as text_file: print(policy + ': ', temperature, '\n Output: ', char, file=text_file) print(policy + ': ', temperature, '\n Output: ', char) print('Finito!')
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print(device) WonderLand = torch.load('model/49tunedmodelCP.pt', map_location=torch.device(device)) print('I am Loaded') temp_list = [0., 0.5, 1., 2.] policy = 'temp' seq_length = 30 txt_file = 'alice.txt' dataset = TextDataset(txt_file, seq_length) test_idx = dataset.convert_to_idx('A') print(test_idx) test_idx = dataset.convert_to_idx('Alice') print(test_idx) vocabulary_size = dataset.vocab_size # Generate some sentences by sampling from the model for temperature in temp_list: generator = torch.randint(low=0, high=vocabulary_size, size=(1, 1)).to(device) hidden = None char_list = [generator.item()] for _ in range(seq_length): generator, hidden = WonderLand.forward(generator, hidden) if policy == 'greedy':