在许多(或大多数)Deeplearning4j示例中,我看到,在构建配置方法时,调用似乎被添加到方法调用中。 。
例如:
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(rngSeed) //include a random seed for reproducibility
// use stochastic gradient descent as an optimization algorithm
.updater(new Nesterovs(0.006, 0.9))
.l2(1e-4)
.list()
.layer(0, new DenseLayer.Builder() //create the first, input layer with xavier initialization
.nIn(numRows * numColumns)
.nOut(1000)
.activation(Activation.RELU)
.weightInit(WeightInit.XAVIER)
.build())
.layer(1, new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD) //create hidden layer
.nIn(1000)
.nOut(outputNum)
.activation(Activation.SOFTMAX)
.weightInit(WeightInit.XAVIER)
.build())
.pretrain(false).backprop(true) //use backpropagation to adjust weights
.build();
偶尔我会看到在一个语句中创建conf变量的示例,然后在单独的语句中创建其他每个操作。 第一种方式是否有任何好处?当特定方法调用返回不同类型的对象时,它确实会混淆。此外,似乎第二种方法更适合与Jshell合作。
答案 0 :(得分:0)
这取决于你。对于一些人来说,构建器语法(它是java人,记住在评论之前) - 是冗长的并且包装它使它更容易。 如果您可以使用特定于用例的假设,那么方法更有意义。