Parameters: ----------- input_var : theano 3Dtensor shape(n_samples, n_in_channels, ray_length) filter_size : odd int (to fit with same padding) n_filters : int, number of filters for each convLayer n_classes : int, number of classes to segment depth : int, number of sta
(input_var,
n_classes = 6,
nb_in_channels = 2,
filter_size=25,
n_filters = 64,
depth = 8,
last_filter_size = 1,
block = 'bn_relu_conv',
out_nonlin = softmax)
| 37 | |
| 38 | # start-snippet-convolutions |
| 39 | def build_model(input_var, |
| 40 | n_classes = 6, |
| 41 | nb_in_channels = 2, |
| 42 | filter_size=25, |
| 43 | n_filters = 64, |
| 44 | depth = 8, |
| 45 | last_filter_size = 1, |
| 46 | block = 'bn_relu_conv', |
| 47 | out_nonlin = softmax): |
| 48 | ''' |
| 49 | Parameters: |
| 50 | ----------- |
| 51 | input_var : theano 3Dtensor shape(n_samples, n_in_channels, ray_length) |
| 52 | filter_size : odd int (to fit with same padding) |
| 53 | n_filters : int, number of filters for each convLayer |
| 54 | n_classes : int, number of classes to segment |
| 55 | depth : int, number of stacked convolution before concatenation |
| 56 | last_filter_size : int, last convolution filter size to obtain n_classes feature maps |
| 57 | out_nonlin : default=softmax, non linearity function |
| 58 | ''' |
| 59 | |
| 60 | |
| 61 | net = {} |
| 62 | |
| 63 | net['input'] = InputLayer((None, nb_in_channels, 200), input_var) |
| 64 | incoming_layer = 'input' |
| 65 | |
| 66 | #Convolution layers |
| 67 | for d in range(depth): |
| 68 | if block == 'bn_relu_conv': |
| 69 | incoming_layer = bn_relu_conv(net, incoming_layer, depth = d, |
| 70 | num_filters= n_filters, filter_size=filter_size) |
| 71 | # end-snippet-convolutions |
| 72 | elif block == 'conv_bn_relu': |
| 73 | incoming_layer = conv_bn_relu(net, incoming_layer, depth = d, |
| 74 | num_filters= n_filters, filter_size=filter_size) |
| 75 | # start-snippet-output |
| 76 | #Output layer |
| 77 | net['final_conv'] = ConvLayer(net[incoming_layer], |
| 78 | num_filters = n_classes, |
| 79 | filter_size = last_filter_size, |
| 80 | pad='same') |
| 81 | incoming_layer = 'final_conv' |
| 82 | |
| 83 | #DimshuffleLayer and ReshapeLayer to fit the softmax implementation |
| 84 | #(it needs a 1D or 2D tensor, not a 3D tensor) |
| 85 | net['final_dimshuffle'] = DimshuffleLayer(net[incoming_layer], (0,2,1)) |
| 86 | incoming_layer = 'final_dimshuffle' |
| 87 | |
| 88 | layerSize = lasagne.layers.get_output(net[incoming_layer]).shape |
| 89 | net['final_reshape'] = ReshapeLayer(net[incoming_layer], |
| 90 | (T.prod(layerSize[0:2]),layerSize[2])) |
| 91 | # (200*batch_size,n_classes)) |
| 92 | incoming_layer = 'final_reshape' |
| 93 | |
| 94 | |
| 95 | #This is the layer that computes the prediction |
| 96 | net['last_layer'] = NonlinearityLayer(net[incoming_layer], |
no test coverage detected