def generate(net, seed_string='A', predict_length=100, temperature=0.8, cuda=None): hidden = net.init_hidden(1, cuda=cuda) if cuda is not None: prime_input = Variable(common.char_tensor(seed_string).unsqueeze(0).cuda(device=cuda)) else: prime_input = Variable(common.char_tensor(seed_string).unsqueeze(0)) # Use seed string to "build up" hidden state predicted = seed_string for p in range(len(seed_string) - 1): _, hidden = net(prime_input[:, p], hidden) inp = prime_input[:, -1] for p in range(predict_length): output, hidden = net(inp, hidden) # Sample from the network as a multinomial distribution output_dist = output.data.view(-1).div(temperature).exp() top_i = torch.multinomial(output_dist, 1)[0] # Add predicted character to string and use as next input predicted_char = common.trainable_characters[top_i] predicted += predicted_char if cuda is not None: inp = mythic_model_character.Variable(common.char_tensor(predicted_char).unsqueeze(0).cuda(cuda)) else: inp = mythic_model_character.Variable(common.char_tensor(predicted_char).unsqueeze(0)) return predicted
def generate(decoder, seed_string='A', predict_length=100, temperature=0.8, cuda=False): hidden = decoder.init_hidden(1) prime_input = mythic_model_character.Variable(common.char_tensor(seed_string).unsqueeze(0)) if cuda: hidden = hidden.cuda() prime_input = prime_input.cuda() predicted = seed_string # Use priming string to "build up" hidden state for p in range(len(seed_string) - 1): _, hidden = decoder(prime_input[:, p], hidden) inp = prime_input[:, -1] for p in range(predict_length): output, hidden = decoder(inp, hidden) # Sample from the network as a multinomial distribution output_dist = output.data.view(-1).div(temperature).exp() top_i = torch.multinomial(output_dist, 1)[0] # Add predicted character to string and use as next input predicted_char = common.trainable_characters[top_i] predicted += predicted_char inp = mythic_model_character.Variable(common.char_tensor(predicted_char).unsqueeze(0)) if cuda: inp = inp.cuda() return predicted
def random_training_set(): inp = model.torch.LongTensor(settings.batch_size, settings.chunk_size) target = model.torch.LongTensor(settings.batch_size, settings.chunk_size) for bi in range(settings.batch_size): start_index = random.randint( 0, settings.text_length - settings.chunk_size - 1) end_index = start_index + settings.chunk_size + 1 chunk = settings.text_string[start_index:end_index] inp[bi] = common.char_tensor(chunk[:-1]) target[bi] = common.char_tensor(chunk[1:]) inp = model.Variable(inp) target = model.Variable(target) if settings.cuda is not None: inp = inp.cuda() target = target.cuda() return inp, target
def ordered_training_set(start_index): if start_index > (settings.text_length - settings.chunk_size): log.out.warning( "Requested index would blow bounds in text array, setting to random." ) start_index = random.randint( 0, settings.text_length - settings.chunk_size) inp = model.torch.LongTensor(settings.batch_size, settings.chunk_size) target = model.torch.LongTensor(settings.batch_size, settings.chunk_size) for bi in range(settings.batch_size): # start_index = random.randint(0, settings.text_length - settings.chunk_size) end_index = start_index + settings.chunk_size + 1 chunk = settings.text_string[start_index:end_index] inp[bi] = common.char_tensor(chunk[:-1]) target[bi] = common.char_tensor(chunk[1:]) inp = model.Variable(inp) target = model.Variable(target) if settings.cuda: inp = inp.cuda() target = target.cuda() return inp, target, end_index