def associate_data2dataDBN(cache=False): print "Testing Joint DBN which tries to learn even-oddness of numbers" # project set-up data_manager = store.StorageManager('associative_dbn_test', log=True) # Load mnist hand digits, class label is already set to binary train, valid, test = m_loader.load_digits(n=[500, 100, 100], digits=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], pre={'binary_label': True}) train_x, train_y = train test_x, test_y = test train_x01 = m_loader.sample_image(train_y) dataset01 = m_loader.load_digits(n=[500, 100, 100], digits=[0, 1]) # Initialise RBM parameters # fixed base train param base_tr = RBM.TrainParam(learning_rate=0.01, momentum_type=RBM.CLASSICAL, momentum=0.5, weight_decay=0.0005, sparsity_constraint=False, epochs=20) # top layer parameters tr = RBM.TrainParam(learning_rate=0.1, find_learning_rate=True, momentum_type=RBM.NESTEROV, momentum=0.5, weight_decay=0.001, sparsity_constraint=False, epochs=20) tr_top = RBM.TrainParam(learning_rate=0.1, find_learning_rate=True, momentum_type=RBM.CLASSICAL, momentum=0.5, weight_decay=0.001, sparsity_constraint=False, epochs=20) # Layer 1 # Layer 2 # Layer 3 topology = [784, 500, 500, 100] config = associative_dbn.DefaultADBNConfig() config.topology_left = [784, 500, 500, 100] config.topology_right = [784, 500, 500, 100] config.reuse_dbn = False config.top_rbm_params = tr_top config.base_rbm_params = [base_tr, tr, tr] for cd_type in [RBM.CLASSICAL, RBM.PERSISTENT]: for n_ass in [100, 250, 500, 750, 1000]: config.n_association = n_ass config.top_cd_type = cd_type # Construct DBN assoc_dbn = associative_dbn.AssociativeDBN(config=config, data_manager=data_manager) # Train assoc_dbn.train(train_x, train_x01, cache=cache, optimise=True) for n_recall in [1, 3, 5, 7, 10]: for n_think in [0, 1, 3, 5, 7, 10]: # 1, 3, 5, 7, 10]: # Reconstruct sampled = assoc_dbn.recall(test_x, n_recall, n_think) # Sample from top layer to generate data sample_n = 100 utils.save_images(sampled, image_name='reconstruced_{}_{}_{}.png'.format(n_ass, n_recall, n_think), shape=(sample_n / 10, 10)) dataset01[2] = (theano.shared(sampled), test_y)
def associate_data2dataDBN(cache=False): print "Testing Associative DBN which tries to learn even-oddness of numbers" # project set-up data_manager = store.StorageManager('Kanade/associative_dbn_test', log=True) # Load mnist hand digits, class label is already set to binary dataset = loader.load_kanade(n=500, emotions=['anger', 'sadness', 'happy'], pre={'scale2unit': True}) train_x, train_y = dataset train_x01 = loader.sample_image(train_y) dataset01 = loader.load_kanade(n=500) # Initialise RBM parameters # fixed base train param base_tr = RBM.TrainParam(learning_rate=0.001, momentum_type=RBM.CLASSICAL, momentum=0.5, weight_decay=0.0005, sparsity_constraint=False, epochs=20) # top layer parameters tr = RBM.TrainParam( learning_rate=0.001, # find_learning_rate=True, momentum_type=RBM.NESTEROV, momentum=0.5, weight_decay=0.001, sparsity_constraint=False, epochs=20) tr_top = RBM.TrainParam( learning_rate=0.001, # find_learning_rate=True, momentum_type=RBM.CLASSICAL, momentum=0.5, weight_decay=0.001, sparsity_constraint=False, epochs=20) # Layer 1 # Layer 2 # Layer 3 # topology = [784, 500, 500, 100] config = associative_dbn.DefaultADBNConfig() config.topology_left = [625, 500, 500, 100] config.topology_right = [625, 500, 500, 100] config.reuse_dbn = False config.top_rbm_params = tr_top config.base_rbm_params = [base_tr, tr, tr] count = 0 for cd_type in [RBM.CLASSICAL, RBM.PERSISTENT]: for n_ass in [100, 250, 500, 750, 1000]: config.n_association = n_ass config.top_cd_type = cd_type # Construct DBN ass_dbn = associative_dbn.AssociativeDBN(config=config, data_manager=data_manager) # Train for trainN in xrange(0, 5): ass_dbn.train(train_x, train_x01, cache=cache) for n_recall in [1, 3, 10]: for n_think in [0, 1, 3, 5, 10]: # 1, 3, 5, 7, 10]: # Reconstruct sampled = ass_dbn.recall(train_x, n_recall, n_think) # Sample from top layer to generate data sample_n = 100 utils.save_images( sampled, image_name='{}_reconstruced_{}_{}_{}.png'.format( count, n_ass, n_recall, n_think), shape=(sample_n / 10, 10), img_shape=(25, 25)) count += 1