伯努利RBM,每个时期后计算误差

时间:2019-02-20 12:27:01

标签: rbm

我目前正在使用scikit-learn包来实现一个bernoulli 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 个答案:

没有答案