我正在学习DL4J,我想配置一个可以接受双精度值元组并生成二进制值元组的网络,其中多个值可以设置为 1,其他设置为 0。在语言中神经网络,我会说这是多类单热编码吗?
例子:
[3.5, 2.9, 15.0] -> [0, 0, 1, 0, 1]
[2.5, 12.5, 5.0] -> [1, 1, 0, 0, 1]
[5.9, 71.3, 0.7] -> [0, 1, 1, 0, 0]
等等
我试过这个:
MultiLayerConfiguration multiLayerConfiguration =
new NeuralNetConfiguration.Builder()
.seed(System.nanoTime())
.iterations(10000)
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
.learningRate(0.1)
.useDropConnect(false)
.biasInit(0)
.miniBatch(false)
.updater(Updater.NESTEROVS)
.list()
.layer(0, new DenseLayer.Builder()
.nIn(3)
.nOut(8)
.weightInit(WeightInit.XAVIER)
.activation(Activation.SIGMOID)
.build())
.layer(1, new OutputLayer.Builder()
.nIn(8)
.nOut(5)
.weightInit(WeightInit.XAVIER)
.activation(Activation.SOFTMAX)
.lossFunction(LossFunctions.LossFunction.RECONSTRUCTION_CROSSENTROPY)
.build())
.pretrain(false)
.backprop(true)
.build();
但我似乎在输出中得到了小数值,就好像网络试图平均分配激活一样。如何配置网络以使其给我多个 1 和 0 作为分类?
例如,如果输出是 3 维的,我想要这个:
[[0.00, 0.49, 0.51],
[0.50, 0.00, 0.50],
[0.50, 0.50, 0.00],
[0.33, 0.33, 0.34],
[0.00, 0.00, 1.00]]
真的是这样:
[[0.00, 1.00, 1.00],
[1.00, 0.00, 1.00],
[1.00, 1.00, 0.00],
[1.00, 1.00, 1.00],
[0.00, 0.00, 1.00]]