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
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
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