4

我想使用 NiftyNet 堆栈执行一些迁移学习,因为我的标记图像数据集相当小。在 TensorFlow 中,这是可能的——我可以加载各种预训练的网络并直接使用它们的层。为了微调网络,我可以冻结中间层的训练,只训练最后一层,或者我可以只使用中间层的输出作为特征向量来输入另一个分类器。

我如何在 NiftyNet 中做到这一点?文档或源代码中唯一提到“迁移学习”是参考模型动物园,但对于我的任务(图像分类),动物园中没有可用的网络。ResNet 架构似乎已经实现并且可以使用,但据我所知,它还没有经过任何训练。此外,似乎我可以训练网络的唯一方法是运行net_classify train,使用配置文件中的各种TRAIN配置选项,这些选项都没有冻结网络的选项。中的各个层niftynet.layer似乎也没有选择是否可以训练它们。

我想我的问题是:

  1. 是否可以通过预训练的 TensorFlow 网络进行移植?
    • 如果我在 NiftyNet 中手动重新创建层架构,有没有办法从预训练的 TF 网络导入权重?
  2. 如何访问模型的中间权重和层?(如何访问 NiftyNet 中预训练模型的中间激活图?指的是模型动物园,可以使用 获得它们net_download,但不能使用任何任意模型)
  3. 顺便说一句,学习率似乎也是一个常数——要随着时间的推移而变化,我是否必须运行网络进行一些迭代,更改lr,然后从最后一个检查点重新开始训练?
4

1 回答 1

1

[编辑]:这里是使用 NiftyNet 进行迁移学习的文档。

此功能目前正在开发中。请参阅此处了解完整详情。

预期功能包括:

  • 打印所有可训练变量名称的命令(带有可选的正则表达式匹配)
  • 能够随机初始化变量子集,该子集由正则表达式名称匹配创建
  • 能够恢复(从现有检查点)并继续更新变量的子集。如果优化方法发生变化,则处理特定于方法的变量(例如动量)
  • 能够恢复(从现有检查点)并冻结其余变量的训练权重
  • 训练后保存所有可训练变量
  • 为微调、变量名正则表达式、单元测试添加配置参数
  • 演示/教程
  • 预处理检查点以解决兼容性问题
  • 处理批量规范和丢失层(编辑网络以删除批量规范变量)
于 2018-09-19T04:41:10.187 回答