最近、新しいDeepJava (DJ) 0.01ディープラーニングフレームワークの最初のバージョンをリリースしました。
フレームワークの主な目標は、少なくとも現時点では、純粋に教育的です。 私たちは次のステップごとのフレームワークを構築しています:
最初のリリースとともに、ディープラーニングに関するオープンブックの最初の章もリリースしました。 この本は、以前はニューラルネットワークを扱ったことのないJavaエンジニア向けに書かれています。 同時に、学習プロセスは、独自のフレームワークをゼロから作成することを中心に構築されます。
トレーニングフレームワークを作成する際、本当に必要な場合にのみ新しい概念とエンティティを導入します。 たとえば、最初のリリースでは、ネットワークの表示は、ほとんどのエンジニアが直感的に行う方法で、テンソルのセットではなくグラフの形で行われます。 これにより、より柔軟なネットワークを作成できます。 MNIstモデルをトレーニングするコードが既にあるので、このネットワーク表現がどれほどゆっくりと機能するかを見ることができます。 さて、この問題に遭遇したので、以降の章では、この問題を正確に解決するために必要なボリューム内の線形代数の基本を読者に紹介します。 等 フレームワークを見るまで問題が発生するため、必要に応じてエンティティを導入する予定です。
いくつかの小さなパン:
- READMEはすでにロシア語に翻訳されています
- 最初の章のドラフトはまだ翻訳されていませんが、翻訳されます
PS
「 30分でニューラルネットワーク 」というビデオを見た人は、DJのビデオからネットワークを再作成する小さなコード例を次に示します。
var context = new Context( /* learningRate */ 0.2, /* debug mode */ false); var inputFriend = new InputNeuron("friend"); var inputVodka = new InputNeuron("vodka"); var inputSunny = new InputNeuron("sunny"); var outputNeuron = new ConnectedNeuron.Builder() .bias(0.1) .activationFunction(new Sigmoid()) .context(context) .build(); inputFriend.connect(outputNeuron, wFriend); inputVodka.connect(outputNeuron, wVodka); inputSunny.connect(outputNeuron, wSunny); // : inputFriend.forwardSignalReceived(null, 1.); inputVodka.forwardSignalReceived(null, 1.); inputSunny.forwardSignalReceived(null, 1.); // : double result = outputNeuron.getForwardResult(); double expectedResult = 1.; double errorDy = 2. * (expectedResult - result); // : outputNeuron.backwardSignalReceived(errorDy);