# How to convert CSV to the input of 1D convolutional layer

**URL:** https://community.konduit.ai/t/how-to-convert-csv-to-the-input-of-1d-convolutional-layer/292
**Category:** DL4J
**Created:** [March 19, 2020, 12:43pm UTC](https://community.konduit.ai/t/how-to-convert-csv-to-the-input-of-1d-convolutional-layer/292 "2020-03-19T12:43:11Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![amirshamaei](https://yyz1.discourse-cdn.com/flex035/user_avatar/community.konduit.ai/amirshamaei/32/100_2.png) [@amirshamaei](https://community.konduit.ai/u/amirshamaei)
#### Post date: [March 19, 2020, 12:43pm UTC](https://community.konduit.ai/t/how-to-convert-csv-to-the-input-of-1d-convolutional-layer/292/1 "2020-03-19T12:43:11Z")

</div>

My problem is “fitting a 1D signal”. the signals are stored in a CSV file with the size of 1000 \* 2069 (1:2048 → features, 2049:2069 → targets/labels).  
I loaded a CSV file using this piece of code:

> ```
> RecordReader recordReader = new CSVRecordReader(0,',');
> recordReader.initialize(new FileSplit(new File("D:\\deep fitting\\Labels.csv")));
> DataSetIterator iterator = new RecordReaderDataSetIterator.Builder(recordReader,1000)
> .regression(2048, 2068)
> .build();
> DataSet allData = iterator.next();
> 
> ```

However, the input of my network is 1D Conv layer:

> ```
> .layer(new Convolution1DLayer.Builder().kernelSize(5).convolutionMode(ConvolutionMode.Same)
> .nIn(1).nOut(16).build())
> 
> ```

when i run my code, i encountered this Error:

> `Invalid input: expect CNN activations with rank 4 (received input with shape [800, 2048])`

which is logical, so I convert the shape of features matrix.

> `train.setFeatures(train.getFeatures().reshape(800,2048,1,1));`

(I do not know it is okay or not) however this time i got this error:

> `Exception in thread "main" java.lang.IllegalStateException: Invalid input, does not match configuration: expected [minibatch, numChannels=1, inputHeight=1, inputWidth=2048] but got input array ofshape [800, 2048, 1, 1]`

---

<div class="post-metadata">

### Author: ![StoicProgrammer](https://yyz1.discourse-cdn.com/flex035/user_avatar/community.konduit.ai/stoicprogrammer/32/104_2.png) [@StoicProgrammer](https://community.konduit.ai/u/StoicProgrammer)
#### Post date: [March 19, 2020, 1:48pm UTC](https://community.konduit.ai/t/how-to-convert-csv-to-the-input-of-1d-convolutional-layer/292/2 "2020-03-19T13:48:49Z")

</div>

By reading the message:

> expected [minibatch, numChannels=1, inputHeight=1, inputWidth=2048] but got input array ofshape [800, 2048, 1, 1]

I think it is expecting shape `[800, 1, 1, 2048]` but got `[800, 2048, 1, 1]`.

Maybe you have to change your reshape from:

> train.setFeatures(train.getFeatures().reshape(800,2048,1,1));

To this:

> train.setFeatures(train.getFeatures().reshape(800,1,1,2048));

---

<div class="post-metadata">

### Author: ![treo](https://yyz1.discourse-cdn.com/flex035/user_avatar/community.konduit.ai/treo/32/47_2.png) [@treo](https://community.konduit.ai/u/treo)
#### Post date: [March 19, 2020, 2:07pm UTC](https://community.konduit.ai/t/how-to-convert-csv-to-the-input-of-1d-convolutional-layer/292/3 "2020-03-19T14:07:24Z")

</div>

Can you please share how exactly you’ve configured your network and the full stacktrace?

---

<div class="post-metadata">

### Author: ![amirshamaei](https://yyz1.discourse-cdn.com/flex035/user_avatar/community.konduit.ai/amirshamaei/32/100_2.png) [@amirshamaei](https://community.konduit.ai/u/amirshamaei)
#### Post date: [March 20, 2020, 5:13pm UTC](https://community.konduit.ai/t/how-to-convert-csv-to-the-input-of-1d-convolutional-layer/292/4 "2020-03-20T17:13:32Z")

</div>

Thanks @StoicProgrammer I did it; however, It did not work

---

<div class="post-metadata">

### Author: ![amirshamaei](https://yyz1.discourse-cdn.com/flex035/user_avatar/community.konduit.ai/amirshamaei/32/100_2.png) [@amirshamaei](https://community.konduit.ai/u/amirshamaei)
#### Post date: [March 20, 2020, 5:15pm UTC](https://community.konduit.ai/t/how-to-convert-csv-to-the-input-of-1d-convolutional-layer/292/5 "2020-03-20T17:15:52Z")

</div>

yes, sure. you can find my network

> ```java
> private static long seed = 123L;
> 
> public static void main(String[] args) throws IOException, InterruptedException {
> MultiLayerConfiguration configuration = new NeuralNetConfiguration.Builder()
> .seed(seed)
> .updater(new AdaDelta())
> .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
> .weightInit(WeightInit.XAVIER)
> .list()
> .layer(new Convolution1DLayer.Builder().kernelSize(5).convolutionMode(ConvolutionMode.Same)
> .nIn(1).nOut(16).build())
> .layer(new Subsampling1DLayer.Builder().kernelSize(2).stride(2).poolingType(SubsamplingLayer.PoolingType.MAX).build())
> .layer(new Convolution1DLayer.Builder().kernelSize(5).convolutionMode(ConvolutionMode.Same).activation(Activation.LEAKYRELU)
> .nOut(32).build())
> .layer(new Subsampling1DLayer.Builder().kernelSize(2).stride(2).build())
> .layer(new Convolution1DLayer.Builder().kernelSize(5).convolutionMode(ConvolutionMode.Same).activation(Activation.LEAKYRELU)
> .nOut(64).build())
> .layer(new Subsampling1DLayer.Builder().kernelSize(2).stride(2).build())
> .layer(new Convolution1DLayer.Builder().kernelSize(3).convolutionMode(ConvolutionMode.Same).activation(Activation.LEAKYRELU)
> .nOut(128).build())
> .layer(new Subsampling1DLayer.Builder().kernelSize(2).stride(2).build())
> .layer(new Convolution1DLayer.Builder().kernelSize(3).convolutionMode(ConvolutionMode.Same).activation(Activation.LEAKYRELU)
> .nOut(256).build())
> .layer(new Subsampling1DLayer.Builder().kernelSize(2).stride(2).build())
> .layer(new Convolution1DLayer.Builder().kernelSize(3).convolutionMode(ConvolutionMode.Same).activation(Activation.LEAKYRELU)
> .nOut(512).build())
> .layer(new Subsampling1DLayer.Builder().kernelSize(2).stride(2).build())
> .layer(new DropoutLayer(0.2))
> .layer(new DenseLayer.Builder().nOut(21).build())
> .layer(new OutputLayer.Builder(LossFunctions.LossFunction.MSE)
> .name("output")
> .nOut(21)
> .activation(Activation.IDENTITY).build())
> .setInputType(InputType.convolutional(1,2048,1))
> .build();
> 
> MultiLayerNetwork network = new MultiLayerNetwork(configuration);
> network.init();
> UIServer uiServer = UIServer.getInstance();
> StatsStorage statsStorage = new FileStatsStorage(new File(System.getProperty("java.io.tmpdir"), "ui-stats.dl4j"));
> uiServer.attach(statsStorage);
> 
> RecordReader recordReader = new CSVRecordReader(0,',');
> recordReader.initialize(new FileSplit(new File("D:\\deep fitting\\Labels.csv")));
> DataSetIterator iterator = new RecordReaderDataSetIterator.Builder(recordReader,1000)
> .regression(2048, 2068)
> .build();
> DataSet allData = iterator.next();
> allData.shuffle();
> SplitTestAndTrain testAndTrain = allData.splitTestAndTrain(0.8);
> DataSet train = testAndTrain.getTrain();
> 
> train.setFeatures(train.getFeatures().reshape(800,2048,1,1));
> 
> // train.setLabels(train.getLabels().reshape(800,1,21,1));
> DataSet test = testAndTrain.getTest();
> network.setListeners(new StatsListener( statsStorage), new ScoreIterationListener(1), new EvaluativeListener(iterator, 1, InvocationType.EPOCH_END));
> network.fit(train);
> 
> ```

and the stacktrace:

> ```auto
> Exception in thread "main" java.lang.IllegalArgumentException: Invalid input: expect CNN activations with rank 4 (received input with shape [800, 2048])
> at org.deeplearning4j.nn.conf.preprocessor.CnnToRnnPreProcessor.preProcess(CnnToRnnPreProcessor.java:74)
> at org.deeplearning4j.nn.multilayer.MultiLayerNetwork.ffToLayerActivationsInWs(MultiLayerNetwork.java:1122)
> at org.deeplearning4j.nn.multilayer.MultiLayerNetwork.computeGradientAndScore(MultiLayerNetwork.java:2750)
> at org.deeplearning4j.nn.multilayer.MultiLayerNetwork.computeGradientAndScore(MultiLayerNetwork.java:2708)
> at org.deeplearning4j.optimize.solvers.BaseOptimizer.gradientAndScore(BaseOptimizer.java:170)
> at org.deeplearning4j.optimize.solvers.StochasticGradientDescent.optimize(StochasticGradientDescent.java:63)
> at org.deeplearning4j.optimize.Solver.optimize(Solver.java:52)
> at org.deeplearning4j.nn.multilayer.MultiLayerNetwork.fitHelper(MultiLayerNetwork.java:2309)
> at org.deeplearning4j.nn.multilayer.MultiLayerNetwork.fit(MultiLayerNetwork.java:2267)
> at org.deeplearning4j.nn.multilayer.MultiLayerNetwork.fit(MultiLayerNetwork.java:2330)
> at org.deeplearning4j.examples.convolution.oneDConv.main(oneDConv.java:90)
> 
> ```

---

<div class="post-metadata">

### Author: ![treo](https://yyz1.discourse-cdn.com/flex035/user_avatar/community.konduit.ai/treo/32/47_2.png) [@treo](https://community.konduit.ai/u/treo)
#### Post date: [March 23, 2020, 8:00am UTC](https://community.konduit.ai/t/how-to-convert-csv-to-the-input-of-1d-convolutional-layer/292/6 "2020-03-23T08:00:15Z")

</div>

What you can do, is add an input preprocessor that will do the proper reshaping for you.

You do this by adding this line to your model configuration:

```auto
.inputPreProcessor(0, new FeedForwardToCnnPreProcessor(2048, 1))

```

This turns your input into a 2048 wide and 1 high matrix with a single channel.

You will also have to change your `.setInputType` line to the following:

```auto
        .setInputType(InputType.feedforward(2048))

```

That way, you don’t need to do any manual reshaping.

---

<div class="post-metadata">

### Author: ![amirshamaei](https://yyz1.discourse-cdn.com/flex035/user_avatar/community.konduit.ai/amirshamaei/32/100_2.png) [@amirshamaei](https://community.konduit.ai/u/amirshamaei)
#### Post date: [March 23, 2020, 2:49pm UTC](https://community.konduit.ai/t/how-to-convert-csv-to-the-input-of-1d-convolutional-layer/292/7 "2020-03-23T14:49:07Z")

</div>

Thank you very much @treo. It works. It should be mentioned that I changed the network layers from 1D to 2D; because after I changed setInputType to feedforward, I got an error in which stated Conv1D needs RNN input.

---

<div class="post-metadata">

### Author: ![sillyarms](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@sillyarms](https://community.konduit.ai/u/sillyarms)
#### Post date: [December 30, 2020, 10:33am UTC](https://community.konduit.ai/t/how-to-convert-csv-to-the-input-of-1d-convolutional-layer/292/8 "2020-12-30T10:33:52Z")

</div>

> [@amirshamaei](#):
>
> to

I am dealing with a similar issue, and can’t get it working. Is there any chance you could post your fixed code? There are not a lot of examples online how to get this to work.
