Multiple inputs one output regression type NeuralNetwork

Hi, i want to make a neural network for prediction. My goal is to have 14 inputs as numbers and 1 output, also number. I wanted to make CSV file for that but i’m not quite sure how can i transform it so DL4J could use it. I was thinking of file like
// 1…14 are the inputs, 999…1001 are outputs. This is some mock data, just for the clarification of idea
1,2,3,4,5,6,7,8,9,10,11,12,13,14,999
1,2,3,4,5,6,7,8,9,10,11,12,13,14,1000
1,2,3,4,5,6,7,8,9,10,11,12,13,14,1001

Could anyone please help me with this? I tried to figure it out from examples on GitHub and docs, but unfortunately i failed

@Someone what kind of network are you trying to build? Sorry but we’d need to know a bit more. CSV data is pretty well covered and should only be a few lines of code. Are you trying to do classification or regression?
Also, are you trying to do time series or just plain 2 dimensional data?

Sorry, i’ll explain more. Plan is to make a regression type neural network. I was thinking of something like:

MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
                .seed(12345)
                .weightInit(WeightInit.XAVIER)
                .updater(new Nesterovs(0.01, 0.9))
                .list()
                .layer(new DenseLayer.Builder().nIn(14).nOut(14)
                    .activation(Activation.RELU)
                    .build())
                .layer(new DenseLayer.Builder().nIn(14).nOut(10)
                        .activation(Activation.RELU)
                        .build())
                .layer(new DenseLayer.Builder().nIn(10).nOut(10)
                    .activation(Activation.RELU)
                    .build())
                .layer(new DenseLayer.Builder().nIn(10).nOut(10)
                        .activation(Activation.RELU)
                        .build())
                .layer(new OutputLayer.Builder(LossFunctions.LossFunction.MSE)
                        .activation(Activation.IDENTITY)
                        .nIn(10).nOut(1).build())
                .build();

I’m not sure if the code it correct ( number of inputs and outputs are hardcoded cause i’m not finished with proper names of variables ) , here’s graphical structure

As for the question about “are you trying to do time series or just plain 2 dimensional data?” To be honest i’m not sure what is the answer, the idea of this network is to forecast the growth of wounds, the 14 inputs are number of wounds in each day, and the output is number of wounds on the next day. So it would be like, for example
// 120 to 570 are number of wounds from 1st to 14th calendar day of month, 600 are number of wounds on the 15th calendar day
120,170,210,240,320,350,380,400,440,500,520,540,560,570,600

@Someone thanks for elaborating. So there are 2 ways to frame this problem: a classifier that just says “will grow or not”.

What you’re attempting here is regression. I would recommend making sure you do the basics like normalizing both the input and the labels when dealing with regression.

When you want to get the “real” outputs then you can rescale the data appropriately.

Read up on evaluation:

For normalization:

import org.nd4j.linalg.dataset.api.preprocessor.NormalizerStandardize;
NormalizerStandardize normalizer = new NormalizerStandardize();
normalizer.fitLabel(true);
normalizer.fit(..) // pass in your dataset here
normalizer.transform(input); // normalize your data
normalizer.transformLabel(..); //normalize labels
normalizer.revertLabels(labels); //rescale network output  to their true value based on output

You don’t need to do this immediately but anything that scaled in some form of zero to 1 will have problems.