graphBuilder.addInputs(inputLayerNameArray); InputType[] inputTypes = new InputType[inputTypeList.size()]; inputTypeList.toArray(inputTypes); graphBuilder.setInputTypes(inputTypes); graphBuilder.setOutputs(outputLayerNameArray); graphBuilder.addLayer(layer.getLayerName(), layer.getLayer(), inboundLayerNamesArray); if (this.outputLayerNames.contains(layer.getLayerName()) && !(layer.getLayer() instanceof IOutputLayer)) log.warn("Model cannot be trained: output layer " + layer.getLayerName() graphBuilder.addVertex(layer.getLayerName(), layer.getVertex(), inboundLayerNamesArray); if (this.outputLayerNames.contains(layer.getLayerName()) && !(layer.getVertex() instanceof IOutputLayer)) throw new UnsupportedKerasConfigurationException("Layer " + layer.getLayerName() + " could not be mapped to Layer, Vertex, or InputPreProcessor"); graphBuilder.addVertex(layer.getLayerName(), new PreprocessorVertex(preprocessor), inboundLayerNamesArray); graphBuilder.setInputPreProcessors(preprocessors); graphBuilder.backpropType(BackpropType.TruncatedBPTT).tBPTTForwardLength(truncatedBPTT) .tBPTTBackwardLength(truncatedBPTT); else graphBuilder.backpropType(BackpropType.Standard); return graphBuilder.build();
.addLayer("stem-cnn1", new ConvolutionLayer.Builder(new int[] {3, 3}, new int[] {2, 2}) .nIn(inputShape[0]).nOut(32) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(), input) .addLayer("stem-batch1", new BatchNormalization.Builder(false).decay(0.995).eps(0.001).nIn(32).nOut(32) .build(), "stem-cnn1") .addLayer("stem-cnn2", new ConvolutionLayer.Builder(new int[] {3, 3}).nIn(32).nOut(32) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(), "stem-batch1") .addLayer("stem-batch2", new BatchNormalization.Builder(false).decay(0.995).eps(0.001).nIn(32).nOut(32) .build(), "stem-cnn2") .addLayer("stem-cnn3", new ConvolutionLayer.Builder(new int[] {3, 3}) .convolutionMode(ConvolutionMode.Same).nIn(32).nOut(64) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(), "stem-batch2") .addLayer("stem-batch3", new BatchNormalization.Builder(false).decay(0.995).eps(0.001).nIn(64) .nOut(64).build(), "stem-cnn3") .addLayer("stem-pool4", new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX, new int[] {3, 3}, new int[] {2, 2}).build(), "stem-batch3") .addLayer("stem-cnn5",
graph.addInputs("input1") .addLayer("stem-cnn1", new ConvolutionLayer.Builder(new int[] {7, 7}, new int[] {2, 2}, new int[] {3, 3}).nIn(inputShape[0]).nOut(64) .build(), "input1") .addLayer("stem-batch1", new BatchNormalization.Builder(false).nIn(64).nOut(64).build(), "stem-cnn1") .addLayer("stem-activation1", new ActivationLayer.Builder().activation(Activation.RELU).build(), "stem-batch1") .addLayer("stem-pool1", new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX, new int[] {3, 3}, new int[] {2, 2}, new int[] {1, 1}).build(), "stem-activation1") .addLayer("stem-lrn1", new LocalResponseNormalization.Builder(1, 5, 1e-4, 0.75).build(), "stem-pool1") .addLayer("inception-2-cnn1", new ConvolutionLayer.Builder(new int[] {1, 1}).nIn(64).nOut(64) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(), "stem-lrn1") .addLayer("inception-2-batch1", new BatchNormalization.Builder(false).nIn(64).nOut(64).build(), "inception-2-cnn1") .addLayer("inception-2-activation1", new ActivationLayer.Builder().activation(Activation.RELU).build(), "inception-2-batch1") .addLayer("inception-2-cnn2",
.addLayer(nameLayer(blockName, "cnn1", i), new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(192).nOut(32) .build(), previousBlock) .addLayer(nameLayer(blockName, "batch1", i), new BatchNormalization.Builder(false).decay(0.995).eps(0.001).nIn(32) .nOut(32).build(), nameLayer(blockName, "cnn1", i)) .addLayer(nameLayer(blockName, "cnn2", i), new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(192).nOut(32) .build(), previousBlock) .addLayer(nameLayer(blockName, "batch2", i), new BatchNormalization.Builder(false).decay(0.995).eps(0.001).nIn(32) .nOut(32).build(), nameLayer(blockName, "cnn2", i)) .addLayer(nameLayer(blockName, "cnn3", i), new ConvolutionLayer.Builder(new int[] {3, 3}) .convolutionMode(ConvolutionMode.Same).nIn(32).nOut(32) .build(), nameLayer(blockName, "batch2", i)) .addLayer(nameLayer(blockName, "batch3", i), new BatchNormalization.Builder(false).decay(0.995).eps(0.001).nIn(32)
graph.addLayer(getModuleName(moduleLayerName) + "-cnn1-" + i, conv1x1(inputSize, reduceSize[i], 0.2), inputLayer); graph.addLayer(getModuleName(moduleLayerName) + "-batch1-" + i, batchNorm(reduceSize[i], reduceSize[i]), getModuleName(moduleLayerName) + "-cnn1-" + i); graph.addLayer(getModuleName(moduleLayerName) + "-transfer1-" + i, new ActivationLayer.Builder().activation(transferFunction).build(), getModuleName(moduleLayerName) + "-batch1-" + i); graph.addLayer(getModuleName(moduleLayerName) + "-reduce1-" + i, convNxN(reduceSize[i], outputSize[i], kernelSize[i], kernelStride[i], true), getModuleName(moduleLayerName) + "-transfer1-" + i); graph.addLayer(getModuleName(moduleLayerName) + "-batch2-" + i, batchNorm(outputSize[i], outputSize[i]), getModuleName(moduleLayerName) + "-reduce1-" + i); graph.addLayer(getModuleName(moduleLayerName) + "-transfer2-" + i, new ActivationLayer.Builder().activation(transferFunction).build(), getModuleName(moduleLayerName) + "-batch2-" + i); switch (poolingType) { case AVG: graph.addLayer(getModuleName(moduleLayerName) + "-pool1", avgPoolNxN(poolSize, poolStride), inputLayer); break; case MAX: graph.addLayer(getModuleName(moduleLayerName) + "-pool1", maxPoolNxN(poolSize, poolStride), inputLayer); break; if (pNorm <= 0) throw new IllegalArgumentException("p-norm must be greater than zero."); graph.addLayer(getModuleName(moduleLayerName) + "-pool1", pNormNxN(pNorm, poolSize, poolStride),
graph.addLayer(nameLayer(blockName, "activation1", 0), new ActivationLayer.Builder().activation(Activation.TANH).build(), input); .addLayer(nameLayer(blockName, "cnn1", i), new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(576).nOut(128) .build(), previousBlock) .addLayer(nameLayer(blockName, "batch1", i), new BatchNormalization.Builder(false).decay(0.995).eps(0.001).nIn(128) .nOut(128).build(), nameLayer(blockName, "cnn1", i)) .addLayer(nameLayer(blockName, "cnn2", i), new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(576).nOut(128) .build(), previousBlock) .addLayer(nameLayer(blockName, "batch2", i), new BatchNormalization.Builder(false).decay(0.995).eps(0.001).nIn(128) .nOut(128).build(), nameLayer(blockName, "cnn2", i)) .addLayer(nameLayer(blockName, "cnn3", i), new ConvolutionLayer.Builder(new int[] {1, 3}) .convolutionMode(ConvolutionMode.Same).nIn(128).nOut(128) .build(),
initBuilderIfReq(); ComputationGraphConfiguration newConfig = editedConfigBuilder.build(); if (this.workspaceMode != null) newConfig.setTrainingWorkspaceMode(workspaceMode);
.addLayer(nameLayer(blockName, "cnn1", i), new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(1344).nOut(192) .build(), previousBlock) .addLayer(nameLayer(blockName, "batch1", i), new BatchNormalization.Builder(false).decay(0.995).eps(0.001).nIn(192) .nOut(192).build(), nameLayer(blockName, "cnn1", i)) .addLayer(nameLayer(blockName, "cnn2", i), new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(1344).nOut(192) .build(), previousBlock) .addLayer(nameLayer(blockName, "batch2", i), new BatchNormalization.Builder(false).decay(0.995).eps(0.001).nIn(192) .nOut(192).build(), nameLayer(blockName, "cnn2", i)) .addLayer(nameLayer(blockName, "cnn3", i), new ConvolutionLayer.Builder(new int[] {1, 3}) .convolutionMode(ConvolutionMode.Same).nIn(192).nOut(192) .build(), nameLayer(blockName, "batch2", i)) .addLayer(nameLayer(blockName, "batch3", i), new BatchNormalization.Builder(false).decay(0.995).eps(0.001).nIn(192)
build.setInputTypes(InputType.recurrent(numLSTMInputs, numTimeSteps)); String lstmInputName = "input"; String lstmLayerName = "no layer"; build.addLayer(lstmLayerName, rnnBuilder .nIn(numLSTMInputConditional) .updater(Updater.ADAM) build.addLayer("genotype", new RnnOutputLayer.Builder( domainDescriptor.getOutputLoss("genotype")) .weightInit(WEIGHT_INIT) ComputationGraphConfiguration conf = build.setOutputs(outputNames).build();
.weightInit(WeightInit.XAVIER).graphBuilder().addInputs("input") .addLayer("dense1", new DenseLayer.Builder().nIn(numInputs).nOut(nOut0) .weightInit(WEIGHT_INIT) .activation("relu").learningRateDecayPolicy(learningRatePolicy) .build(), "input") .addLayer("dense2", new DenseLayer.Builder().nIn(nOut0).nOut(nOut1) .weightInit(WEIGHT_INIT) .activation("relu").learningRateDecayPolicy(learningRatePolicy) .build(), "dense1") .addLayer("dense3", new DenseLayer.Builder().nIn(nOut1).nOut(nOut2) .weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .activation("relu") .build(), "dense2") .addLayer("dense4", new DenseLayer.Builder().nIn(nOut2).nOut(nOut3) .weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .activation("relu") .build(), "dense3") .addLayer("dense5", new DenseLayer.Builder().nIn(nOut3).nOut(nOut4) .weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .activation("relu") .build(), "dense4") .addLayer("isMutated", new OutputLayer.Builder(domainDescriptor.getOutputLoss("isMutated")) .weightInit(WEIGHT_INIT) .activation("softmax").weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .nIn(nOut4).nOut(numOutputsIsMutated).build(), "dense5") .addLayer("somaticFrequency", new OutputLayer.Builder(domainDescriptor.getOutputLoss("somaticFrequency")) .weightInit(WEIGHT_INIT) .activation("identity").weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .nIn(nOut4).nOut(numOutputsSomaticFrequency).build(), "dense5")
.weightInit(WeightInit.XAVIER).graphBuilder().addInputs("input") .addLayer("dense1", new DenseLayer.Builder().nIn(numInputs).nOut(nOut0) .weightInit(WEIGHT_INIT) .activation("relu").learningRateDecayPolicy(learningRatePolicy) .build(), "input") .addLayer("dense2", new DenseLayer.Builder().nIn(nOut0).nOut(nOut1) .weightInit(WEIGHT_INIT) .activation("relu").learningRateDecayPolicy(learningRatePolicy) .build(), "dense1") .addLayer("dense3", new DenseLayer.Builder().nIn(nOut1).nOut(nOut2) .weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .activation("relu") .build(), "dense2") .addLayer("dense4", new DenseLayer.Builder().nIn(nOut2).nOut(nOut3) .weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .activation("relu") .build(), "dense3") .addLayer("dense5", new DenseLayer.Builder().nIn(nOut3).nOut(nOut4) .weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .activation("relu") .build(), "dense4") .addLayer("isMutated", new OutputLayer.Builder(domainDescriptor.getOutputLoss("isMutated")) .weightInit(WEIGHT_INIT) .activation("softmax").weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .nIn(nOut4).nOut(numOutputsIsMutated).build(), "dense5") .addLayer("isMutated", new OutputLayer.Builder(domainDescriptor.getOutputLoss("isMutated")) .weightInit(WEIGHT_INIT) .activation("softmax").weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .nIn(nOut4).nOut(numOutputsIsMutated).build(), "dense5")
.weightInit(WeightInit.XAVIER).graphBuilder().addInputs("input") .addLayer("dense1", new DenseLayer.Builder().nIn(numInputs).nOut(numHiddenNodes) .weightInit(WEIGHT_INIT) .activation("relu").learningRateDecayPolicy(learningRatePolicy) .build(), "input") .addLayer("dense2", new DenseLayer.Builder().nIn(numHiddenNodes).nOut((int) (numHiddenNodes * reduction)) .weightInit(WEIGHT_INIT) .activation("relu").learningRateDecayPolicy(learningRatePolicy) .build(), "dense1") .addLayer("dense3", new DenseLayer.Builder().nIn((int) (numHiddenNodes * reduction)).nOut((int) (numHiddenNodes * Math.pow(reduction, 2))) .weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .activation("relu") .build(), "dense2") .addLayer("dense4", new DenseLayer.Builder().nIn((int) (numHiddenNodes * Math.pow(reduction, 2))).nOut((int) (numHiddenNodes * Math.pow(reduction, 3))) .weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .activation("relu") .build(), "dense3") .addLayer("dense5", new DenseLayer.Builder().nIn((int) (numHiddenNodes * Math.pow(reduction, 3))).nOut((int) (numHiddenNodes * Math.pow(reduction, 4))) .weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .activation("relu") .build(), "dense4") .addLayer("isBaseMutated", new OutputLayer.Builder(domainDescriptor.getOutputLoss("isBaseMutated")) .weightInit(WEIGHT_INIT) .activation("softmax").weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .nIn((int) (numHiddenNodes * Math.pow(reduction, 4))).nOut(numOutputsIsMutated).build(), "dense5") .addLayer("somaticFrequency", new OutputLayer.Builder(domainDescriptor.getOutputLoss("somaticFrequency")) .weightInit(WEIGHT_INIT) .activation("identity").weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .nIn((int) (numHiddenNodes * Math.pow(reduction, 4))).nOut(numOutputsSomaticFrequency).build(), "dense5")
switch (outputType) { case SOFTMAX_GENOTYPE: build.addLayer("softmaxGenotype", new OutputLayer.Builder( domainDescriptor.getOutputLoss("softmaxGenotype")) .weightInit(WEIGHT_INIT) .activation("softmax").weightInit(WEIGHT_INIT).learningRateDecayPolicy(learningRatePolicy) .nIn(numIn) .nOut(domainDescriptor.getNumOutputs("softmaxGenotype")[0]).build(), lastDenseLayerName).addInputs(); break; case DISTINCT_ALLELES: build.addLayer("numDistinctAlleles", new OutputLayer.Builder(domainDescriptor.getOutputLoss("homozygous")) .weightInit(WEIGHT_INIT) .activation("softmax").weightInit(WEIGHT_INIT) break; case HOMOZYGOUS: build.addLayer("homozygous", new OutputLayer.Builder(domainDescriptor.getOutputLoss("homozygous")) .weightInit(WEIGHT_INIT) .activation("softmax").weightInit(WEIGHT_INIT).learningRateDecayPolicy(LEARNING_RATE_POLICY) break; case COMBINED: build.addLayer(combined, new OutputLayer.Builder(domainDescriptor.getOutputLoss(combined)) .weightInit(WEIGHT_INIT) .activation(combined).weightInit(WEIGHT_INIT).learningRateDecayPolicy(LEARNING_RATE_POLICY) build.addLayer(outputName, new OutputLayer.Builder(domainDescriptor.getOutputLoss(outputName)) .weightInit(WEIGHT_INIT) .activation("softmax").weightInit(WEIGHT_INIT).learningRateDecayPolicy(LEARNING_RATE_POLICY)
String lstmPreviousLayerName = i == 0 ? lstmInputName : "lstm" + lstmInputName + "_" + (i - 1); int numLSTMInputNodes = i == 0 ? numLSTMInputs : numLSTMIndelHiddenNodes; build.addLayer(lstmLayerName, new GravesLSTM.Builder() .nIn(numLSTMInputNodes) .nOut(numLSTMIndelHiddenNodes) .build(), lstmPreviousLayerName); build.addVertex("lstm" + lstmInputName + "LastTimeStepVertex", new LastTimeStepVertex(lstmInputName), lstmLayerName); build.addVertex("lstmFeedForwardMerge", new MergeVertex(), mergeInputs); int numInputsToDenseAfterMerge = numInputs + (lstmInputNames.length * numLSTMIndelHiddenNodes); assembler.assemble(numInputsToDenseAfterMerge, numHiddenNodes, numLSTMTrueGenotypeHiddenNodes, numLSTMDecoderInputs, numReductionLayers, reductionRate); ComputationGraphConfiguration conf = build .setOutputs(outputNames) .build();
layerImplF.setNOut(nOut); editedConfigBuilder.removeVertex(layerName, false); LayerVertex lv = (LayerVertex) origConfig.getVertices().get(layerName); String[] lvInputs = origConfig.getVertexInputs().get(layerName).toArray(new String[0]); editedConfigBuilder.addLayer(layerName, layerImpl, lv.getPreProcessor(), lvInputs); editedVertices.add(layerName); layerImplF.setNIn(nOut); editedConfigBuilder.removeVertex(fanoutVertexName, false); lv = (LayerVertex) origConfig.getVertices().get(fanoutVertexName); lvInputs = origConfig.getVertexInputs().get(fanoutVertexName).toArray(new String[0]); editedConfigBuilder.addLayer(fanoutVertexName, layerImpl, lv.getPreProcessor(), lvInputs); editedVertices.add(fanoutVertexName);
String previousLayerName = i == 0 ? lastDenseLayerName : "denseReduction_" + (i - 1); numReductionLayerOutputNodes = (int) (numReductionLayerInputNodes * reductionRate); build.addLayer(reductionLayerName, new DenseLayer.Builder() .weightInit(WEIGHT_INIT) .activation("relu") numReductionLayerInputNodes = numReductionLayerOutputNodes; build.addVertex("feedForwardLstmDuplicate", new DuplicateToTimeSeriesVertex("trueGenotypeInput"), reductionLayerName); String lstmLayerName = "no layer"; for (int i = 0; i < numLSTMLayers; i++) { ? new String[]{"trueGenotypeInput", "feedForwardLstmDuplicate"} : new String[]{"lstmTrueGenotype_" + (i - 1)}; build.addLayer(lstmLayerName, new GravesLSTM.Builder() .activation("softsign") .nIn(numLSTMInputNodes) .build(), layerInputs); build.addLayer("trueGenotype", new RnnOutputLayer.Builder(domainDescriptor.getOutputLoss("trueGenotype")) .weightInit(WEIGHT_INIT) .activation("softmax")
String lstmPreviousLayerName = i == 0 ? "indel" : "lstmindel_" + (i - 1); int numLSTMInputNodes = i == 0 ? numLSTMInputs : numLSTMIndelHiddenNodes; build.addLayer(lstmLayerName, new LSTM.Builder() .nIn(numLSTMInputNodes) .nOut(numLSTMIndelHiddenNodes) .build(), lstmPreviousLayerName); build.addVertex("lstmindelLastTimeStepVertex", new LastTimeStepVertex("indel"), lstmLayerName); String[] mergeInputs = new String[lstmInputNames.length + 1]; build.addVertex("lstmFeedForwardMerge", new MergeVertex(), mergeInputs); int numInputsToDenseAfterMerge = numInputs + (lstmInputNames.length * numLSTMIndelHiddenNodes); assembler.assemble(numInputsToDenseAfterMerge, numHiddenNodes, numLSTMTrueGenotypeHiddenNodes, numLSTMDecoderInputs, numReductionLayers, reductionRate); ComputationGraphConfiguration conf = build .setOutputs(outputNames) .build(); System.out.println(conf); return new ComputationGraph(conf);
throws InvalidNetworkArchitectureException, InvalidLayerConfigurationException { String currentInput = "input"; gb.addInputs(currentInput); validateCnnLayer(convLayer); convLayers.add(convLayer); gb.addLayer(convLayer.getLayerName(), convLayer.getBackend().clone(), currentInput); idx++; } else { gb.addVertex(mergeVertexName, new MergeVertex(), names); currentInput = mergeVertexName; gb.addLayer(lName, layers[idx].getBackend().clone(), currentInput); currentInput = lName; gb.setOutputs(currentInput);
if (outputType == GenotypeSixDenseLayersWithIndelLSTMAggregate.OutputType.HOMOZYGOUS || outputType == GenotypeSixDenseLayersWithIndelLSTMAggregate.OutputType.DISTINCT_ALLELES) { if (outputType == GenotypeSixDenseLayersWithIndelLSTMAggregate.OutputType.DISTINCT_ALLELES) { build.addLayer("numDistinctAlleles", new OutputLayer.Builder(domainDescriptor.getOutputLoss("homozygous")) .weightInit(WEIGHT_INIT) .activation("softmax").weightInit(WEIGHT_INIT) .build(), lastDenseLayerName); } else { build.addLayer("homozygous", new OutputLayer.Builder(domainDescriptor.getOutputLoss("homozygous")) .weightInit(WEIGHT_INIT) .activation("softmax").weightInit(WEIGHT_INIT).learningRateDecayPolicy(LEARNING_RATE_POLICY) build.addLayer(outputName, new OutputLayer.Builder(domainDescriptor.getOutputLoss(outputName)) .weightInit(WEIGHT_INIT) .activation("softmax").weightInit(WEIGHT_INIT).learningRateDecayPolicy(LEARNING_RATE_POLICY) build.addLayer(combined, new OutputLayer.Builder(domainDescriptor.getOutputLoss(combined)) .weightInit(WEIGHT_INIT) .activation(combined).weightInit(WEIGHT_INIT).learningRateDecayPolicy(LEARNING_RATE_POLICY)
graph.addInputs("input").setInputTypes(InputType.convolutional(inputShape[2], inputShape[1], inputShape[0])) .addLayer("stem-zero", new ZeroPaddingLayer.Builder(3, 3).build(), "input") .addLayer("stem-cnn1", new ConvolutionLayer.Builder(new int[] {7, 7}, new int[] {2, 2}).nOut(64) .build(), "stem-zero") .addLayer("stem-batch1", new BatchNormalization(), "stem-cnn1") .addLayer("stem-act1", new ActivationLayer.Builder().activation(Activation.RELU).build(), "stem-batch1") .addLayer("stem-maxpool1", new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX, new int[] {3, 3}, new int[] {2, 2}).build(), "stem-act1"); identityBlock(graph, new int[] {3, 3}, new int[] {512, 512, 2048}, "5", "c", "res5b_branch"); graph.addLayer("avgpool", new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX, new int[] {3, 3}).build(), "res5c_branch") .addLayer("output", new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD) .nOut(numClasses).activation(Activation.SOFTMAX).build(), "avgpool") .setOutputs("output").backprop(true).pretrain(false);