Пример #1
0
def main_theano_sign_lang():

    print('loading data...')
    n_input_at_each_timestep = 10
    n_classes = 97  # no base 0 considered, there are just 98 of them. May need to be 97
    dataset_sequence_length = 31

    X, y = sign_lang.load_data_from_aggregate_file()
    X = chest_accel.truncate_to_smallest(X)
    split_idx = int(.8 * X.shape[0])

    X = theano.shared(np.asarray(X, dtype=theano.config.floatX), borrow=True)
    y = theano.shared(y, borrow=True)

    trainset_X, trainset_y = X[:split_idx], y[:split_idx]
    testset_X, testset_y = X[split_idx:], y[split_idx:]

    index = T.lscalar()
    x = T.matrix('x')
    target = T.lscalar('target')
    print_x = theano.printing.Print('\nx')(x)
    print_target = theano.printing.Print('target')(target)

    print('building model...')
    # layers = [EncDecRecurrent(n_vis=n_input_at_each_timestep, n_hid=rec_n_hid, return_indices=[-1]), Softmax(n_vis=rec_n_hid, n_classes=n_classes)]

    # single layer
    #layers = [EncDecRecurrent(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='recurrent', return_indices=[-1]), Softmax(n_vis=n_input_at_each_timestep, n_classes=n_classes)]

    # double layer
    #layers = [EncDecRecurrent(n_vis=n_input_at_each_timestep, n_hid=rec_n_hid, layer_name='rec_1'), EncDecRecurrent(n_vis=rec_n_hid, n_hid=n_input_at_each_timestep, layer_name='rec_2',return_indices=[-1]), Softmax(n_vis=n_input_at_each_timestep, n_classes=n_classes)]

    # lstm
    #layers = [LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='lstm', return_indices=[-1], dropout_prob=0.3), Softmax(n_vis=n_input_at_each_timestep, n_classes=n_classes)]

    # 2*lstm
    #layers = [LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='lstm_1', dropout_prob=0.2),LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='lstm_2', dropout_prob=0.2, return_indices=[-1]), Softmax(n_vis=n_input_at_each_timestep, n_classes=n_classes)]

    encoding_rec_filepath = '/Users/wulfe/Dropbox/Start/scripts/machine_learning/stacked_enc_dec_rnn/models/enc_dec_overlap_1.save'
    lstm_filepath = '/Users/wulfe/Dropbox/Start/scripts/machine_learning/stacked_enc_dec_rnn/models/lstm_1.save'
    softmax_filepath = '/Users/wulfe/Dropbox/Start/scripts/machine_learning/stacked_enc_dec_rnn/models/softmax_1.save'
    encoding_rec = load_model(encoding_rec_filepath)
    # recurrent_1 = load_model(lstm_filepath)
    # softmax = load_model(softmax_filepath)

    # encoding_rec = encoding_recurrent_overlap.EncodingRecurrentOverlap(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='enc_1')

    # print('building pretrainer...')
    # pre_cost, pre_updates = encoding_rec.get_pretraining_cost_updates(x, learning_rate=0.001)

    # pretrainer = theano.function(
    # 	[index],
    # 	[pre_cost],
    # 	updates=pre_updates,
    # 	givens={
    # 		x: trainset_X[index]
    # 	},
    # 	mode='FAST_RUN'
    # )

    # print('pretraining model...')
    # n_epochs = 20
    # n_train_examples = trainset_X.shape.eval()[0]
    # for epoch in range(n_epochs):
    # 	costs = []
    # 	#random_indices = get_random_indices(max_index=n_train_examples - 1, samples_per_epoch=10)
    # 	for sample_idx in range(n_train_examples):
    # 	#for sample_idx in random_indices:
    # 		costs.append(pretrainer(sample_idx)[0])
    # 	print('training cost for epoch {0}: {1}'.format(epoch, np.mean(costs)))

    # for param in encoding_rec.reconstruction_params:
    # 		print('{}: {}'.format(param.name, param.get_value()))

    # save_model(encoding_rec, encoding_rec_filepath)

    recurrent_1 = LSTM(n_vis=n_input_at_each_timestep,
                       n_hid=n_input_at_each_timestep,
                       layer_name='rec_1',
                       return_indices=[-1],
                       dropout_prob=0.3)
    # #recurrent_2 = LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='rec_2', return_indices=[-1], dropout_prob=0.2)
    softmax = Softmax(n_vis=n_input_at_each_timestep, n_classes=n_classes)

    # 1*encoding + recurrent
    layers = [encoding_rec, recurrent_1, softmax]
    # layers = [recurrent_1, softmax]

    # 3*lstm
    # layers = [LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='lstm_1'),
    # 		LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='lstm_2'),
    # 		LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='lstm_3', return_indices=[-1]),
    # 		Softmax(n_vis=n_input_at_each_timestep, n_classes=n_classes)]

    # rnn = EncDecRNN(layers, cost=model_cost, return_indices=[-1])
    cost = Softmax.negative_log_likelihood
    rnn = EncDecRNN(layers, cost=cost, return_indices=[-1])

    # cost, updates = rnn.get_cost_updates((x, print_target))
    cost, updates = rnn.get_cost_updates((x, target))

    print('building trainer...')
    trainer = theano.function([index], [cost],
                              updates=updates,
                              givens={
                                  x: trainset_X[index],
                                  target: trainset_y[index]
                              },
                              mode='FAST_RUN')

    errors = rnn.layers[-1].errors(target)
    validate_model = theano.function(inputs=[index],
                                     outputs=[cost, errors],
                                     givens={
                                         x: testset_X[index],
                                         target: testset_y[index]
                                     },
                                     mode='FAST_RUN')

    print('training model...')
    n_train_examples = trainset_X.shape.eval()[0]
    n_test_examples = testset_X.shape.eval()[0]

    n_epochs = 100
    lowest_cost = -1
    for epoch in range(n_epochs):
        costs = []
        #random_indices = get_random_indices(max_index=n_train_examples - 1, samples_per_epoch=100)
        for sample_idx in range(n_train_examples):
            # for sample_idx in random_indices:
            costs.append(trainer(sample_idx)[0])
        avg_cost = np.mean(costs)
        print('training cost for epoch {0}: {1}'.format(epoch, avg_cost))

        if lowest_cost == -1 or avg_cost < lowest_cost * 0.98:
            lowest_cost = avg_cost
            run_validation = True
            save_model(recurrent_1, lstm_filepath)
            save_model(softmax, softmax_filepath)

        predictions = []
        if run_validation:
            print('\nvalidation')
            for sample_idx in range(n_test_examples):
                predictions.append(validate_model(sample_idx)[1])
            accuracy = (1 - np.mean(predictions)) * 100
            print('accuracy for epoch {0}: {1}%'.format(epoch, accuracy))
            run_validation = False

    # print('finished training, final stats:\nfinal cost: {0}\naccuracy: {1}%'.format(np.mean(costs), accuracy))
    print('finished training, final stats:\nfinal cost: {0}'.format(
        np.mean(costs)))

    for layer in rnn.layers:
        for param in layer.params:
            print('{}: {}'.format(param.name, param.get_value()))
Пример #2
0
	filepaths = get_filepaths_from_dir(data_dir)
	print('potential number of samples: {}'.format(len(filepaths)))
	linguistic_to_numeric_dict = create_linguistic_to_numeric_dict_from_filepaths(filepaths)
	print('len(linguistic_to_numeric_dict): {}'.format(len(linguistic_to_numeric_dict)))
	print(sorted(linguistic_to_numeric_dict.items(), key=operator.itemgetter(1)))
	X = []
	y = []
	for f in filepaths:
		print('loading file: {}'.format(f))
		sample, target = load_data_from_file(f, linguistic_to_numeric_dict)
		if len(sample) > 30 and len(sample) < 80:
			X.append(sample)
			y.append(target)
	print('actual number of samples: {}'.format(len(X)))
	return X, y

if __name__ == '__main__':
	data_dir = '/Users/wulfe/Downloads/signs'
	X, y = load_data_from_dir(data_dir)

	output_filepath = '/Users/wulfe/Dropbox/Start/scripts/machine_learning/stacked_enc_dec_rnn/data/sign_lang.npz'
	write_data_to_aggregate_file(output_filepath, X, y)

	X, y = load_data_from_aggregate_file(output_filepath)
	print(X.shape)
	X = chest_accel.truncate_to_smallest(X)
	#X = pad_data_to_max_sample_length(X)
	print(X.shape)
	print(y.shape)

Пример #3
0
def main_theano_sign_lang():

	print('loading data...')
	n_input_at_each_timestep = 10
	n_classes = 97	# no base 0 considered, there are just 98 of them. May need to be 97
	dataset_sequence_length = 31
	
	X, y = sign_lang.load_data_from_aggregate_file()
	X = chest_accel.truncate_to_smallest(X)
	split_idx = int(.8 * X.shape[0])

	X = theano.shared(np.asarray(X, dtype=theano.config.floatX), borrow=True)
	y = theano.shared(y, borrow=True)
	
	trainset_X, trainset_y = X[:split_idx], y[:split_idx]
	testset_X, testset_y = X[split_idx:], y[split_idx:]

	index = T.lscalar()
	x = T.matrix('x')
	target = T.lscalar('target')
	print_x = theano.printing.Print('\nx')(x)
	print_target = theano.printing.Print('target')(target)

	print('building model...')
	# layers = [EncDecRecurrent(n_vis=n_input_at_each_timestep, n_hid=rec_n_hid, return_indices=[-1]), Softmax(n_vis=rec_n_hid, n_classes=n_classes)]
	
	# single layer
	#layers = [EncDecRecurrent(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='recurrent', return_indices=[-1]), Softmax(n_vis=n_input_at_each_timestep, n_classes=n_classes)]

	# double layer
	#layers = [EncDecRecurrent(n_vis=n_input_at_each_timestep, n_hid=rec_n_hid, layer_name='rec_1'), EncDecRecurrent(n_vis=rec_n_hid, n_hid=n_input_at_each_timestep, layer_name='rec_2',return_indices=[-1]), Softmax(n_vis=n_input_at_each_timestep, n_classes=n_classes)]

	# lstm
	#layers = [LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='lstm', return_indices=[-1], dropout_prob=0.3), Softmax(n_vis=n_input_at_each_timestep, n_classes=n_classes)]

	# 2*lstm
	#layers = [LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='lstm_1', dropout_prob=0.2),LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='lstm_2', dropout_prob=0.2, return_indices=[-1]), Softmax(n_vis=n_input_at_each_timestep, n_classes=n_classes)]

	encoding_rec_filepath = '/Users/wulfe/Dropbox/Start/scripts/machine_learning/stacked_enc_dec_rnn/models/enc_dec_overlap_1.save'
	lstm_filepath = '/Users/wulfe/Dropbox/Start/scripts/machine_learning/stacked_enc_dec_rnn/models/lstm_1.save'
	softmax_filepath = '/Users/wulfe/Dropbox/Start/scripts/machine_learning/stacked_enc_dec_rnn/models/softmax_1.save'
	encoding_rec = load_model(encoding_rec_filepath)
	# recurrent_1 = load_model(lstm_filepath)
	# softmax = load_model(softmax_filepath)

	# encoding_rec = encoding_recurrent_overlap.EncodingRecurrentOverlap(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='enc_1')

	# print('building pretrainer...')
	# pre_cost, pre_updates = encoding_rec.get_pretraining_cost_updates(x, learning_rate=0.001)
	
	# pretrainer = theano.function(
	# 	[index],
	# 	[pre_cost],
	# 	updates=pre_updates,
	# 	givens={
	# 		x: trainset_X[index]
	# 	},
	# 	mode='FAST_RUN'
	# )

	# print('pretraining model...')
	# n_epochs = 20
	# n_train_examples = trainset_X.shape.eval()[0]
	# for epoch in range(n_epochs):
	# 	costs = []
	# 	#random_indices = get_random_indices(max_index=n_train_examples - 1, samples_per_epoch=10)
	# 	for sample_idx in range(n_train_examples):
	# 	#for sample_idx in random_indices:
	# 		costs.append(pretrainer(sample_idx)[0])
	# 	print('training cost for epoch {0}: {1}'.format(epoch, np.mean(costs)))

	# for param in encoding_rec.reconstruction_params:
	# 		print('{}: {}'.format(param.name, param.get_value()))

	
	# save_model(encoding_rec, encoding_rec_filepath)


	recurrent_1 = LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='rec_1', return_indices=[-1], dropout_prob=0.3)
	# #recurrent_2 = LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='rec_2', return_indices=[-1], dropout_prob=0.2)
	softmax = Softmax(n_vis=n_input_at_each_timestep, n_classes=n_classes)


	# 1*encoding + recurrent
	layers = [encoding_rec, recurrent_1, softmax]
	# layers = [recurrent_1, softmax]

	# 3*lstm
	# layers = [LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='lstm_1'),
	# 		LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='lstm_2'),
	# 		LSTM(n_vis=n_input_at_each_timestep, n_hid=n_input_at_each_timestep, layer_name='lstm_3', return_indices=[-1]), 
	# 		Softmax(n_vis=n_input_at_each_timestep, n_classes=n_classes)]

	# rnn = EncDecRNN(layers, cost=model_cost, return_indices=[-1])
	cost = Softmax.negative_log_likelihood
	rnn = EncDecRNN(layers, cost=cost, return_indices=[-1])

	# cost, updates = rnn.get_cost_updates((x, print_target))
	cost, updates = rnn.get_cost_updates((x, target))

	print('building trainer...')
	trainer = theano.function(
		[index],
		[cost],
		updates=updates,
		givens={
			x: trainset_X[index],
			target: trainset_y[index]
		},
		mode='FAST_RUN'
	)

	errors = rnn.layers[-1].errors(target)
	validate_model = theano.function(
		inputs=[index],
		outputs=[cost, errors],
		givens={
			x: testset_X[index],
			target: testset_y[index]
		},
		mode='FAST_RUN'
	)

	print('training model...')
	n_train_examples = trainset_X.shape.eval()[0]
	n_test_examples = testset_X.shape.eval()[0]

	n_epochs = 100
	lowest_cost = -1
	for epoch in range(n_epochs):
		costs = []
		#random_indices = get_random_indices(max_index=n_train_examples - 1, samples_per_epoch=100)
		for sample_idx in range(n_train_examples):
		# for sample_idx in random_indices:
			costs.append(trainer(sample_idx)[0])
		avg_cost = np.mean(costs)
		print('training cost for epoch {0}: {1}'.format(epoch, avg_cost))

		if lowest_cost == -1 or avg_cost < lowest_cost * 0.98:
			lowest_cost = avg_cost
			run_validation = True
			save_model(recurrent_1, lstm_filepath)
			save_model(softmax, softmax_filepath)

		predictions = []
		if run_validation:
			print('\nvalidation')
			for sample_idx in range(n_test_examples):
				predictions.append(validate_model(sample_idx)[1])
			accuracy = (1 - np.mean(predictions)) * 100
		 	print('accuracy for epoch {0}: {1}%'.format(epoch, accuracy))
		 	run_validation = False

	# print('finished training, final stats:\nfinal cost: {0}\naccuracy: {1}%'.format(np.mean(costs), accuracy))
	print('finished training, final stats:\nfinal cost: {0}'.format(np.mean(costs)))

	for layer in rnn.layers:
		for param in layer.params:
			print('{}: {}'.format(param.name, param.get_value()))