def run(train_data, test_data): batch_size = 10 n_samples = np.array(train_data).shape[0] n_batches = int(np.ceil(float(n_samples) / batch_size)) batch_slices = list( gen_even_slices(n_batches * batch_size, n_batches, n_samples)) nodes = [50, 75, 100, 150] for item in nodes: errors = [] model = BernoulliRBM(n_components=item, learning_rate=0.1, batch_size=10, n_iter=1, random_state=None, verbose=1) for _ in range(20): for batch_slice in batch_slices: model.partial_fit(train_data[batch_slice]) errors.append(percent_error(model.gibbs(test_data), test_data)) plot.plot_points(errors) plot.plot_heatmap(reformat_data(test_data[0])) plot.plot_heatmap(reformat_data(model.gibbs(test_data)[0])) if item == 50 or item == 100: plot.plot_heatmap(model.__dict__['components_'].reshape(item, 784))
def train_rbm_pcd(x_train, x_val, n_hidden, lr, inftype, n_iter=1000): assert n_iter > 100 # we checkpoint every 100 iterations rbm = BernoulliRBM( n_components=n_hidden, learning_rate=lr, batch_size=x_train.shape[0], n_iter=n_iter, verbose=0, ) best_score, best_rbm = np.inf, None for it in range(n_iter): rbm.partial_fit(x_train) if (it + 1) % 20 == 0: # checkpoint every 20 score = test_rbm_pcd( x_val, rbm.components_, rbm.intercept_hidden_, rbm.intercept_visible_, inftype, ) if score < best_score: best_score = score best_rbm = ( rbm.components_.copy(), rbm.intercept_hidden_.copy(), rbm.intercept_visible_.copy(), ) return best_rbm, best_score
def test_small_sparse_partial_fit(): for sparse in [csc_matrix, csr_matrix]: X_sparse = sparse(Xdigits[:100]) X = Xdigits[:100].copy() rbm1 = BernoulliRBM(n_components=64, learning_rate=0.1, batch_size=10, random_state=9) rbm2 = BernoulliRBM(n_components=64, learning_rate=0.1, batch_size=10, random_state=9) rbm1.partial_fit(X_sparse) rbm2.partial_fit(X) assert_almost_equal(rbm1.score_samples(X).mean(), rbm2.score_samples(X).mean(), decimal=0)
def test_partial_fit(): X = Xdigits.copy() rbm = BernoulliRBM(n_components=64, learning_rate=0.1, batch_size=20, random_state=9) n_samples = X.shape[0] n_batches = int(np.ceil(float(n_samples) / rbm.batch_size)) batch_slices = np.array_split(X, n_batches) for i in range(7): for batch in batch_slices: rbm.partial_fit(batch) assert_almost_equal(rbm.score_samples(X).mean(), -21.0, decimal=0) assert_array_equal(X, Xdigits)
def test_partial_fit(): X = Xdigits.copy() rbm = BernoulliRBM(n_components=64, learning_rate=0.1, batch_size=20, random_state=9) n_samples = X.shape[0] n_batches = int(np.ceil(float(n_samples) / rbm.batch_size)) batch_slices = np.array_split(X, n_batches) for i in range(7): for batch in batch_slices: rbm.partial_fit(batch) assert_almost_equal(rbm.score_samples(X).mean(), -21., decimal=0) assert_array_equal(X, Xdigits)
learning_rate=0.01, verbose=1, n_iter=30) RBM2 = BernoulliRBM(n_components=100, batch_size=10, learning_rate=0.01, verbose=1, n_iter=30) for i, rev_theta in enumerate(np.linspace(0.1, 1, 10)): theta = 1 - rev_theta print "Preentrenando modelo para theta=", theta print "Leyendo batch", i + 1 Xtr_ns = load_single_NORB_train_val(".", i + 1, onlyx=True) Xtr_ns = scale_data(Xtr_ns) RBM1.partial_fit(Xtr_ns) Xtr_ns2 = RBM1.transform(Xtr_ns) print "..." Xtr_ns2 = scale_data(Xtr_ns2) RBM2.partial_fit(Xtr_ns2) del Xtr_ns, Xtr_ns2 print "..." joblib.dump(RBM1, "2/RBM1_512_" + str(theta) + ".pkl") joblib.dump(RBM2, "2/RBM2_512_" + str(theta) + ".pkl") # Entrenar usando RBM accuracies = [] activation = 'tanh' for i, theta in enumerate(np.linspace(0.1, 1, 10)): print "Analizando theta =", theta