if summarize: loss = np.mean(last_save_losses) llprint("\n\tAvg. Logistic Loss: %.4f\n" % (loss)) if np.isnan(loss): raise Exception('nan Loss') if summarize and rnn.debug: loss = np.mean(last_save_losses) last_save_losses = [] if take_checkpoint: llprint("\nSaving Checkpoint ... "), curr_state = { "epoch": epoch, "rnn_state": rnn.state_dict(), "opti_state": optimizer.state_dict() } # check_ptr = os.path.join(ckpts_dir, 'step_{}.pth'.format(epoch)) # T.save(curr_state, check_ptr) check_ptr = os.path.join(ckpts_dir, 'best.pth') T.save(curr_state, check_ptr) llprint("Done!\n") for i in range(args.test_iterations): llprint("\rIteration %d/%d" % (i, args.test_iterations)) input_data, target_output = dataset.generate_data( 1, args.bits, args.cuda) if args.debug: output, (chx, mhx, rv), v = rnn(input_data, (None, mhx, None),
last_100_losses.append(loss_value) if summarize: llprint("\rIteration %d/%d" % (epoch, iterations)) llprint("\nAvg. Logistic Loss: %.4f\n" % (np.mean(last_100_losses))) output = output.data.cpu().numpy() print("Real value: ", ' = ' + str(int(target_output[0]))) print("Predicted: ", ' = ' + str(int(output // 1)) + " [" + str(output) + "]") last_100_losses = [] if take_checkpoint: llprint("\nSaving Checkpoint ... "), check_ptr = os.path.join(ckpts_dir, 'step_{}.pth'.format(epoch)) cur_weights = rnn.state_dict() T.save(cur_weights, check_ptr) llprint("Done!\n") llprint("\nTesting generalization...\n") rnn.eval() for i in range(int((iterations + 1) / 10)): llprint("\nIteration %d/%d" % (i, iterations)) # We test now the learned generalization using sequence_max_length examples random_length = np.random.randint(2, int(sequence_max_length) * 10 + 1) input_data, target_output, sums_text = generate_data( random_length, input_size) if rnn.debug: