我想培训一个包含子网络的网络,我需要在培训期间保持修复.基本思想是在预训练网络之前预先添加和附加一些图层(inceptionV3)
new_layers -> pre-trained and fixed sub-net (inceptionv3) -> new_layers
Run Code Online (Sandbox Code Playgroud)
并且在不改变预先训练的任务的情况下运行我的任务的训练过程.我还需要直接在预训练网络的某个层上进行分支.例如,对于inceptionV3,我喜欢将它从conv 299x299用于最后一个池层,或者从conv 79x79到最后一个池层.
是否训练"层"是由该层中使用的变量是否用梯度更新来确定的.如果您使用优化程序界面来优化您的网络,那么您可以简单地不将要保留的图层中使用的变量传递给minimize函数,即,
opt.minimize(loss, <subset of variables you want to train>)
Run Code Online (Sandbox Code Playgroud)
如果tf.gradients直接使用函数,则从第二个参数中删除要修复的变量tf.gradients.
现在,您如何"直接"分支到预先训练的网络层取决于该网络的实现方式.我只是找到tf.Conv2D你正在谈论的299x299图层的调用,并将其作为输入传递给新图层的输出,并在输出端找到79x79图层,使用其输出作为新图层的输入.
| 归档时间: |
|
| 查看次数: |
2393 次 |
| 最近记录: |