深度学习(三)denoise autoencoder的Python实现

本章主要讲述autoencoder另外一种改进,denoise autoencoder,Python的编写也是在深度学习(一)autoencoder的Python实现(2)基础上,进行改造的,具体的修改的地方,将会单独贴出来。

正如上篇深度学习(二)sparse autoencoder的Python实现所述,我们看懂一段话,并不需要每一个句子或每一个词,只有几个词是关键的,剩下的都可以通通过滤掉,而denoise也类似sparse,滤掉一些节点的影响,来模拟我们大脑对信息的采集和挑选。在这里,denoise相比于sparse更加直接,以一定概率,直接令某一层的一些节点的值为0。比如神经网络的第 i 层有4个节点,每一个节点本来都有值,该层为[1,3,-1,-3],然后我们令小于0的节点值归零,那么在训练的时候该层节点的值则为[1,3,0,0]

在bean.py的nn类增加一个成员变量,denoise参数,当节点值大于denoise时,保持,小于的话,则将值置为0

# 设置denoise参数
 self.denoise = 0.2

最后修改util.py中节点值的修改

#前馈函数
def nnff(nn,x,y):
    layers = nn.layers
    numbers = x.shape[0]
    # 赋予初值
    nn.values[0] = x
    for i in range(1,layers):
        nn.values[i] = sigmod(np.dot(nn.values[i-1],nn.W[i-1])+nn.B[i-1])
    # 当有denose时,即要进行dropout(增加)
    for j in range(1,layers-1):
        nn.values[j] = nn.values[j]*(np.random.random(nn.values[j].shape)>nn.denoise)
    # 最后一层与实际的误差
    nn.error = y - nn.values[layers-1]
    nn.loss = 1.0/2.0*(nn.error**2).sum()/numbers
    return nn 

最后进行测试
测试数据为
这里写图片描述
最后结果为
这里写图片描述
基本符合要求

猜你喜欢

转载自blog.csdn.net/sinat_27634939/article/details/51465011
今日推荐