【问题标题】:Implement transfer learning on niftynet在 niftynet 上实现迁移学习
【发布时间】:2018-10-29 17:36:52
【问题描述】:

我想使用 Dense V-Net 架构实现迁移学习。在我搜索如何执行此操作时,我发现此功能目前正在开发中 (How do I implement transfer learning in NiftyNet?)。

虽然从那个答案很明显没有直接的方法来实现它,但我试图:

1) 创建 Dense V-Net

2) 从 .ckpt 文件恢复权重

3) 自行实施迁移学习

要执行第 1 步,我想我可以使用 niftynet.network.dense_vnet 模块。因此,我尝试了以下方法:

checkpoint = '/path_to_ckpt/model.ckpt-3000.index'
x = tf.placeholder(dtype=tf.float32, shape=[None,1,144,144,144])
architecture_parameters = dict(
    use_bdo=False,
    use_prior=False,
    use_dense_connections=True,
    use_coords=False)

hyperparameters = dict(
    prior_size=12,
    n_dense_channels=(4, 8, 16),
    n_seg_channels=(12, 24, 24),
    n_input_channels=(24, 24, 24),
    dilation_rates=([1] * 5, [1] * 10, [1] * 10),
    final_kernel=3,
    augmentation_scale=0)
model_instance = DenseVNet(num_classes=9,hyperparameters=hyperparameters,
                             architecture_parameters=architecture_parameters)

model_net = DenseVNet.layer_op(model_instance, x)

但是,我收到以下错误:

TypeError: Failed to convert object of type <type 'list'> to Tensor. Contents: [None, 1, 72, 72, 24]. Consider casting elements to a supported type.

所以,问题是:

有什么方法可以实现吗?

【问题讨论】:

    标签: python tensorflow deep-learning niftynet


    【解决方案1】:

    迁移学习已添加到 NiftyNet。

    您可以通过vars_to_restore config 参数选择要恢复的变量和通过vars_to_freeze config 参数冻结的变量。

    更多信息请参见here

    【讨论】:

      【解决方案2】:

      通过将配置文件[TRAINING] 部分中的参数starting_iter 设置为预训练模型的数量,可以通过从现有模型恢复权重来实现简单的迁移学习。在您的示例中starting_iter=3000

      这将从您的模型中恢复权重,新的迭代将从这个初始化开始。

      这里你的模型架构必须完全一样,否则会报错。

      对于更复杂的迁移学习或微调,您可以只恢复部分权重,有一个很好的实现 here。它可能很快就会与官方 niftynet 存储库合并,但您已经可以使用它了。

      【讨论】:

        猜你喜欢
        • 2018-11-19
        • 2016-11-28
        • 1970-01-01
        • 2017-09-14
        • 2020-05-13
        • 2018-10-04
        • 2020-10-31
        • 2019-12-17
        • 1970-01-01
        相关资源
        最近更新 更多