深度学习进阶课程19---非监督学习神经网络Restricted Boltzmann Machine

这篇文章写一种新的network

Restricted Boltzmann Machine:
(1)由Geoff Hinton发明
(2)降低维度,分类,回归,特征学习
(3)非监督学习(unsupervised learning)

在这里插入图片描述

activation f ((weight w * input x)+bias b)=output a
在这里插入图片描述
在这里插入图片描述
多个输入:
在这里插入图片描述
多个隐藏层:
在这里插入图片描述
隐藏层变成输入层,反向更新,用老的权重和新的bias:
在这里插入图片描述
回到原始输入层:
算出的值跟原始输入层的值比较,最小化error,接着迭代更新:
正向更新:用输入预测神经元的activation,也就是输出的概率,在给定的权重下:p(a|x;w)
反向更新的时候:
activation被输入到网络里面,来预测原始的数据x,RBM尝试估计xx的概率,对于给定的activation a:p(x|a;w)
结合以上两步:模拟x和a的joint probability distribution:p(x,a)
Generative learning:模拟输入数据的概率分部
discrimination learning:把输入映射到输出,区分几类点
在这里插入图片描述
p:原始数据分布 q:重新建设的概率分部
对于图像也一样,像素点也有一定的概率分布:
在这里插入图片描述
在这里插入图片描述
正向更新:给定这些像素,权重应该送出一个更强的信号给大象还是狗?
反向更新:给定大象和狗,我应该期待什么样的像素分布?

__author__ = '多欢喜'


import numpy as np
import matplotlib.pyplot as plt

from scipy.ndimage import convolve
from sklearn import linear_model,datasets,metrics
from sklearn.model_selection import train_test_split
from sklearn.neural_network import BernoulliRBM
from sklearn.pipeline import Pipeline

def nudge_dataset(X,Y):
    '''
    This produces as dataset 5 times bigger than the original one,
    by moving the 8x8 images in X around by 1px to left,right,down,up

    '''
    direction_vectors=[
        [[0,1,0],
         [0,0,0],
         [0,0,0]],

        [[0,0,0],
         [1,0,0],
         [0,0,0]],

        [[0,0,0],
         [0,0,1],
         [0,0,0]],

        [[0,0,0],
         [0,0,0],
         [0,1,0]]]#定义四个矩阵,上下左右移动
    shift=lambda x,w:convolve(x.reshape((8,8)),mode='constant',
                              weights=w).ravel()
    X=np.concatenate([X]+[np.apply_along_axis(shift,1,X,vector)for vector in direction_vectors])
    Y=np.concatenate([Y for _ in range(5)],axis=0)
    return X,Y

#Load Data
digits=datasets.load_digits()
X=np.asarray(digits.data,'float32')
X,Y=nudge_dataset(X,digits.target)
X=(X-np.min(X,0))//(np.max(X,0)+0.0001)#0-1 scaling

X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.2,random_state=0)

logistic=linear_model.LogisticRegression()
rbm=BernoulliRBM(random_state=0,verbose=True)

classifier=Pipeline(steps=[('rbm',rbm),('logistic',logistic)])

rbm.learning_rate=0.06
rbm.n_iter=20


rbm.n_components=100
logistic.C=6000.0

classifier.fit(X_train,Y_train)

logistic_classifier=linear_model.LogisticRegression(C=100.0)
logistic_classifier.fit(X_train,Y_train)

print()
print('Logistic regression using RBM features:\n%s\n'%(metrics.classification_report(
    Y_test,classifier.predict(X_test)
)))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值