@Override
public ComputationGraph init() {
int embeddingSize = 128;
ComputationGraphConfiguration.GraphBuilder graph = graphBuilder("input1");
graph.addInputs("input1").setInputTypes(InputType.convolutional(inputShape[2], inputShape[1], inputShape[0]))
.addLayer("bottleneck", new DenseLayer.Builder().nIn(5376).nOut(embeddingSize).build(),
"avgpool")
.addVertex("embeddings", new L2NormalizeVertex(new int[] {1}, 1e-10), "bottleneck")
.addLayer("outputLayer",
new CenterLossOutputLayer.Builder()
.lossFunction(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
.activation(Activation.SOFTMAX).alpha(0.9).lambda(1e-4)
.nIn(embeddingSize).nOut(numClasses).build(),
"embeddings")
.setOutputs("outputLayer").backprop(true).pretrain(false);
ComputationGraphConfiguration conf = graph.build();
ComputationGraph model = new ComputationGraph(conf);
model.init();
return model;
}