Бернулли РБМ, расчет ошибки после каждой эпохи

В настоящее время я использую пакет scikit-learn для реализации сети RBM Бернулли, которая, кажется, работает до сих пор, но у меня есть одна проблема, я хотел бы рассчитать веса для скрытых узлов после каждой итерации, получить ошибку, и затем продолжайте, мой текущий код выглядит так:

def rbm():
    logistic = linear_model.LogisticRegression(solver='lbfgs', max_iter=15000,
                                               multi_class='multinomial')
    rbm = BernoulliRBM(n_iter=40, learning_rate = 0.01, n_components = 100, random_state=0, verbose=True)
    #ME =
    rbm_features_classifier = Pipeline(
        steps=[('rbm', rbm), ('logistic', logistic)])
    rbm_features_classifier.fit(bindigit_trn, targetdigit_trn)
    return rbm.components_

def plotting():
    w = rbm()
    w = w.reshape((100, 784))
    ME = np.zeros((2000, ))
    for j in range(1, 20):
        pattern_for_testing = bindigit_tst[j - 1]
        x_star = np.dot(w, pattern_for_testing.T)
        result = np.dot(w.T, x_star)
        error = np.sum(abs(bindigit_tst[j - 1] - result))
        ME[j] = error*(1/bindigit_tst.shape[1])
        result = result.reshape((28, 28))
        plt.subplot(2, 10, j)
        plt.axis('off')
        plt.imshow(result, cmap = "gray")
    print(ME)
    plt.show()

Шаблоны, которые я использую, это набор данных MNIST (рукописные цифры). Как я уже упоминал выше, есть ли способ позволить встроенному пакету возвращать веса, хранящиеся в rbm.components_ в моем случае для каждой итерации, аккуратно? Я понимаю, что, вероятно, могу сделать это с помощью цикла for, но я даже не хочу думать о том, к какой временной сложности это приведет... Заранее спасибо

0 ответов

Другие вопросы по тегам