[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ただいまコメントを受けつけておりません。
層の名称 | Deeplearning4j内のクラス | 内容 |
全結合層 (略:FC,RELU) |
DenseLayer | 前層のニューロンに対し全結合を行う。 |
出力層 (略:OUTPUT) |
OutputLayer | 全結合層と同様の構造を持つ。DeepLearing4jでニューラルネットワークを構成する場合、必ず含めないといけない層。 |
\begin{align} h_i & = f( \sum_{k=0}^n v_{ik}x_k - \theta ) \\ & = f( v_{i1}x_1 + v_{i2}x_2 + \cdots + v_{in}x_n - \theta ) \end{align} |
変数 | 内容 |
\(n\) | 入力値の個数。各層毎に異なる |
\(x_i\) | i番目の入力値(教師データ) |
\(v_{ij}\) | 各層内のi番目ニューロンで、入力jにかける加重パラメータ(結合荷重) |
\(h_i\) | 中間層のi番目ニューロンの出力値。(次の層の入力値にもなる) |
\(f(x)\) | 活性化関数(シグモイド関数が一般的に利用される) \begin{align} f(x) & = \frac{1}{1+e^{-x}} \end{align} |
\(\theta\) | 閾値 |
import org.deeplearning4j.nn.api.OptimizationAlgorithm; import org.deeplearning4j.nn.conf.MultiLayerConfiguration; import org.deeplearning4j.nn.conf.NeuralNetConfiguration; import org.deeplearning4j.nn.conf.Updater; import org.deeplearning4j.nn.conf.layers.DenseLayer; import org.deeplearning4j.nn.conf.layers.OutputLayer; import org.deeplearning4j.nn.multilayer.MultiLayerNetwork; import org.deeplearning4j.nn.weights.WeightInit; import org.deeplearning4j.optimize.listeners.ScoreIterationListener; import org.nd4j.linalg.api.ndarray.INDArray; import org.nd4j.linalg.dataset.DataSet; import org.nd4j.linalg.factory.Nd4j; import org.nd4j.linalg.lossfunctions.LossFunctions; /** * XOR計算を行う多層パーセプトロン * @author karura */ public class MultiPerceptron { // メイン関数 public static void main(String[] args) throws Exception { // 変数定義 int seed = 123; // 乱数シード int iterations = 2000; // 学習の試行回数 int inputNum = 2; // 入力数 int middleNum = 10; // 隠れ層のニューロン数 int outputNum = 1; // 出力数 INDArray tIn = Nd4j.create( new float[]{ 1 , 1 , // 入力1 1 , 0 , // 入力2 0 , 1 , // 入力3 0 , 0 }, // 入力4 new int[]{ 4 , 2 } ); // サイズ INDArray tOut = Nd4j.create( new float[]{ 0 , 1 , 1 , 0} , // 出力1~4 new int[]{ 4 , 1 } ); // サイズ DataSet train = new DataSet( tIn , tOut ); // 入出力を対応付けたデータセット System.out.println( train ); // ニューラルネットワークを定義 MultiLayerConfiguration.Builder builder = new NeuralNetConfiguration.Builder() .seed(seed) .iterations(iterations) .learningRate(0.01) .weightInit(WeightInit.SIZE) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) .updater( Updater.NONE ) .list() .layer(0, new DenseLayer.Builder() .nIn(inputNum) .nOut(middleNum) .activation("sigmoid").build()) .layer(1, new OutputLayer.Builder( LossFunctions.LossFunction.MSE ) .nIn(middleNum) .nOut(outputNum) .activation("sigmoid") .build()) .backprop(true).pretrain(false); // ニューラルネットワークを作成 MultiLayerConfiguration conf = builder.build(); MultiLayerNetwork perceptron = new MultiLayerNetwork(conf); perceptron.init(); // 確認用のリスナーを追加 perceptron.setListeners( new ScoreIterationListener(1) ); // 学習(fit) perceptron.fit( train ); // パーセプトロンの使用 for( int i=0 ; i<train.numExamples() ; i++ ) { // i個目のサンプルについて、 INDArray input = train.get(i).getFeatureMatrix(); INDArray answer = train.get(i).getLabels(); INDArray output = perceptron.output( input , false ); System.out.println( "result" + i ); System.out.println( " input : " + input ); System.out.println( " output : " + output ); System.out.println( " answer : " + answer ); System.out.flush(); } } }◇実行結果
20:43:12.444 [main] DEBUG org.nd4j.nativeblas.NativeOps - Number of threads used for linear algebra 32 20:43:12.476 [main] WARN org.nd4j.jita.conf.CudaEnvironment - Please note, CudaEnvironment is already initialized. Configuration changes won't have effect …中略… ===========INPUT=================== [[1.00, 1.00], [1.00, 0.00], [0.00, 1.00], [0.00, 0.00]] =================OUTPUT================== [0.00, 1.00, 1.00, 0.00] …中略… 20:43:41.441 [main] INFO o.d.o.l.ScoreIterationListener - Score at iteration 1999 is 0.0024183732457458973 result0 input : [1.00, 1.00] output : 0.09 answer : 0.00 result1 input : [1.00, 0.00] output : 0.93 answer : 1.00 result2 input : [0.00, 1.00] output : 0.92 answer : 1.00 result3 input : [0.00, 0.00] output : 0.04 answer : 0.00◇解説
(06/29) | Java DeepLearning4j 単語のベクトル化(Word2Vec) |
(06/11) | Java DeepLearning4j パラメータの設定 |
(06/11) | Java DeepLearngin4j ニューラルネットワークの基本 |
(06/10) | Java DeepLearning4j 多層パーセプトロンの構築 |
(06/09) | Java DeepLearning4j GPUによる高速化 |