【发布时间】:2020-10-08 11:26:48
【问题描述】:
我正在尝试使用 LSTM 和 Dense 层构建 NN。
我的网是:
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(123)
.weightInit(WeightInit.XAVIER)
.updater(new Adam(0.1))
.list()
.layer(0, new LSTM.Builder().activation(Activation.TANH).nIn(numInputs).nOut(120).build())
.layer(1, new DenseLayer.Builder().activation(Activation.RELU).nIn(120).nOut(1000).build())
.layer(2, new DenseLayer.Builder().activation(Activation.RELU).nIn(1000).nOut(20).build())
.layer(new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD).activation(Activation.SOFTMAX).nIn(20).nOut(numOutputs).build())
.inputPreProcessor(1, new RnnToFeedForwardPreProcessor())
.build();
我是这样读取数据的:
SequenceRecordReader reader = new CSVSequenceRecordReader(0, ",");
reader.initialize(new NumberedFileInputSplit("TRAIN_%d.csv", 1, 17476));
DataSetIterator trainIter = new SequenceRecordReaderDataSetIterator(reader, miniBatchSize, 6, 7, false);
allData = trainIter.next();
//Load the test/evaluation data:
SequenceRecordReader testReader = new CSVSequenceRecordReader(0, ",");
testReader.initialize(new NumberedFileInputSplit("TEST_%d.csv", 1, 8498));
DataSetIterator testIter = new SequenceRecordReaderDataSetIterator(testReader, miniBatchSize, 6, 7, false);
allData = testIter.next();
因此,当它进入网络时,它的形状为 [batch, features, timestamp] = [32,7,60] 我可以用这样的特殊错误来定义它:
Received input with size(1) = 7 (input array shape = [32, 7, 60]); input.size(1) must match layer nIn size (nIn = 9)
所以它通常会上网。在第一个 LSTM 层之后,它必须重塑为 2-D 并接下来抛出 Dense 层。
但我有下一个问题:
标签和 preOutput 必须具有相同的形状:得到形状 [32, 6, 60] 与 [1920, 6]
在进入 Dense 层之前它没有重塑,我错过了 1 个特征(现在形状是 32, 6 , 60 而不是 32, 7, 60),那为什么???
【问题讨论】:
-
在您的第 0 层中,您有一个名为 numInputs 的变量。 numInputs 的值是多少?如果 numInputs = 9 那么你的 TRAIN_%d.csv 文件必须有 9 个特征
标签: java lstm recurrent-neural-network layer deeplearning4j