Python 是否有一个包或函数来训练带有堆叠自动编码器的神经网络,例如 R 中的 deepnet



我有一个神经网络,我在Python中使用了Keras/tensorflow。我正在尝试习惯使用Python。

在 R 中,有这个函数可以使用来自深度网络的堆叠自动编码器预训练神经网络。我似乎在 Python 中找不到类似的函数或包。我是否需要编写自己的函数,Python/Keras也有这样的函数吗?

是的,您可以使用以下函数在 python 中找到此实现。

配置:

n_hidden_layer   = 3
n_hidden_unit    = 1000
neuron           = Neurons.Sigmoid()
param_key_prefix = "ip-layer"
corruption_rates = [0.1,0.2,0.3]
pretrain_epoch   = 15
finetune_epoch   = 1000
batch_size       = 100
momentum         = 0.0
pretrain_lr      = 0.001
finetune_lr      = 0.1
param_keys       = ["$param_key_prefix-$i" for i = 1:n_hidden_layer] 
data_layer = HDF5DataLayer(name="train-data", source="data/train.txt",
batch_size=batch_size, shuffle=@windows ? false : true)
rename_layer = IdentityLayer(bottoms=[:data], tops=[:ip0])
hidden_layers = [
InnerProductLayer(name="ip-$i", param_key=param_keys[i],
output_dim=n_hidden_unit, neuron=neuron,
bottoms=[symbol("ip$(i-1)")], tops=[symbol("ip$i")])
for i = 1:n_hidden_layer
]  

预培训:

ae_data_layer = SplitLayer(bottoms=[symbol("ip$(i-1)")], tops=[:orig_data, :corrupt_data])
corrupt_layer = RandomMaskLayer(ratio=corruption_rates[i], bottoms=[:corrupt_data])
encode_layer  = copy(hidden_layers[i], bottoms=[:corrupt_data])
recon_layer   = TiedInnerProductLayer(name="tied-ip-$i", tied_param_key=param_keys[i],tops=[:recon], bottoms=[symbol("ip$i")])
recon_loss_layer = SquareLossLayer(bottoms=[:recon, :orig_data]) 
da_layers = [data_layer, rename_layer, ae_data_layer, corrupt_layer,
hidden_layers[1:i-1]..., encode_layer, recon_layer, recon_loss_layer]
da = Net("Denoising-Autoencoder-$i", backend, da_layers)
println(da)
# freeze all but the layers for auto-encoder
freeze_all!(da)
unfreeze!(da, "ip-$i", "tied-ip-$i")  
base_dir = "pretrain-$i"
method = SGD()
pretrain_params  = make_solver_parameters(method, max_iter=div(pretrain_epoch*60000,batch_size),
regu_coef=0.0, mom_policy=MomPolicy.Fixed(momentum),
lr_policy=LRPolicy.Fixed(pretrain_lr), load_from=base_dir)
solver = Solver(method, pretrain_params)
add_coffee_break(solver, TrainingSummary(), every_n_iter=1000)
add_coffee_break(solver, Snapshot(base_dir), every_n_iter=3000)
solve(solver, da)
destroy(da)  

有关详细信息和微调,可以参考此文档。

最新更新