Esempio n. 1
0
	config = tf.ConfigProto()
	config.gpu_options.allow_growth = True

	with tf.Session(config=config) as sess:
		sess.run(tf.global_variables_initializer())

		for epoch in range(pm.epochs):

			# train generator
			if epoch > 0:
				_ = sess.run(model.gen_train_optimizer)

			# train critic
			disc_loss = 0
			for i in range(pm.dis_epochs):
				batch = data_loader.next_batch()
				disc_loss, _ = sess.run([model.disc_loss, model.disc_train_optimizer], feed_dict={model.real_inputs_discrete: batch})

			if epoch % 100 == 0:
				samples = []
				for i in range(10):
					samples.extend(generate_samples(sess, model, inv_charmap))

				with open("samples_{}.txt".format(epoch), 'w') as f:
					for s in samples:
						s = "".join(s)
						f.write(s + '\n')
						f.flush()
				print("MSG : Epoch = [{}/{}], Loss = {}".format(epoch, pm.epochs, disc_loss))
Esempio n. 2
0
def train(args):

    #if args.model_path is None:
    #    for f in [f for f in os.listdir(args.logdir)]: os.remove(os.path.join(args.logdir, f))

    data_loader = Data_loader(batch_size=args.batch_size,
                              bias_init=args.bias_init)

    model = Model(wemb_dim=args.wemb_dim,
                  hid_dim=args.hid_dim,
                  seq_len=data_loader.maxlen + 1,
                  learning_rate=args.learning_rate,
                  batch_size=args.batch_size,
                  num_batches=data_loader.num_batches,
                  num_words=data_loader.num_words,
                  biivector=data_loader.biivector,
                  use_gru=args.use_gru)
    model.build()
    model.loss()
    train_op = model.train()

    tf.summary.scalar('cross entropy loss', model.cross_entropy_loss_op)
    tf.summary.scalar('reg loss', model.reg_loss_op)
    tf.summary.scalar('loss', model.loss_op)
    merged_op = tf.summary.merge_all()
    saver = tf.train.Saver()

    config = tf.ConfigProto()
    config.gpu_options.allow_growth = True
    sess = tf.Session(config=config)
    writer = tf.summary.FileWriter(args.logdir, sess.graph)
    sess.run(tf.global_variables_initializer())

    if args.model_path is not None:
        print('Starting with pretrained model: {}'.format(args.model_path))
        saver.restore(sess, args.model_path)

    print('Start training')
    for ep in xrange(args.epoch):
        for step in xrange(data_loader.num_batches):
            ctx_batch, cap_batch, mask_batch = data_loader.next_batch()
            feed_dict = {
                model.ctx_ph:
                ctx_batch.reshape(-1, model.ctx_dim[0], model.ctx_dim[1]),
                model.cap_ph:
                cap_batch,
                model.mask_ph:
                mask_batch
            }
            cross_entropy_loss, reg_loss, loss, _, summary = sess.run(
                [
                    model.cross_entropy_loss_op, model.reg_loss_op,
                    model.loss_op, train_op, merged_op
                ],
                feed_dict=feed_dict)

            writer.add_summary(summary, ep * data_loader.num_batches + step)
            if step % 100 == 0:
                print(
                    'ep: %2d, step: %4d, xen_loss: %.4f, reg_loss: %.4f, loss: %.4f'
                    % (ep + 1, step, cross_entropy_loss, reg_loss, loss))

        checkpoint_path = os.path.join(args.logdir, 'model.ckpt')
        saver.save(sess, checkpoint_path, global_step=ep + 1)

    print('Training done.')