コード例 #1
0
ファイル: train.py プロジェクト: waguoxiaohai/DiSAN-pytorch
def main():
	parser = argparse.ArgumentParser()
	parser.add_argument('--batch-size', default=32, type=int)
	parser.add_argument('--data-type', default='SNLI')
	parser.add_argument('--dropout', default=0.25, type=float)
	parser.add_argument('--epoch', default=40, type=int)
	parser.add_argument('--gpu', default=0, type=int)
	parser.add_argument('--learning-rate', default=0.5, type=float)
	parser.add_argument('--print-freq', default=3000, type=int)
	parser.add_argument('--weight-decay', default=5e-5, type=float)
	parser.add_argument('--word-dim', default=300, type=int)
	parser.add_argument('--d-e', default=300, type=int)
	parser.add_argument('--d-h', default=300, type=int)

	args = parser.parse_args()

	print('loading SNLI data...')
	data = SNLI(args)

	setattr(args, 'word_vocab_size', len(data.TEXT.vocab))
	setattr(args, 'class_size', len(data.LABEL.vocab))
	setattr(args, 'model_time', strftime('%H:%M:%S', gmtime()))
	if args.gpu > -1:
		setattr(args, 'device', "cuda:0")
	else:
		setattr(args, 'device', "cpu")

	print('training start!')
	best_model = train(args, data)

	if not os.path.exists('saved_models'):
		os.makedirs('saved_models')
	torch.save(best_model.state_dict(), f'saved_models/DiSAN_{args.data_type}_{args.model_time}.pt')

	print('training finished!')
コード例 #2
0
def main():
	parser = argparse.ArgumentParser()
	parser.add_argument('--batch-size', default=16, type=int)
	parser.add_argument('--data-type', default='SNLI')
	parser.add_argument('--dropout', default=0.3, type=float)
	parser.add_argument('--epoch', default=20, type=int)
	parser.add_argument('--gpu', default=0, type=int)
	parser.add_argument('--learning-rate', default=3e-4, type=float)
	parser.add_argument('--print-freq', default=3000, type=int)
	parser.add_argument('--word-dim', default=300, type=int)
	parser.add_argument('--filter-size', default=5, type=int)
	parser.add_argument('--stride', default=2, type=int)
	parser.add_argument('--latent-size', default=500, type=int)
	parser.add_argument('--tau', default=0.01, type=float)
	parser.add_argument('--hidden-size', default=500, type=int)
	parser.add_argument('--mode', default='VAE', help="available mode: VAE, SNLI")

	args = parser.parse_args()

	print('loading SNLI data...')
	data = SNLI(args)

	setattr(args, 'word_vocab_size', len(data.TEXT.vocab))
	setattr(args, 'class_size', len(data.LABEL.vocab))
	setattr(args, 'model_time', strftime('%H:%M:%S', gmtime()))
	setattr(args, 'feature_maps', [300, 600, 500])
	if args.gpu > -1:
		setattr(args, 'device', "cuda:0")
	else:
		setattr(args, 'device', "cpu")

	print('training start!')
	if args.mode == 'VAE':
		best_model = train(args, data)
	else:
		best_model = snli_train(args, data)

	if not os.path.exists('saved_models'):
		os.makedirs('saved_models')
	if args.mode == 'VAE':
		torch.save(best_model.state_dict(), f'saved_models/DeConv_VAE_{args.data_type}_{args.model_time}.pt')
	else:
		torch.save(best_model.state_dict(), f'saved_models/DeConv_VAE_SNLI_{args.data_type}_{args.model_time}.pt')

	print('training finished!')
コード例 #3
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--batch-size', default=128, type=int)
    parser.add_argument('--data-type', default='SNLI')
    parser.add_argument('--dropout', default=0.1, type=float)
    parser.add_argument('--epoch', default=20, type=int)
    parser.add_argument('--gpu', default=0, type=int)
    parser.add_argument('--hidden-dim', default=600, type=int)
    parser.add_argument('--learning-rate', default=4e-4, type=float)
    parser.add_argument('--print-freq', default=1000, type=int)
    parser.add_argument('--weight-decay', default=5e-5, type=float)
    parser.add_argument('--word-dim', default=300, type=int)
    parser.add_argument('--char-dim', default=15, type=int)
    parser.add_argument('--num-feature-maps', default=100, type=int)
    parser.add_argument('--num-layers', default=3, type=int)
    parser.add_argument('--num-heads', default=5, type=int)
    parser.add_argument('--no-char-emb', default=False, action='store_true')
    parser.add_argument('--norm-limit', default=10, type=float)

    args = parser.parse_args()

    print('loading SNLI data...')
    data = SNLI(args)

    setattr(args, 'word_vocab_size', len(data.TEXT.vocab))
    setattr(args, 'char_vocab_size', len(data.char_vocab))
    setattr(args, 'max_word_len', data.max_word_len)
    setattr(args, 'class_size', len(data.LABEL.vocab))
    setattr(args, 'model_time', strftime('%H:%M:%S', gmtime()))
    setattr(args, 'FILTER_SIZES', [1, 3, 5])

    print('training start!')
    best_model = train(args, data)

    if not os.path.exists('saved_models'):
        os.makedirs('saved_models')
    torch.save(best_model.state_dict(),
               f'saved_models/BiLSM_GP_{args.data_type}_{args.model_time}.pt')

    print('training finished!')
コード例 #4
0
    return model


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--batch-size', default=64, type=int)
    parser.add_argument('--data-type', default='SNLI')
    parser.add_argument('--dropout', default=0.1, type=float)
    parser.add_argument('--gpu', default=0, type=int)
    parser.add_argument('--hidden-size', default=300, type=int)
    parser.add_argument('--word-dim', default=300, type=int)

    parser.add_argument('--model-path', required=True)

    args = parser.parse_args()

    print('loading SNLI data...')
    data = SNLI(args)

    setattr(args, 'word_vocab_size', len(data.TEXT.vocab))
    setattr(args, 'class_size', len(data.LABEL.vocab))
    # if block size is lower than 0, a heuristic for block size is applied.
    if args.block_size < 0:
        args.block_size = data.block_size

    print('loading model...')
    model = load_model(args, data)

    _, acc = test(model, data)

    print(f'test acc: {acc:.3f}')
コード例 #5
0
    print("Sentence Length:")
    # Long: > 20, Regular: 5-20, Short: < 5
    print("Long: %.3f\t\t Regular: %.3f\t\t Short: %.3f" %
          (correct_dict[3] / total_dict[3], correct_dict[4] / total_dict[4],
           correct_dict[5] / total_dict[5]))

    print("Contain Specific Words:")
    print("Negation: %.3f\t\t Quantifier: %.3f\t Belief: %.3f" %
          (correct_dict[6] / total_dict[6], correct_dict[7] / total_dict[7],
           correct_dict[8] / total_dict[8]))


if __name__ == "__main__":
    device = torch.device('cuda')
    snli = SNLI(batch_size=1, gpu=device)
    model = Bowman(snli.TEXT.vocab)
    model.load_state_dict(torch.load("./model/bowman_48.pth"))
    model.to(device)
    criterion = nn.CrossEntropyLoss()

    # build list for type of specific words
    neg = [
        "no", "not", "none", "nobody", "nothing", "neither", "nowhere",
        "never", "hardly", "barely", "doesnt", "isnt", "wasnt", "shouldnt",
        "wouldnt", "couldnt", "wont", "cant", "dont"
    ]
    qua = [
        "much", "enough", "more", "most", "less", "least", "no", "none",
        "some", "any", "many", "few", "several", "almost", "nearly"
    ]
コード例 #6
0
        shapes = dict(ids1=[None],
                      ids2=[None],
                      mask1=[None],
                      mask2=[None],
                      label=[])
        return tf.data.Dataset.from_generator(lambda: (ex for ex in data),
                                              types, shapes)


if __name__ == '__main__':
    print("TensorFlow version: {}".format(tf.__version__))
    print("Eager execution: {}".format(tf.executing_eagerly()))

    fdata = os.path.join('data', 'proc.json')
    if not os.path.isfile(fdata):
        data = SNLI.load()
        proc = Model.preprocess_data(data)
        with open(fdata, 'wt') as f:
            json.dump(proc, f)
    else:
        with open(fdata) as f:
            proc = json.load(f)

    for k, v in proc.items():
        print(k, len(v))

    args = argparse.Namespace(
        nwords=len(proc['word2index']),
        seed=42,
        batch=32,
        demb=100,