各种自编码器
代码
https://www.atyun.com/16921.html

一般用来作逐层无监督预训练,但自从dropout、relu等提出后,已经没什么人用了。

对于常见的分类任
务,一般分为以下两个阶段:
- layer-wise pre-training (逐层预训练)
- fune-tuning (微调)
注意到,前述的各种SAE,本质上都是非监督学习,SAE各层的输出都是原始数据的不同表达。对
于分类任务,往往在SAE顶端再添加一分类层(如Softmax层),并结合有标注的训练数据,在误
差函数的指导下,对系统的参数进行微调,以使得整个网络能够完成所需的分类任务。
对于微调过程,即可以只调整分类层的参数(此时相当于把整个SAE当做一个feature
extractor),也可以调整整个网络的参数(适合训练数据量比较大的情况)。
稀疏自编码器
就是在损失函数加入一个项,表示神经元
- https://blog.csdn.net/u010278305/article/details/46881443
- https://blog.csdn.net/jiede1/article/details/76681371
代码
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 (逐层贪婪预训练)
-
什么Autoencoder、RBM,现在都已经没人用了。现在都用relu和dropout等。
-
现在所常说的 pre-training (预训练) ,其实 专指 migration learning (迁移学习),那是一种无比强大又省事儿的trick。
网友评论