Esempio n. 1
0
	def __init__(self):
		# initialize dataset with PCA
		n_samples, tempotrons = 5, []
		dataset = MNIST(n_components=100)

		# training phase
		for training_digit in list(range(10)):
			print('training tempotron to recognize {}...'.format(training_digit))
			tempotrons.append(DigitTempotron(dataset, training_digit)) # auto-trains

		X_train, y_train = np.zeros((n_samples*10, 10)), np.zeros((n_samples*10, 1))

		# classification phase
		with open('X_train.txt', 'r+') as f:
			if RW == 'w':
				for i in range(n_samples*10):
					images = dataset.sample(n_samples, int(i/n_samples), int(i/n_samples)) # five sample vectors, each one of 0->9
					y_train[i] = int(i/n_samples)
					print('')
					for t in range(10):
						truth, t_max, X_train[i][t] = tempotrons[t].classify(images[i % n_samples])
						f.write(str(X_train[i][t])+'\n')
						print('tempotron {} classified digit {} v{} as:\t{}\t{}'\
							.format(t, int(i/n_samples), i%n_samples, truth, X_train[i][t]))
			if RW == 'r':
				vals = [float(y) for y in list(filter(lambda x: x != '', [line.strip() for line in f.readlines()]))]
				for i in range(len(vals)): # n_samples*10^2
					X_train[int(i/10)][i%10] = vals[i]
				for j in range(n_samples*10):
					y_train[j] = int(j/n_samples)

		self.tempotrons = tempotrons
		self.X_train, self.y_train = X_train, y_train
Esempio n. 2
0
from keras.datasets import mnist
from tempo_layer import DigitTempotronLayer
from dataset import MNIST


# With 50 training images and 50 testing images
# x_train should be 50*10*10 matrix, x_test should be 50*10*10 matrix
# y_train should be 50*1 vector, y_test should be 50*1 vector
dtl = DigitTempotronLayer()
dataset = MNIST(n_components=100, reshape=False)
np.random.seed(7)  # for reproducibility

# Training data
train_samples = []
for digit in range(10): # 0->9
    for ten_by_ten_matrix in dataset.sample(5, digit, digit): # 5 x 'digit'
        train_samples.append(ten_by_ten_matrix)
train_samples = np.asarray(train_samples).reshape(50, 100)
X_train = train_samples.astype('float32')
y_train = dtl.get_layer_output()[1]
Y_train = np_utils.to_categorical(y_train) # 50*10 one hot matrix (encoded outputs)

# Testing data
i = 0
test_samples = []
y_test = np.zeros((50, 1))
for digit in range(10): # 0->9
    for ten_by_ten_matrix in dataset.new_sample(5, digit):
        test_samples.append(ten_by_ten_matrix)
        y_test[i] = digit
        i += 1
Esempio n. 3
0
from keras.datasets import mnist
from tempo_layer import DigitTempotronLayer
from dataset import MNIST

np.random.seed(7)  # for reproducibility

# With 50 training images and 50 testing images
# x_train should be 50*10*10 matrix, x_test should be 50*10*10 matrix
# y_train should be 50*1 vector, y_test should be 50*1 vector

dtl = DigitTempotronLayer()
dataset = MNIST(n_components=10)

samples = []
for digit in range(10): # 0->9
    for vector in dataset.sample(5, digit, digit): # 5 x 'digit'
        samples.append(vector)
samples = np.asarray(samples)

# Preprocess Input Matrices
X_train, X_test = [samples.astype('float32') for i in range(2)]
y_train, y_test = [dtl.get_layer_output()[1] for i in range(2)]

# Y_train should be 50*10 one hot matrix (encoded outputs)
# Y_test should be 50*10 one hot matrix (encoded outputs)
Y_train = np_utils.to_categorical(y_train)
Y_test = np_utils.to_categorical(y_test)
num_classes = Y_test.shape[1]

def keras_model():
    # create model