如何在NiftyNet中训练数据

时间:2019-06-14 17:40:30

标签: python neural-network training-data niftynet

我正在尝试使用NiftyNet用我自己的数据(CT图像及其相应的标签)来训练网络。在经过其他培训之后,我使用相似的示例数据,所有我可以找到的所有NiftyNet文档以及调整了我自己的数据的参数,很快设计了Net类。但我不断收到此错误:

  

“ TypeError: init ()获得了意外的关键字参数'w_initializer'”。

我已经尝试过在config.ini,Net类等中可以想到的所有更改。但是我无法使其起作用,也找不到原因。任何人都可以帮助解决此错误?或者也许从一开始就分享一些指导来训练我自己的网络的准则,这样我至少可以尝试从零开始,寻找一个出路?

训练命令:

! net_segment train -c /home/niftynet/extensions/dense_vnet_TC/config.ini --name dense_vnet_TC.net_TC.MyNet

config.ini中的一些值:

[NETWORK]
name = dense_vnet
batch_size = 6
volume_padding_size = 0
window_sampling = resize

[TRAINING]
sample_per_volume = 1
lr = 0.001
loss_type = dense_vnet_TC.dice_hinge.dice
starting_iter = 0
save_every_n = 1000
max_iter = 3001

[INFERENCE]
border = (0, 0, 0)
inference_iter = 3000
output_interp_order = 0
spatial_window_size = (512, 512, 40)
save_seg_dir = ./segmentation_output/

############################ Custom configuration
[SEGMENTATION]
image = ct
label = label
label_normalisation = False
output_prob = False
num_classes = 2

网络课程的基础:

from niftynet.network.base_net import BaseNet

class MyNet(BaseNet):

    def __init__(self, num_classes, name='MyNet'):

        super(MyNet, self).__init__(num_classes=num_classes, acti_func=acti_func, name=name)

        # network specific property
        self.hidden_features = 10

    def layer_op(self, images, is_training):
        # create layer instances
        conv_1 = ConvolutionalLayer(self.hidden_features, kernel_size=3, name='conv_input')

        conv_2 = ConvolutionalLayer(self.num_classes, kernel_size=1, acti_func=None, name='conv_output')

        # apply layer instances
        flow = conv_1(images, is_training)
        flow = conv_2(flow, is_training)

        return flow

在按预期进行一些处理之后,输出结束:

  

回溯(最近通话最近):文件
  
中的“ / home / niftynet / bin / net_segment”,第10行       sys.exit(main())文件“ /home/niftynet/lib/python3.6/site-packages/niftynet/init.py”,
  主线142行
      app_driver.run(app_driver.app)文件“ /home/niftynet/lib/python3.6/site-packages/niftynet/engine/application_driver.py”,
  189行,正在运行
      is_training_action = self.is_training_action)文件“ /home/niftynet/lib/python3.6/site-packages/niftynet/engine/application_driver.py”,
  第258行,在create_graph
中       application.initialise_network()文件“ /home/niftynet/lib/python3.6/site-packages/niftynet/application/segmentation_application.py”,
  初始化网络中的第280行
      acti_func = self.net_param.activation_function)TypeError: init ()获得了意外的关键字参数'w_initializer'

1 个答案:

答案 0 :(得分:0)

我认为您需要更改此行(基于我遇到的类似问题):

super(MyNet, self).__init__(num_classes=num_classes, acti_func=acti_func, name=name)

用于(只需添加w_regularizer):

super(MyNet, self).__init__(num_classes=num_classes, w_regularizer=w_regularizer, acti_func=acti_func, name=name)

如果不尝试也可以在此处添加它:

def __init__(self, num_classes, w_regularizer=w_regularizer, name='MyNet'): 

希望对您有帮助。