MultiLayerNetwork中fit方法,使用DataSet next = iter.next()获取一个批次的数据。本例中batchSize = 50,所以一次取到50组数据,其中包括输入特征和标签(理想值)。setInput(next.getFeatureMatrix())和setLabels(next.getLabels())语句分别设置输入特征和标签。调用solver.optimize()语句进行网络定型。在网络初始化阶段model.init()中调用MultiLayerNetwork的public void init(INDArray parameters, boolean cloneParametersArray)方法时,新建了一个Solver对象,并赋给了solver变量。
在Solver类中有一个方法public void initOptimizer(),是为Solver的核心变量optimizer赋值。这个方法很重要,要想正常使用Solver的对象,必须调用。如果将这个方法放到新建Solver的对象的方法中调用更好些。而不是交给应用自己调用。现在的情况是为了防止没有被调用过,反而到处调用。放到新建Solver的对象的方法中调用,每次新建都会自动调用,就不会有这个烦恼。
本例中optimizer的具体类型是StochasticGradientDescent(随机梯度下降),当执行optimizer.optimize()时,会进入到StochasticGradientDescent的optimize()方法中。此方法开始是一个循环。
代码读到这里可以发现有三处循环,分别对应数据处理时的三种粒度。StochasticGradientDescent的

最低0.47元/天 解锁文章
5977

被折叠的 条评论
为什么被折叠?



