def projection_skip(nfm, stride=1): mainpath = [Conv(**conv_params(3, nfm, stride=stride)), Conv(**conv_params(3, nfm, relu=False))] sidepath = [SkipNode() if stride == 1 else Conv(**conv_params(1, nfm, stride, relu=False))] module = [MergeSum([mainpath, sidepath]), Activation(Rectlin())] return module
def module_s1(nfm, first=False): ''' non-strided ''' sidepath = Conv( **conv_params(1, nfm * 4, 1, False, False)) if first else SkipNode() mainpath = [] if first else [BatchNorm(), Activation(Rectlin())] mainpath.append(Conv(**conv_params(1, nfm))) mainpath.append(Conv(**conv_params(3, nfm))) mainpath.append( Conv(**conv_params(1, nfm * 4, relu=False, batch_norm=False))) return MergeSum([sidepath, mainpath])
def module_s2(nfm): ''' strided ''' module = [BatchNorm(), Activation(Rectlin())] mainpath = [ Conv(**conv_params(1, nfm, stride=2)), Conv(**conv_params(3, nfm)), Conv(**conv_params(1, nfm * 4, relu=False, batch_norm=False)) ] sidepath = [ Conv(**conv_params(1, nfm * 4, stride=2, relu=False, batch_norm=False)) ] module.append(MergeSum([sidepath, mainpath])) return module
def module_factory(nfm, bottleneck=True, stride=1): nfm_out = nfm * 4 if bottleneck else nfm use_skip = True if stride == 1 else False stride = abs(stride) sidepath = [SkipNode() if use_skip else Conv( **conv_params(1, nfm_out, stride, False))] if bottleneck: mainpath = [Conv(**conv_params(1, nfm, stride)), Conv(**conv_params(3, nfm)), Conv(**conv_params(1, nfm_out, relu=False))] else: mainpath = [Conv(**conv_params(3, nfm, stride)), Conv(**conv_params(3, nfm, relu=False))] return [MergeSum([mainpath, sidepath]), Activation(Rectlin())]
# weight initialization init_norm = Gaussian(loc=0.0, scale=0.01) # initialize model path1 = Model(layers=[ Affine(nout=100, init=init_norm, activation=Rectlin()), Affine(nout=100, init=init_norm, activation=Rectlin()) ]) path2 = Model(layers=[ Affine(nout=100, init=init_norm, activation=Rectlin()), Affine(nout=100, init=init_norm, activation=Rectlin()) ]) layers = [ MergeSum([path1.layers, path2.layers]), Affine(nout=10, init=init_norm, activation=Logistic(shortcut=True)) ] model = Model(layers=layers) cost = GeneralizedCost(costfunc=CrossEntropyBinary()) # fit and validate optimizer = GradientDescentMomentum(learning_rate=0.1, momentum_coef=0.9) # configure callbacks callbacks = Callbacks(model, train_set, output_file=args.output_file, valid_set=valid_set, valid_freq=args.validation_freq,