当前位置: 首页 > 知识库问答 >
问题:

Deeplearning4J-神经网络结构

公良玺
2023-03-14

在过去的几天里,我开始使用deeplearning4j库,我遇到了一个问题。

我的测试和输入数据由25个二进制值组成。训练集包含40行。网络有4个输出值。我的目标是训练网络有尽可能少的错误。

我的神经网络配置:

private static final int SEED = 123;
private static final int ITERATIONS = 1;
private static final int NUMBER_OF_INPUT_NODES = 25; 
private static final int NUMBER_OF_OUTPUT_NODES = 4; 
private static final int EPOCHS = 10;

public static MultiLayerNetwork getNeuralNetwork() {
    StatsStorage storage = configureUI();
    MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().seed(SEED).iterations(ITERATIONS).learningRate(1e-1)
            .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
            .weightInit(WeightInit.RELU).updater(Updater.ADADELTA).list()
            .layer(0, new DenseLayer.Builder().nIn(NUMBER_OF_INPUT_NODES).nOut(60)
                    .activation(Activation.RELU).build())
            .layer(1, new DenseLayer.Builder().nIn(60).nOut(50)
                    .activation(Activation.RELU).build())
            .layer(2, new DenseLayer.Builder().nIn(50).nOut(50)
                    .activation(Activation.RELU).build())
            .layer(3, new OutputLayer.Builder(LossFunctions.LossFunction.MCXENT).nIn(50).nOut(NUMBER_OF_OUTPUT_NODES)
                    .activation(Activation.SOFTMAX).build()).backprop(true).build();

    MultiLayerNetwork network = new MultiLayerNetwork(conf);
    network.init();
    network.setListeners(new StatsListener(storage), new ScoreIterationListener(1));
    DataSetIterator iterator = new ListDataSetIterator(createTrainingSet());
    for (int i = 0; i < EPOCHS; i++) {
        network.fit(iterator);
    }
    return network;
}

我会非常感激任何帮助。问候,

共有1个答案

西门良才
2023-03-14

方法1:

似乎这是SOFTMAX激活的预期行为。这来自PredictGenderTest示例:

INDArray predicted = model.output(features);
//System.out.println("output : " + predicted);
if (predicted.getDouble(0) > predicted.getDouble(1))
   gender.setText("Female");
else if (predicted.getDouble(0) < predicted.getDouble(1))
   gender.setText("Male");

如果您想评估模型,使用此模式可能更容易:

Evaluation eval = new Evaluation(numOutputs);
while(testIter.hasNext()){
   DataSet t = testIter.next();
   INDArray features = t.getFeatureMatrix();
   INDArray labels = t.getLabels();
   INDArray predicted = network.output(features, false);
   eval.eval(labels, predicted);
}
System.out.println(eval.stats());

不要使用model.output,而是使用predict:

ArrayList labels=(ArrayList )model.predict(verifyData);

 类似资料:
  • 我试图在DL4j中做一个简单的预测(稍后将用于具有n个特性的大型数据集),但无论我做什么,我的网络都不想学习,行为非常奇怪。当然,我学习了所有的教程,并执行了dl4j repo中显示的相同步骤,但不知何故,它对我不起作用。 对于虚拟特性,我使用以下数据: *双[val][x]特征;其中val=linspace(-10,10)...;和x=math.sqrt(math.abs(val))*val;

  • 神经网络 (Neural Network) 是机器学习的一个分支,全称人工神经网络(Artificial Neural Network,缩写 ANN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。 Perceptron (感知器) 一个典型的神经网络由输入层、一个或多个隐藏层以及输出层组成,其中箭头代表着数据流动的方向,而圆圈代表激活函数(最常用的激活函数为

  • 译者:bat67 最新版会在译者仓库首先同步。 可以使用torch.nn包来构建神经网络. 我们以及介绍了autograd,nn包依赖于autograd包来定义模型并对它们求导。一个nn.Module包含各个层和一个forward(input)方法,该方法返回output。 例如,下面这个神经网络可以对数字进行分类: 这是一个简单的前馈神经网络(feed-forward network)。它接受一

  • 我玩神经网络。我了解卷积层、完全连接层和许多其他东西是如何工作的。我还知道什么是梯度,以及如何训练这样的网络。 框架千层面包含一个称为InverseLayer的层。 InverseLayer类通过应用要反转的层相对于其输入的偏导数,对神经网络的单层执行反转操作。 我不知道这是什么意思,或者我应该在什么时候使用这个层。或者倒置偏导数背后的想法是什么? 非常感谢你

  • 我用newff在Matlab中创建了一个用于手写数字识别的神经网络。 我只是训练它只识别0 输入层有9个神经元,隐层有5个神经元,输出层有1个神经元,共有9个输入。 我的赔率是0.1 我在Matlab中进行了测试,网络运行良好。现在我想用c语言创建这个网络,我编写了代码并复制了所有的权重和偏差(总共146个权重)。但当我将相同的输入数据输入到网络时,输出值不正确。 你们谁能给我指点路吗? 这是我的

  • 首先我们来看看CNN的基本结构。一个常见的CNN例子如下图: 图中是一个图形识别的CNN模型。可以看出最左边的船的图像就是我们的输入层,计算机理解为输入若干个矩阵,这点和DNN基本相同。 接着是卷积层(Convolution Layer),这个是CNN特有的,我们后面专门来讲。卷积层的激活函数使用的是ReLU。我们在DNN中介绍过ReLU的激活函数,它其实很简单,就是$$ReLU(x) = max