train_step = rvae.trainer(optimizer) # validate = rvae.validater() ce_result = [] kld_result = [] # training_data = batch_loader.training_data('train') # validation_data = batch_loader.training_data('valid') for iteration in range(args.num_iterations): print(f"-----Iteration: {iteration}-------------") x = 0 bar = progressbar.ProgressBar(maxval=130001, widgets=[progressbar.Bar('=', '[', ']'), ' ', progressbar.Percentage()]) bar.start() while True: input = batch_loader.next_batch(x, args.batch_size, "train") bar.update(x + 1) if input is None: break cross_entropy, kld, coef = train_step(iteration, input, args.use_cuda, args.dropout) x += args.batch_size if x == 64: seed = np.random.normal(size=[1, parameters.latent_variable_size]) sentence, reference, result = rvae.predict(input, batch_loader, 50, seed, args.use_cuda) print('\n') print('------------SAMPLE------------') print('------------------------------') print(f'original: {sentence.encode("utf-8")}') print(f'reference: {reference.encode("utf-8")}') print(f'generated: {result.encode("utf-8")}')
rvae = RVAE(parameters, parameters_2) rvae.load_state_dict(t.load('trained_RVAE')) if args.use_cuda: rvae = rvae.cuda() n_best = 3 beam_size = 10 assert n_best <= beam_size for i in range(args.num_sentence): '''================================================== Input Encoder-1 ======================================================== ''' use_cuda = 1 input = batch_loader.next_batch(1, 'valid', i) input = [Variable(t.from_numpy(var)) for var in input] input = [var.long() for var in input] input = [var.cuda() if use_cuda else var for var in input] [ encoder_word_input, encoder_character_input, decoder_word_input, decoder_character_input, target ] = input ''' =================================================== Input for Encoder-2 ======================================================== ''' input_2 = batch_loader_2.next_batch(1, 'valid', i) input_2 = [Variable(t.from_numpy(var)) for var in input_2] input_2 = [var.long() for var in input_2] input_2 = [var.cuda() if use_cuda else var for var in input_2]
batch_loader_2.max_seq_len, batch_loader_2.words_vocab_size, batch_loader_2.chars_vocab_size) '''================================================================================================= ''' embedding = Embedding(parameters, path) embedding_2 = Embedding(parameters_2, path, True) vae, bigdecoder, docoder4 = VAE.create_lstm_vae_1() start_index = 0 for iteration in range(args.num_iterations): if True: #This needs to be changed ##这一步必须保证不大于训练数据数量-每一批数据的大小,否则越界报错###################### start_index = (start_index + 1) % (49999 - args.batch_size) #start_index = (start_index+args.batch_size)%149163 #计算交叉熵损失,等 #=================================================== Input for Encoder-1,3 ======================================================== input = batch_loader.next_batch(args.batch_size, 'train', start_index) input = [Variable(t.from_numpy(var)) for var in input] input = [var.long() for var in input] #input = [var.cuda() if args.use_cuda else var for var in input] #这里是data/train.txt,转换变成embedding,用pand补齐, #其中encoder_word_input, encoder_character_input是将 xo原始句输入倒过来前面加若干占位符, # decoder_word_input, decoder_character_input是 xo原始句加了开始符号末端补齐 # target,结束句子后面加了结束符,target是xo原始句加结束符后面加若干占位符 [ encoder_word_input, encoder_character_input, decoder_word_input, decoder_character_input, target ] = input # =================================================== Input for Encoder-1,3 ======================================================== ''' =================================================== Input for Encoder-2 ======================================================== ''' input_2 = batch_loader_2.next_batch(args.batch_size, 'train',