Hur ska jag kunna använda JSON för att använda getters och setters osv?
Jag har länge gjort instruktionslistor igenom CSV filer och det är bara bökigt och svårt att få till det. Minsta lilla ändring, och allt måste göras om.
Men idag upptäckte jag JSON. Trodde det var ett programmeringsspråk först, men nu förstår jag att det handlar om att samla information i en enda fil. Snyggt och smidigt.
Jag använder Deeplearning4J och med detta så kan man generera JSON eller Yaml filer, men dom är enorma och riktigt grötiga. Jag skulle behöva en skräddarsydd lösning för att lagra denna kods konfigueringar i en JSON-fil som passar mig.
Problemet är att Deeplearning4J's JSON-generering skapar:
Standardvärden
Grötig JSON fil
Ändra denna manuellt så ligger man illa till. Det blir bara fel
Jag skulle vilja ha en lösning som kan köra denna kod nedan. Jag tänkte först om man skulle läsa en JSON fil som det vore en lång array och där efter så har jag brutalt många if-satser som väljer vilken getter och sätter jag ska använda mig av.
Men detta lät omodernt dåligt. Därför undrar jag hur jag skulle kunna göra igenom att sätta dessa värden på objecterna builder och listbuilder.
Builder är mer konstant och ändrar endast bara sina argument. Ibland kan det vara new Sgd(100) eller new AdaMax(34.3)
ListBuilder ändrar sig i längd beroende på hur många layers man vill ha.
Fråga:
Tror ni det skulle fungera att importera denna JSON fil nedan och sedan skapa arrayer av det hela, där man bara ändrar vissa element? Vi kan utgå från att denna JSON fil nedan är en mall på standardkonfiguering, där endast parametrar behöver ändras och lager behövs läggas till eller tas bort.
Hur skulle du ha gjort?
Exempel: Hur skulle ni sätta ett värde från en JSON fil till just denna rad builder.weightInit(WeightInit.XAVIER);?
Vilket är JSON kod för
"weightInitFn" : {
"@class" : "org.deeplearning4j.nn.weights.WeightInitXavier"
}
/*
* Create a global configuration
*/
builder = new NeuralNetConfiguration.Builder();
builder.seed(100);
builder.weightInit(WeightInit.XAVIER);
builder.updater(new Sgd(3.2));
/*
* Layer configuration
*/
listBuilder = new ListBuilder(builder);
listBuilder.layer(new DenseLayer.Builder()
.nIn(4)
.nOut(3)
.activation(Activation.TANH)
.build());
listBuilder.layer(new LSTM.Builder()
.nIn(3)
.nOut(3)
.activation(Activation.RELU)
.build());
listBuilder.layer(new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
.activation(Activation.SOFTMAX)
.nIn(3)
.nOut(3)
.build());
/*
* Build the configuration
*/
multiLayerConfiguration = listBuilder.build();
/*
* Create the model
*/
multiLayerNetwork = new MultiLayerNetwork(multiLayerConfiguration);
Denna kod ovan kan genereras till en JSON fil.
{
"backpropType" : "Standard",
"cacheMode" : "NONE",
"confs" : [ {
"cacheMode" : "NONE",
"dataType" : "FLOAT",
"epochCount" : 0,
"iterationCount" : 0,
"layer" : {
"@class" : "org.deeplearning4j.nn.conf.layers.DenseLayer",
"activationFn" : {
"@class" : "org.nd4j.linalg.activations.impl.ActivationTanH"
},
"biasInit" : 0.0,
"biasUpdater" : null,
"constraints" : null,
"gainInit" : 1.0,
"gradientNormalization" : "None",
"gradientNormalizationThreshold" : 1.0,
"hasBias" : true,
"hasLayerNorm" : false,
"idropout" : null,
"iupdater" : {
"@class" : "org.nd4j.linalg.learning.config.Sgd",
"learningRate" : 3.2
},
"layerName" : "layer0",
"nin" : 4,
"nout" : 3,
"regularization" : [ ],
"regularizationBias" : [ ],
"weightInitFn" : {
"@class" : "org.deeplearning4j.nn.weights.WeightInitXavier"
},
"weightNoise" : null
},
"maxNumLineSearchIterations" : 5,
"miniBatch" : true,
"minimize" : true,
"optimizationAlgo" : "STOCHASTIC_GRADIENT_DESCENT",
"seed" : 100,
"stepFunction" : null,
"variables" : [ "W", "b" ]
}, {
"cacheMode" : "NONE",
"dataType" : "FLOAT",
"epochCount" : 0,
"iterationCount" : 0,
"layer" : {
"@class" : "org.deeplearning4j.nn.conf.layers.LSTM",
"activationFn" : {
"@class" : "org.nd4j.linalg.activations.impl.ActivationReLU"
},
"biasInit" : 0.0,
"biasUpdater" : null,
"constraints" : null,
"forgetGateBiasInit" : 1.0,
"gainInit" : 1.0,
"gateActivationFn" : {
"@class" : "org.nd4j.linalg.activations.impl.ActivationSigmoid"
},
"gradientNormalization" : "None",
"gradientNormalizationThreshold" : 1.0,
"idropout" : null,
"iupdater" : {
"@class" : "org.nd4j.linalg.learning.config.Sgd",
"learningRate" : 3.2
},
"layerName" : "layer1",
"nin" : 3,
"nout" : 3,
"regularization" : [ ],
"regularizationBias" : [ ],
"weightInitFn" : {
"@class" : "org.deeplearning4j.nn.weights.WeightInitXavier"
},
"weightInitFnRecurrent" : null,
"weightNoise" : null
},
"maxNumLineSearchIterations" : 5,
"miniBatch" : true,
"minimize" : true,
"optimizationAlgo" : "STOCHASTIC_GRADIENT_DESCENT",
"seed" : 100,
"stepFunction" : null,
"variables" : [ "W", "RW", "b" ]
}, {
"cacheMode" : "NONE",
"dataType" : "FLOAT",
"epochCount" : 0,
"iterationCount" : 0,
"layer" : {
"@class" : "org.deeplearning4j.nn.conf.layers.OutputLayer",
"activationFn" : {
"@class" : "org.nd4j.linalg.activations.impl.ActivationSoftmax"
},
"biasInit" : 0.0,
"biasUpdater" : null,
"constraints" : null,
"gainInit" : 1.0,
"gradientNormalization" : "None",
"gradientNormalizationThreshold" : 1.0,
"hasBias" : true,
"idropout" : null,
"iupdater" : {
"@class" : "org.nd4j.linalg.learning.config.Sgd",
"learningRate" : 3.2
},
"layerName" : "layer2",
"lossFn" : {
"@class" : "org.nd4j.linalg.lossfunctions.impl.LossNegativeLogLikelihood",
"softmaxClipEps" : 1.0E-10
},
"nin" : 3,
"nout" : 3,
"regularization" : [ ],
"regularizationBias" : [ ],
"weightInitFn" : {
"@class" : "org.deeplearning4j.nn.weights.WeightInitXavier"
},
"weightNoise" : null
},
"maxNumLineSearchIterations" : 5,
"miniBatch" : true,
"minimize" : true,
"optimizationAlgo" : "STOCHASTIC_GRADIENT_DESCENT",
"seed" : 100,
"stepFunction" : null,
"variables" : [ "W", "b" ]
} ],
"dataType" : "FLOAT",
"epochCount" : 0,
"inferenceWorkspaceMode" : "ENABLED",
"inputPreProcessors" : {
"1" : {
"@class" : "org.deeplearning4j.nn.conf.preprocessor.FeedForwardToRnnPreProcessor"
},
"2" : {
"@class" : "org.deeplearning4j.nn.conf.preprocessor.RnnToFeedForwardPreProcessor"
}
},
"iterationCount" : 0,
"tbpttBackLength" : 20,
"tbpttFwdLength" : 20,
"trainingWorkspaceMode" : "ENABLED",
"validateOutputLayerConfig" : true
}