我想使用Dense V-Net架构实施转移学习。在搜索如何执行此操作时,我发现此功能当前正在使用(How do I implement transfer learning in NiftyNet?)。
尽管从该答案中可以很明显地看出,没有直接的方法可以实现它,但我还是在尝试:
1)创建密集的V-Net
2)从.ckpt文件还原weigths
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.
因此,问题是:
有什么办法可以实现呢?
最佳答案
转移学习已添加到NiftyNet中。
您可以选择要通过vars_to_restore
配置参数还原的变量,以及要通过vars_to_freeze
配置参数冻结的变量。
有关更多信息,请参见here。