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

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

正如上篇深度学习(二)sparse autoencoder的Python实现所述,我们看懂一段话,并不需要每一个句子或每一个词,只有几个词是关键的,剩下的都可以通通过滤掉,而denoise也类似sparse,滤掉一些节点的影响,来模拟我们大脑对信息的采集和挑选。在这里,denoise相比于sparse更加直接,以一定概率,直接令某一层的一些节点的值为0。比如神经网络的第 i <script type="math/tex" id="MathJax-Element-113">i</script>层有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 

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值