【机器学习】tensorflow: 稀疏自编码

21世纪之后,数学家证明了我们获取的很多数据,可以分解为空间中少数几个基的组合,且组合系数很多为0;亦或者说,大部分数据的主要内容可以由少数几个空间基组成。这就是数据的稀疏特征,是压缩感知的基础。基于这个原理诞生了数据压缩方法,检测方法。这些方法很多都基于最优化理论,在大数据处理上,相比传统的方法,比如PCA,在计算复杂度上有很大的提升。稀疏自编码是其中一种数据压缩方法。
稀疏编码的公式为:

argminJ=12(IAX)2+λ|A|
A和X都是需要优化的项。设原图大小为mxn,我们认为的基的个数为l,那么A大小为mxl,X大小为lxn,A和X都未知,这是一个双盲优化问题。其中L1正则化用于优化基,其实也可以用L2正则化来算,收敛的要快一些。下面是L2正则化的代码:

def getloss(latent):
    with tf.device('/cpu:0'):
        initial = tf.random_normal([252,latent]) * 0.256
        A = tf.Variable(initial)
        initial = tf.random_normal([latent,252]) * 0.256
        Phi = tf.Variable(initial)
        IMG=tf.placeholder("float", shape=[252,252])
        mu = 0.0001
        sparse = tf.matmul(A,Phi)
        #print(sparse.get_shape())
        loss = sparse - IMG
        loss = tf.reshape(loss,[252*252,-1])
        A_ravel = tf.reshape(A,[latent*252,-1])
        loss = 1./(252.*252.)*tf.nn.l2_loss(loss)
        regloss = loss+mu*tf.reduce_mean(tf.abs(A_ravel))#L1#tf.nn.l2_loss(A_ravel)#L2
        return regloss,loss,IMG,sparse

然后分别设latent为20和50,得到结果
这里写图片描述
源码:https://github.com/artzers/MachineLearning/blob/master/Tensorflow/SparseCode.ipynb

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值