如何使用带有 DeepLearning4j 的二维数组的 LSTM

问题描述

我正在尝试学习如何将 LSTM 与 deeplearning4j 库结合使用。

我创建了一个虚拟场景,我想根据我收集的数据获得输出(3 个类)。

如果有人好奇,我会从这里 (http://www.osservatoriodioropa.it/meteoropa/NOAAMO.TXT) 获取数据:)

回到场景。 我创建了 2 个矩阵,一个带有特征,另一个带有我想输出的类,作为测试。

当我尝试使用分类器时

Exception in thread "main" java.lang.IllegalStateException: 3D input expected to RNN layer expected,got 2

我认为是因为 RnnOutputLayer 需要一个 3d 矩阵,但我无法理解如何填充它。如何将 2d 矩阵转换为将前一个事件与新事件相关联的 3d 矩阵?数据是一个时间序列,我也想根据前几天关联新一天的分类。 (我知道数据可能不适合这种情况,并且有更好的方法来做到这一点,但这只是为了学习如何使用 LSTM,而不是如何对这个特定数据集进行分类

这是目前的代码

public class Test {

    public static void main(String args[]) {
        int events = 5;
        int features = 6;
        int classes = 3;

        double[][] featureMatrix = new double[events][features];
        double[][] labelMatrix = new double[events][classes];

        for (int i = 0; i < events; i++) {
            for (int f = 0; f < features; f++) {
                featureMatrix[i][f] = getFeature(i,f);
            }
            for (int c = 0; c < classes; c++) {
                labelMatrix[i][c] = getResult(i,c);
            }
        }

        Indarray trainingIn = Nd4j.create(featureMatrix);
        Indarray trainingOut = Nd4j.create(labelMatrix);

        DataSet myData = new DataSet(trainingIn,trainingOut);
        MultiLayerNetwork multiLayerNetwork = createModel(features,classes);
        multiLayerNetwork.init();
        multiLayerNetwork.fit(myData);

    }

    private static double getFeature(int i,int f) {
        //dummy
        return 1.;
    }

    private static double getResult(int i,int c) {
        //dummy

        return 1.;
    }

    public static MultiLayerNetwork createModel(int inputNum,int outputNum) {
        MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
                .trainingWorkspaceMode(ENABLED).inferenceWorkspaceMode(ENABLED)
                .seed(123456)
                .optimizationAlgo(OptimizationAlgorithm.stochastic_GRADIENT_DESCENT)
                .updater(new RmsProp.Builder().learningRate(0.05).rmsDecay(0.002).build())
                .l2(0.0005)
                .weightinit(Weightinit.XAVIER)
                .activation(Activation.TANH)
                .list()

                .layer(new LSTM.Builder().name("1").nIn(inputNum).nOut(inputNum).build())
                .layer(new LSTM.Builder().name("2").nIn(inputNum).nOut(inputNum).build())

                .layer(new RnnOutputLayer.Builder().name("output").nIn(inputNum).nOut(outputNum)
                        .activation(Activation.IDENTITY).lossFunction(LossFunctions.LossFunction.MSE).build())
                .build();
        MultiLayerNetwork net = new MultiLayerNetwork(conf);
        net.init();
        return net;
    }

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)