まったく同じパラメータを持つdeeplearning4jとRは同じ、同等のMSEを実行する必要があると私は信じています。しかし、私はそれを達成する方法がわかりません。Deeplearning4jとRの結果が異なる
私は、46
個の変数と2
個の出力を含む次の形式のCSVファイルを持っています。完全に1,0000
サンプルがあります。すべてのデータが正規化され、モデルは回帰分析用です。
S1 | S2 | ... | S46 | X | Y
はRで、私はneuralnet
パッケージを使用すると、コードは次のようになります。非常に簡単です
rn <- colnames(traindata)
f <- as.formula(paste("X + Y ~", paste(rn[1:(length(rn)-2)], collapse="+")))
nn <- neuralnet(f,
rep=1,
data=traindata,
hidden=c(10),
linear.output=T,
threshold = 0.5)
。
私はアルゴリズムをJavaプロジェクトに統合したいので、モデルをトレーニングするためにdl4jを検討します。 trainsetはRコードのものとまったく同じです。テストセットはランダムに選択されます。 dl4jコードがある:
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(rngSeed) //include a random seed for reproducibility
// use stochastic gradient descent as an optimization algorithm
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
.iterations(100)
.learningRate(0.0001) //specify the learning rate
.updater(Updater.NESTEROVS).momentum(0.9) //specify the rate of change of the learning rate.
.regularization(true).l2(0.0001)
.list()
.layer(0, new DenseLayer.Builder() //create the first, input layer with xavier initialization
.nIn(46)
.nOut(10)
.activation(Activation.TANH)
.weightInit(WeightInit.XAVIER)
.build())
.layer(1, new OutputLayer.Builder(LossFunctions.LossFunction.MSE) //create hidden layer
.nIn(10)
.nOut(outputNum)
.activation(Activation.IDENTITY)
.build())
.pretrain(false).backprop(true) //use backpropagation to adjust weights
.build();
エポックの数は10であり、バッチサイズがテストセットを使用して128
とdl4jの性能でありますその後、私はそれが完全な可能性を発揮しないと思う。
dl4jのmornitorはdl4jなどupdater
、regulization
とweightInit
ではるかに多くのパラメータがあるよう
あります。だから私はいくつかのパラメータが適切に設定されていないと思います。ところで、なぜ午前のグラフには周期的な棘があるのですか?
いずれかを助けてもらえますか?