admin管理员组文章数量:1313184
I want to teach a NN some time series with 2 features using Deeplearning4j in Kotlin. I use one LSTM Layer, the time series is 5 long and I picked a batch size of 16, so the shape of the training data is [16, 5, 2]. For the output I pick [1, 5, 2] since I am only interested in one single value. This is the code for initialization:
@Test
fun testRandomLearning() {
// Create NN
val batchSize = 16
val sequenceLength = 5
val numFeatures = 2
val config = NeuralNetConfiguration.Builder()
.seed(seed.toLong())
.activation(Activation.RELU)
.weightInit(.deeplearning4j.nn.weights.WeightInit.VAR_SCALING_NORMAL_FAN_AVG)
.updater(.nd4j.linalg.learning.config.Adam(0.001))
.list()
.layer(0, LSTM.Builder()
.nIn(numFeatures)
.nOut(64)
.activation(Activation.TANH)
.build()
)
.layer(1, RnnOutputLayer.Builder()
.nIn(64)
.nOut(1)
.activation(Activation.IDENTITY)
.lossFunction(LossFunctions.LossFunction.MSE)
.build()
)
.build()
val model = MultiLayerNetwork(config).apply {
init()
setListeners(ScoreIterationListener(1000))
}
val numBatches = 10
// Create random training data
val dataList = (0 until numBatches).map {
val features: INDArray = Nd4j.rand(*longArrayOf(batchSize.toLong(), sequenceLength.toLong(), numFeatures.toLong()))
val labels: INDArray = Nd4j.rand(*longArrayOf(batchSize.toLong(), 1L))
.nd4jmon.primitives.Pair(features, labels)
}
val iterator: DataSetIterator = INDArrayDataSetIterator(dataList, batchSize)
model.fit(iterator) // 2 epochs
model.fit(iterator)
// Check model
val input = Nd4j.rand(*longArrayOf(1, sequenceLength.toLong(), numFeatures.toLong()))
val output = model.output(input) // << == here
println("$output")
}
However model.output(input) whose input matches that one of the training data except for batch size causes an exception that I don't understand:
.deeplearning4j.exception.DL4JInvalidInputException: Received input with size(1) = 5 (input array shape = [1, 5, 2]); input.size(1) must match layer nIn size (nIn = 2)
at .deeplearning4j.nn.layers.recurrent.LSTMHelpers.activateHelper(LSTMHelpers.java:171)
input.size(1)
is the sequence length, and according to this message it should match the value passed to nIn in layer, but nIn should be the number of features which is clearly 2. Do I have some deeper misunderstanding here?
Used versions:
implementation(".deeplearning4j:deeplearning4j-core:1.0.0-M2.1")
implementation(".nd4j:nd4j-native-platform:1.0.0-M2.1")
本文标签:
版权声明:本文标题:java - Error org.deeplearning4j.exception.DL4JInvalidInputException because nIn does not match sequence length - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741922244a2405073.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论