在niftyn上实现迁移学习

2024-09-25 04:34:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用密集的V-Net架构来实现迁移学习。当我在搜索如何做到这一点时,我发现这个特性目前正在使用(How do I implement transfer learning in NiftyNet?)。在

虽然从这个答案可以很清楚地看出,没有一个直接的方法来实施它,但我试图:

1)制作密集的V型网

2)从.ckpt文件恢复weights

3)自主实施迁移学习

为了执行第一步,我想我可以使用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)

但是,我得到了以下错误:

^{2}$

所以,问题是:

有没有办法实现这一点?在


Tags: instancefalsemodelusetfdictdenseparameters
2条回答

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

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

在这里,模型的体系结构必须完全相同,否则会出现错误。在

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

转移学习已经被添加到NiftyNet中。在

您可以通过vars_to_restore配置参数选择要还原的变量,以及通过vars_to_freeze配置参数冻结哪些变量。在

有关详细信息,请参见here。在

相关问题 更多 >