def build_model():

    #################
    # Regular model #
    #################
    input_size = data_sizes["sliced:data:sax"]
    input_size_mask = data_sizes["sliced:data:sax:is_not_padded"]
    input_size_locations = data_sizes["sliced:data:sax:locations"]

    l0 = nn.layers.InputLayer(input_size)
    lin_slice_mask = nn.layers.InputLayer(input_size_mask)
    lin_slice_locations = nn.layers.InputLayer(input_size_locations)

    # PREPROCESS SLICES SEPERATELY
    # Convolutional layers and some dense layers are defined in a submodel
    l0_slices = nn.layers.ReshapeLayer(l0, (-1, [2], [3], [4]))

    import je_ss_jonisc64small_360_gauss_longer
    submodel = je_ss_jonisc64small_360_gauss_longer.build_model(l0_slices)

    # Systole Dense layers
    l_sys_mu = submodel["meta_outputs"]["systole:mu"]
    l_sys_sigma = submodel["meta_outputs"]["systole:sigma"]
    # Diastole Dense layers
    l_dia_mu = submodel["meta_outputs"]["diastole:mu"]
    l_dia_sigma = submodel["meta_outputs"]["diastole:sigma"]

    # AGGREGATE SLICES PER PATIENT
    l_scaled_slice_locations = layers.TrainableScaleLayer(lin_slice_locations, scale=nn.init.Constant(0.1), trainable=False)

    # Systole
    l_pat_sys_ss_mu = nn.layers.ReshapeLayer(l_sys_mu, (-1, nr_slices))
    l_pat_sys_ss_sigma = nn.layers.ReshapeLayer(l_sys_sigma, (-1, nr_slices))
    l_pat_sys_aggr_mu_sigma = layers.JeroenLayer([l_pat_sys_ss_mu, l_pat_sys_ss_sigma, lin_slice_mask, l_scaled_slice_locations], rescale_input=100.)

    l_systole = layers.MuSigmaErfLayer(l_pat_sys_aggr_mu_sigma)

    # Diastole
    l_pat_dia_ss_mu = nn.layers.ReshapeLayer(l_dia_mu, (-1, nr_slices))
    l_pat_dia_ss_sigma = nn.layers.ReshapeLayer(l_dia_sigma, (-1, nr_slices))
    l_pat_dia_aggr_mu_sigma = layers.JeroenLayer([l_pat_dia_ss_mu, l_pat_dia_ss_sigma, lin_slice_mask, l_scaled_slice_locations], rescale_input=100.)

    l_diastole = layers.MuSigmaErfLayer(l_pat_dia_aggr_mu_sigma)


    submodels = [submodel]
    return {
        "inputs":{
            "sliced:data:sax": l0,
            "sliced:data:sax:is_not_padded": lin_slice_mask,
            "sliced:data:sax:locations": lin_slice_locations,
        },
        "outputs": {
            "systole": l_systole,
            "diastole": l_diastole,
        },
        "regularizable": dict(
            {},
            **{
                k: v
                for d in [model["regularizable"] for model in submodels if "regularizable" in model]
                for k, v in d.items() }
        ),
        "pretrained":{
            je_ss_jonisc64small_360_gauss_longer.__name__: submodel["outputs"],
        }
    }
Esempio n. 2
0
def build_model():

    #################
    # Regular model #
    #################
    input_size = data_sizes["sliced:data:sax"]
    input_size_mask = data_sizes["sliced:data:sax:is_not_padded"]
    input_size_locations = data_sizes["sliced:data:sax:locations"]

    l0 = nn.layers.InputLayer(input_size)
    lin_slice_mask = nn.layers.InputLayer(input_size_mask)
    lin_slice_locations = nn.layers.InputLayer(input_size_locations)

    # PREPROCESS SLICES SEPERATELY
    # Convolutional layers and some dense layers are defined in a submodel
    l0_slices = nn.layers.ReshapeLayer(l0, (-1, [2], [3], [4]))

    import je_ss_jonisc64small_360_gauss_longer
    submodel = je_ss_jonisc64small_360_gauss_longer.build_model(l0_slices)

    # Systole Dense layers
    l_sys_mu = submodel["meta_outputs"]["systole:mu"]
    l_sys_sigma = submodel["meta_outputs"]["systole:sigma"]
    # Diastole Dense layers
    l_dia_mu = submodel["meta_outputs"]["diastole:mu"]
    l_dia_sigma = submodel["meta_outputs"]["diastole:sigma"]

    # AGGREGATE SLICES PER PATIENT
    l_scaled_slice_locations = layers.TrainableScaleLayer(
        lin_slice_locations, scale=nn.init.Constant(0.1), trainable=False)

    # Systole
    l_pat_sys_ss_mu = nn.layers.ReshapeLayer(l_sys_mu, (-1, nr_slices))
    l_pat_sys_ss_sigma = nn.layers.ReshapeLayer(l_sys_sigma, (-1, nr_slices))
    l_pat_sys_aggr_mu_sigma = layers.JeroenLayer([
        l_pat_sys_ss_mu, l_pat_sys_ss_sigma, lin_slice_mask,
        l_scaled_slice_locations
    ],
                                                 rescale_input=100.)

    l_systole = layers.MuSigmaErfLayer(l_pat_sys_aggr_mu_sigma)

    # Diastole
    l_pat_dia_ss_mu = nn.layers.ReshapeLayer(l_dia_mu, (-1, nr_slices))
    l_pat_dia_ss_sigma = nn.layers.ReshapeLayer(l_dia_sigma, (-1, nr_slices))
    l_pat_dia_aggr_mu_sigma = layers.JeroenLayer([
        l_pat_dia_ss_mu, l_pat_dia_ss_sigma, lin_slice_mask,
        l_scaled_slice_locations
    ],
                                                 rescale_input=100.)

    l_diastole = layers.MuSigmaErfLayer(l_pat_dia_aggr_mu_sigma)

    submodels = [submodel]
    return {
        "inputs": {
            "sliced:data:sax": l0,
            "sliced:data:sax:is_not_padded": lin_slice_mask,
            "sliced:data:sax:locations": lin_slice_locations,
        },
        "outputs": {
            "systole": l_systole,
            "diastole": l_diastole,
        },
        "regularizable":
        dict({}, **{
            k: v
            for d in [
                model["regularizable"] for model in submodels
                if "regularizable" in model
            ] for k, v in d.items()
        }),
        "pretrained": {
            je_ss_jonisc64small_360_gauss_longer.__name__: submodel["outputs"],
        }
    }
def build_model():

    import j6_2ch_gauss, j6_4ch_gauss
    meta_2ch = j6_2ch_gauss.build_model()
    meta_4ch = j6_4ch_gauss.build_model()

    l_meta_2ch_systole = nn.layers.DenseLayer(
        meta_2ch["meta_outputs"]["systole"],
        num_units=64,
        W=nn.init.Orthogonal(),
        b=nn.init.Constant(0.1),
        nonlinearity=nn.nonlinearities.rectify)
    l_meta_2ch_diastole = nn.layers.DenseLayer(
        meta_2ch["meta_outputs"]["diastole"],
        num_units=64,
        W=nn.init.Orthogonal(),
        b=nn.init.Constant(0.1),
        nonlinearity=nn.nonlinearities.rectify)

    l_meta_4ch_systole = nn.layers.DenseLayer(
        meta_4ch["meta_outputs"]["systole"],
        num_units=64,
        W=nn.init.Orthogonal(),
        b=nn.init.Constant(0.1),
        nonlinearity=nn.nonlinearities.rectify)
    l_meta_4ch_diastole = nn.layers.DenseLayer(
        meta_4ch["meta_outputs"]["diastole"],
        num_units=64,
        W=nn.init.Orthogonal(),
        b=nn.init.Constant(0.1),
        nonlinearity=nn.nonlinearities.rectify)

    #################
    # Regular model #
    #################
    input_size = data_sizes["sliced:data:sax"]
    input_size_mask = data_sizes["sliced:data:sax:is_not_padded"]
    input_size_locations = data_sizes["sliced:data:sax:locations"]

    l0 = nn.layers.InputLayer(input_size)
    lin_slice_mask = nn.layers.InputLayer(input_size_mask)
    lin_slice_locations = nn.layers.InputLayer(input_size_locations)

    # PREPROCESS SLICES SEPERATELY
    # Convolutional layers and some dense layers are defined in a submodel
    l0_slices = nn.layers.ReshapeLayer(l0, (-1, [2], [3], [4]))

    import je_ss_jonisc64small_360_gauss_longer
    submodel = je_ss_jonisc64small_360_gauss_longer.build_model(l0_slices)

    # Systole Dense layers
    l_sys_mu = submodel["meta_outputs"]["systole:mu"]
    l_sys_sigma = submodel["meta_outputs"]["systole:sigma"]
    l_sys_meta = submodel["meta_outputs"]["systole"]
    # Diastole Dense layers
    l_dia_mu = submodel["meta_outputs"]["diastole:mu"]
    l_dia_sigma = submodel["meta_outputs"]["diastole:sigma"]
    l_dia_meta = submodel["meta_outputs"]["diastole"]

    # AGGREGATE SLICES PER PATIENT
    l_scaled_slice_locations = layers.TrainableScaleLayer(
        lin_slice_locations, scale=nn.init.Constant(0.1), trainable=False)

    # Systole
    l_pat_sys_ss_mu = nn.layers.ReshapeLayer(l_sys_mu, (-1, nr_slices))
    l_pat_sys_ss_sigma = nn.layers.ReshapeLayer(l_sys_sigma, (-1, nr_slices))
    l_pat_sys_aggr_mu_sigma = layers.JeroenLayer([
        l_pat_sys_ss_mu, l_pat_sys_ss_sigma, lin_slice_mask,
        l_scaled_slice_locations
    ],
                                                 rescale_input=100.)

    l_systole = layers.MuSigmaErfLayer(l_pat_sys_aggr_mu_sigma)

    l_sys_meta = nn.layers.DenseLayer(nn.layers.ReshapeLayer(
        l_sys_meta, (-1, nr_slices, 512)),
                                      num_units=64,
                                      W=nn.init.Orthogonal(),
                                      b=nn.init.Constant(0.1),
                                      nonlinearity=nn.nonlinearities.rectify)

    l_meta_systole = nn.layers.ConcatLayer(
        [l_meta_2ch_systole, l_meta_4ch_systole, l_sys_meta])
    l_weights = nn.layers.DenseLayer(l_meta_systole,
                                     num_units=512,
                                     W=nn.init.Orthogonal(),
                                     b=nn.init.Constant(0.1),
                                     nonlinearity=nn.nonlinearities.rectify)
    l_weights = nn.layers.DenseLayer(l_weights,
                                     num_units=3,
                                     W=nn.init.Orthogonal(),
                                     b=nn.init.Constant(0.1),
                                     nonlinearity=nn.nonlinearities.rectify)
    systole_output = layers.WeightedMeanLayer(l_weights, [
        l_systole, meta_2ch["outputs"]["systole"],
        meta_4ch["outputs"]["systole"]
    ])

    # Diastole
    l_pat_dia_ss_mu = nn.layers.ReshapeLayer(l_dia_mu, (-1, nr_slices))
    l_pat_dia_ss_sigma = nn.layers.ReshapeLayer(l_dia_sigma, (-1, nr_slices))
    l_pat_dia_aggr_mu_sigma = layers.JeroenLayer([
        l_pat_dia_ss_mu, l_pat_dia_ss_sigma, lin_slice_mask,
        l_scaled_slice_locations
    ],
                                                 rescale_input=100.)

    l_diastole = layers.MuSigmaErfLayer(l_pat_dia_aggr_mu_sigma)

    l_dia_meta = nn.layers.DenseLayer(nn.layers.ReshapeLayer(
        l_dia_meta, (-1, nr_slices, 512)),
                                      num_units=64,
                                      W=nn.init.Orthogonal(),
                                      b=nn.init.Constant(0.1),
                                      nonlinearity=nn.nonlinearities.rectify)

    l_meta_diastole = nn.layers.ConcatLayer(
        [l_meta_2ch_diastole, l_meta_4ch_diastole, l_dia_meta])
    l_weights = nn.layers.DenseLayer(l_meta_diastole,
                                     num_units=512,
                                     W=nn.init.Orthogonal(),
                                     b=nn.init.Constant(0.1),
                                     nonlinearity=nn.nonlinearities.rectify)
    l_weights = nn.layers.DenseLayer(l_weights,
                                     num_units=3,
                                     W=nn.init.Orthogonal(),
                                     b=nn.init.Constant(0.1),
                                     nonlinearity=nn.nonlinearities.identity)
    diastole_output = layers.WeightedMeanLayer(l_weights, [
        l_diastole, meta_2ch["outputs"]["diastole"],
        meta_4ch["outputs"]["diastole"]
    ])

    submodels = [submodel, meta_2ch, meta_4ch]

    return {
        "inputs":
        dict(
            {
                "sliced:data:sax": l0,
                "sliced:data:sax:is_not_padded": lin_slice_mask,
                "sliced:data:sax:locations": lin_slice_locations,
            }, **{
                k: v
                for d in [model["inputs"] for model in [meta_2ch, meta_4ch]]
                for k, v in d.items()
            }),
        "outputs": {
            "systole": systole_output,
            "diastole": diastole_output,
        },
        "regularizable":
        dict({}, **{
            k: v
            for d in [
                model["regularizable"] for model in submodels
                if "regularizable" in model
            ] for k, v in d.items()
        }),
        "pretrained": {
            je_ss_jonisc64small_360_gauss_longer.__name__: submodel["outputs"],
            j6_2ch_gauss.__name__: meta_2ch["outputs"],
            j6_4ch_gauss.__name__: meta_4ch["outputs"],
        },
        #"cutoff_gradients": [
        #] + [ v for d in [model["meta_outputs"] for model in [meta_2ch, meta_4ch] if "meta_outputs" in model]
        #       for v in d.values() ]
    }
Esempio n. 4
0
def build_model():

    import j6_2ch_gauss, j6_4ch_gauss
    meta_2ch = j6_2ch_gauss.build_model()
    meta_4ch = j6_4ch_gauss.build_model()

    l_meta_2ch_systole = nn.layers.DenseLayer(meta_2ch["meta_outputs"]["systole"], num_units=64, W=nn.init.Orthogonal(), b=nn.init.Constant(0.1), nonlinearity=nn.nonlinearities.rectify)
    l_meta_2ch_diastole = nn.layers.DenseLayer(meta_2ch["meta_outputs"]["diastole"], num_units=64, W=nn.init.Orthogonal(), b=nn.init.Constant(0.1), nonlinearity=nn.nonlinearities.rectify)

    l_meta_4ch_systole = nn.layers.DenseLayer(meta_4ch["meta_outputs"]["systole"], num_units=64, W=nn.init.Orthogonal(), b=nn.init.Constant(0.1), nonlinearity=nn.nonlinearities.rectify)
    l_meta_4ch_diastole = nn.layers.DenseLayer(meta_4ch["meta_outputs"]["diastole"], num_units=64, W=nn.init.Orthogonal(), b=nn.init.Constant(0.1), nonlinearity=nn.nonlinearities.rectify)

    #################
    # Regular model #
    #################
    input_size = data_sizes["sliced:data:sax"]
    input_size_mask = data_sizes["sliced:data:sax:is_not_padded"]
    input_size_locations = data_sizes["sliced:data:sax:locations"]

    l0 = nn.layers.InputLayer(input_size)
    lin_slice_mask = nn.layers.InputLayer(input_size_mask)
    lin_slice_locations = nn.layers.InputLayer(input_size_locations)

    # PREPROCESS SLICES SEPERATELY
    # Convolutional layers and some dense layers are defined in a submodel
    l0_slices = nn.layers.ReshapeLayer(l0, (-1, [2], [3], [4]))

    import je_ss_jonisc64small_360_gauss_longer
    submodel = je_ss_jonisc64small_360_gauss_longer.build_model(l0_slices)

    # Systole Dense layers
    l_sys_mu = submodel["meta_outputs"]["systole:mu"]
    l_sys_sigma = submodel["meta_outputs"]["systole:sigma"]
    l_sys_meta =  submodel["meta_outputs"]["systole"]
    # Diastole Dense layers
    l_dia_mu = submodel["meta_outputs"]["diastole:mu"]
    l_dia_sigma = submodel["meta_outputs"]["diastole:sigma"]
    l_dia_meta =  submodel["meta_outputs"]["diastole"]

    # AGGREGATE SLICES PER PATIENT
    l_scaled_slice_locations = layers.TrainableScaleLayer(lin_slice_locations, scale=nn.init.Constant(0.1), trainable=False)

    # Systole
    l_pat_sys_ss_mu = nn.layers.ReshapeLayer(l_sys_mu, (-1, nr_slices))
    l_pat_sys_ss_sigma = nn.layers.ReshapeLayer(l_sys_sigma, (-1, nr_slices))
    l_pat_sys_aggr_mu_sigma = layers.JeroenLayer([l_pat_sys_ss_mu, l_pat_sys_ss_sigma, lin_slice_mask, l_scaled_slice_locations], rescale_input=100.)

    l_systole = layers.MuSigmaErfLayer(l_pat_sys_aggr_mu_sigma)

    l_sys_meta = nn.layers.DenseLayer(nn.layers.ReshapeLayer(l_sys_meta, (-1, nr_slices, 512)), num_units=64, W=nn.init.Orthogonal(), b=nn.init.Constant(0.1), nonlinearity=nn.nonlinearities.rectify)

    l_meta_systole = nn.layers.ConcatLayer([l_meta_2ch_systole, l_meta_4ch_systole, l_sys_meta])
    l_weights = nn.layers.DenseLayer(l_meta_systole, num_units=512, W=nn.init.Orthogonal(), b=nn.init.Constant(0.1), nonlinearity=nn.nonlinearities.rectify)
    l_weights = nn.layers.DenseLayer(l_weights, num_units=3, W=nn.init.Orthogonal(), b=nn.init.Constant(0.1), nonlinearity=nn.nonlinearities.rectify)
    systole_output = layers.WeightedMeanLayer(l_weights, [l_systole, meta_2ch["outputs"]["systole"], meta_4ch["outputs"]["systole"]])

    # Diastole
    l_pat_dia_ss_mu = nn.layers.ReshapeLayer(l_dia_mu, (-1, nr_slices))
    l_pat_dia_ss_sigma = nn.layers.ReshapeLayer(l_dia_sigma, (-1, nr_slices))
    l_pat_dia_aggr_mu_sigma = layers.JeroenLayer([l_pat_dia_ss_mu, l_pat_dia_ss_sigma, lin_slice_mask, l_scaled_slice_locations], rescale_input=100.)

    l_diastole = layers.MuSigmaErfLayer(l_pat_dia_aggr_mu_sigma)

    l_dia_meta = nn.layers.DenseLayer(nn.layers.ReshapeLayer(l_dia_meta, (-1, nr_slices, 512)), num_units=64, W=nn.init.Orthogonal(), b=nn.init.Constant(0.1), nonlinearity=nn.nonlinearities.rectify)

    l_meta_diastole = nn.layers.ConcatLayer([l_meta_2ch_diastole, l_meta_4ch_diastole, l_dia_meta])
    l_weights = nn.layers.DenseLayer(l_meta_diastole, num_units=512, W=nn.init.Orthogonal(), b=nn.init.Constant(0.1), nonlinearity=nn.nonlinearities.rectify)
    l_weights = nn.layers.DenseLayer(l_weights, num_units=3, W=nn.init.Orthogonal(), b=nn.init.Constant(0.1), nonlinearity=nn.nonlinearities.identity)
    diastole_output = layers.WeightedMeanLayer(l_weights, [l_diastole, meta_2ch["outputs"]["diastole"], meta_4ch["outputs"]["diastole"]])

    submodels = [submodel, meta_2ch, meta_4ch]


    return {
        "inputs":dict({
            "sliced:data:sax": l0,
            "sliced:data:sax:is_not_padded": lin_slice_mask,
            "sliced:data:sax:locations": lin_slice_locations,
        }, **{ k: v for d in [model["inputs"] for model in [meta_2ch, meta_4ch]]
               for k, v in d.items() }
        ),
        "outputs": {
            "systole": systole_output,
            "diastole": diastole_output,
        },
        "regularizable": dict(
            {},
            **{
                k: v
                for d in [model["regularizable"] for model in submodels if "regularizable" in model]
                for k, v in d.items() }
        ),
        "pretrained":{
            je_ss_jonisc64small_360_gauss_longer.__name__: submodel["outputs"],
            j6_2ch_gauss.__name__: meta_2ch["outputs"],
            j6_4ch_gauss.__name__: meta_4ch["outputs"],
        },
        #"cutoff_gradients": [
        #] + [ v for d in [model["meta_outputs"] for model in [meta_2ch, meta_4ch] if "meta_outputs" in model]
        #       for v in d.values() ]
    }