我想使用 NiftyNet 堆栈执行一些迁移学习,因为我的标记图像数据集相当小。在 TensorFlow 中,这是可能的——我可以加载各种预训练的网络并直接使用它们的层。为了微调网络,我可以冻结中间层的训练,只训练最后一层,或者我可以只使用中间层的输出作为特征向量来输入另一个分类器。
我如何在 NiftyNet 中做到这一点?文档或源代码中唯一提到“迁移学习”是参考模型动物园,但对于我的任务(图像分类),动物园中没有可用的网络。ResNet 架构似乎已经实现并且可以使用,但据我所知,它还没有经过任何训练。此外,似乎我可以训练网络的唯一方法是运行net_classify train
,使用配置文件中的各种TRAIN
配置选项,这些选项都没有冻结网络的选项。中的各个层niftynet.layer
似乎也没有选择是否可以训练它们。
我想我的问题是:
- 是否可以通过预训练的 TensorFlow 网络进行移植?
- 如果我在 NiftyNet 中手动重新创建层架构,有没有办法从预训练的 TF 网络导入权重?
- 如何访问模型的中间权重和层?(如何访问 NiftyNet 中预训练模型的中间激活图?指的是模型动物园,可以使用 获得它们
net_download
,但不能使用任何任意模型) - 顺便说一句,学习率似乎也是一个常数——要随着时间的推移而变化,我是否必须运行网络进行一些迭代,更改
lr
,然后从最后一个检查点重新开始训练?