- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我开始使用 deeplearning4j,我正在尝试创建一个简单的神经网络。
我想逼近函数 sin(x)/x
。这在理论上应该可以通过单个隐藏层实现。
首先,我创建了一个模拟数据集 (x,y)
,然后我尝试使用具有 20 个隐藏节点和 sigmoid 激活函数的神经网络来逼近该函数。不幸的是,使用 NN y_est
估计的值甚至不接近实际值 y
。
我想知道错误在哪里。
这是我当前的代码:
package org.deeplearning4j.examples.myexamples
import org.deeplearning4j.nn.api.OptimizationAlgorithm
import org.deeplearning4j.nn.conf.{ MultiLayerConfiguration, NeuralNetConfiguration }
import org.deeplearning4j.nn.conf.layers.OutputLayer
import org.deeplearning4j.nn.conf.layers.DenseLayer
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork
import org.deeplearning4j.nn.weights.WeightInit
import org.deeplearning4j.optimize.listeners.ScoreIterationListener
import org.nd4j.linalg.api.ops.impl.transforms.Sin
import org.nd4j.linalg.dataset.DataSet
import org.nd4j.linalg.factory.Nd4j
import org.nd4j.linalg.lossfunctions.LossFunctions.LossFunction
import org.nd4j.linalg.api.ndarray.INDArray
import scalax.chart.api._
import breeze.linalg.linspace
/**
* Created by donbeo on 16/10/15.
*/
package object MyExample1 {
def main(args: Array[String]) = {
def plotXY(x:INDArray, y:INDArray):Unit = {
val dataPlot = for(i <- 0 to y.length()-1) yield (x.getFloat(i), y.getFloat(i))
val chart = XYLineChart(dataPlot)
chart.show()
}
val nSamples = 500
val xMin = -4
val xMax = 4
val x0 = linspace(xMin, xMax, nSamples)
val y0 = breeze.numerics.sin(x0) / x0
val x = Nd4j.create(x0.toArray).reshape(nSamples, 1)
val y = Nd4j.create(y0.toArray).reshape(nSamples, 1)
plotXY(x, y)
val numInputs = 1
val numOutputs = 1
val numHiddenNodes = 20
val seed = 123
val iterations = 100
val conf = new NeuralNetConfiguration.Builder()
.seed(seed)
.iterations(iterations)
.optimizationAlgo(OptimizationAlgorithm.LBFGS)
.list(2)
.layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(numHiddenNodes)
.activation("sigmoid")
.weightInit(WeightInit.XAVIER)
.build())
.layer(1, new OutputLayer.Builder(LossFunction.MSE)
.weightInit(WeightInit.XAVIER)
.activation("identity")
.nIn(numHiddenNodes).nOut(numOutputs).build())
.build()
val dataSet = new DataSet(x, y)
val network: MultiLayerNetwork = new MultiLayerNetwork(conf)
network.init()
network.setListeners(new ScoreIterationListener(1))
network.fit(dataSet)
val y_est = network.output(x)
plotXY(x, y_est)
}
}
最佳答案
这是一个基本配置。我只玩了几分钟,但这应该能让你有个好的开始。
package org.deeplearning4j.examples.deepbelief;
import org.deeplearning4j.nn.api.OptimizationAlgorithm;
import org.deeplearning4j.nn.conf.MultiLayerConfiguration;
import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
import org.deeplearning4j.nn.conf.Updater;
import org.deeplearning4j.nn.conf.layers.DenseLayer;
import org.deeplearning4j.nn.conf.layers.OutputLayer;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.deeplearning4j.nn.weights.WeightInit;
import org.deeplearning4j.optimize.listeners.ScoreIterationListener;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.api.ops.impl.transforms.Sin;
import org.nd4j.linalg.dataset.DataSet;
import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.lossfunctions.LossFunctions;
/**
* Created by agibsonccc on 10/17/15.
*/
public class RandomValues {
public static void main(String[] args) {
Nd4j.ENFORCE_NUMERICAL_STABILITY = true;
int numInputs = 1;
int numOutputs = 1;
int numHiddenNodes = 20;
int nSamples = 500;
INDArray x0 = Nd4j.linspace(-10, 10, 500).reshape(nSamples,1);
INDArray y0 = Nd4j.getExecutioner().execAndReturn(new Sin(x0, x0.dup())).div(x0);
System.out.println(y0);
int seed = 123;
int iterations = 100;
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(seed).constrainGradientToUnitNorm(true).learningRate(1e-1)
.iterations(iterations).constrainGradientToUnitNorm(true).l1(1e-1)
.l2(1e-3).regularization(true).miniBatch(false)
.optimizationAlgo(OptimizationAlgorithm.LINE_GRADIENT_DESCENT)
.list(2)
.layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(numHiddenNodes)
.activation("relu")
.weightInit(WeightInit.XAVIER)
.build())
.layer(1, new OutputLayer.Builder(LossFunctions.LossFunction.RMSE_XENT)
.weightInit(WeightInit.XAVIER).updater(Updater.SGD)
.activation("identity").weightInit(WeightInit.XAVIER)
.nIn(numHiddenNodes).nOut(numOutputs).build()).backprop(true)
.build();
MultiLayerNetwork network = new MultiLayerNetwork(conf);
network.init();
network.setListeners(new ScoreIterationListener(1));
network.fit(new DataSet(x0, y0));
System.out.println(network.output(x0));
}
}
关于java - 使用 deeplearning4j 训练简单的神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33189315/
我正在尝试使用 tensorflow 进行语音识别。 我有输入作为波形和单词作为输出。 波形看起来像这样 [0,0,0,-2,3,-4,-1,7,0,0,0...0,0,0,20,-11,4,0,0,
我正在使用 h2o 包试验深度学习二元分类器。当我构建模型然后在一些新的(保留的)数据集上使用 h2o.predict 时,我注意到对于某些行,Predict 输出与值不匹配概率最高。 这是一个可重现
在 https://deeplearnjs.org/index.html#demos ,它表示 API 将作为“dl”提供,这是该网站的打印屏幕: 但是当我尝试放置 var math = new d
所以现在我正在痛苦地探索使用 Deep Learning 4j 特别是 RL4j 和强化学习的深度学习。我在教我的电脑如何玩贪吃蛇方面相对不成功,但我坚持了下来。 无论如何,我遇到了一个无法解决的问题
我正在完成深度学习特化的第一门类(class),其中第一项编程任务是从头开始构建逻辑回归模型。由于这是我第一次从头开始构建模型,而且我花了一些时间来消化高等数学,所以我有很多错误。其中,我发现了一个我
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我是一名优秀的程序员,十分优秀!