代码 https://www.atyun.com/16921.html
堆叠自编码器
一般用来作逐层无监督预训练,但自从dropout、relu等提出后,已经没什么人用了。
去噪自编码器
对于常见的分类任 务,一般分为以下两个阶段:
注意到,前述的各种SAE,本质上都是非监督学习,SAE各层的输出都是原始数据的不同表达。对 于分类任务,往往在SAE顶端再添加一分类层(如Softmax层),并结合有标注的训练数据,在误 差函数的指导下,对系统的参数进行微调,以使得整个网络能够完成所需的分类任务。
对于微调过程,即可以只调整分类层的参数(此时相当于把整个SAE当做一个feature extractor),也可以调整整个网络的参数(适合训练数据量比较大的情况)。
就是在损失函数加入一个项,表示神经元
代码 https://blog.csdn.net/m0_37744293/article/details/70767843
关键代码部分
# Construct model
P=0.1
beta=1
encoder_op = encoder(X)
decoder_op = decoder(encoder_op)
Pj=tf.reduce_mean(encoder_op,0)
sparse_cost=tf.reduce_mean(P*tf.log(P/Pj)+(1-P)*tf.log((1-P)/(1-Pj)))
# Prediction
y_pred = decoder_op
# Targets (Labels) are the input data.
y_true = X
# Define loss and optimizer, minimize the squared error
cost = tf.reduce_mean(tf.pow(y_true - y_pred, 2))+sparse_cost*beta
Pj是一个batch的每个神经元的平均激活值
参考深度学习: greedy layer-wise pre-training (逐层贪婪预训练)