質問

あなたの経験から、人工ニューラル ネットワークのプロトタイプを実装する最も効果的なアプローチはどれですか?かなりの誇大宣伝です R (無料ですが、私は使用しませんでした) または Matlab (無料ではありません)、もう 1 つの可能な選択肢は、C++/Java/C# などの言語を使用することです。この質問は主に、いくつかのニューラル ネットワーク アーキテクチャまたは学習アルゴリズムをテストしようとした人々を対象としています。

上記の 3 つとは異なるプログラミング言語を使用することを選択した場合、その名前と、選択に関する説明を教えていただけますか (以下を除く)。これは私が知っている唯一の/最もよく使われている言語です)。

ありがとう。

役に立ちましたか?

解決

ニューラルネットワークは、プログラマがそんなに科学者が多く使用され、されていないため、

、科学者を対象とし、ニューラルネットワークのための良いライブラリを提供プログラミング言語を選択します。

Pythonのは、それが広く科学者によって使用されているので、合理的な選択です。あると開始するには、2つのディストリビューション

http://www.pythonxy.com/する

http://code.enthought.com/する

これらのPythonのディストリビューションには、アドオンの標準Pythonライブラリに含まれていないが、科学者が行うことを、プログラミングのタイプのために非常に有用である多くのモジュールが含まれています。 Pythonパッケージインデックスを検索すると、あなただけのニューラルネットワークについて学習している場合はOKかもしれ少数のニューラルネットワークのパッケージを思い付くます。

http://pypi.python.org/pypi?:action=検索&用語=ニューラル&=検索を提出する。

あなたはニューラルネットワークとの深刻な仕事をしている場合は、

ただし、高速ニューラルネットワークライブラリのようなものをお勧めします。あなたは、Pythonでプログラミングを行うようにグラフ化、視覚化、データ操作とのためのPythonモジュールを幅広く使用できるように、これは、Pythonバインディングが付属しています。しかし、あなたのニューラルネットワークは、FANNライブラリからoptmisedコンパイルされたコードを使用して実行されます。両方の長所ます。

つまり、実際のニューラルネットワークのコードを実行するために、あなたはC、Javaのではないが必要です。 Cライブラリには、Javaでそのうまく統合されませんので、Cライブラリとスムーズに統合されていた言語を選択してください。 Pythonはそれを行うと、あなたのアルゴリズムを説明するために必要なコードのはるかに少ないラインがあるのでまた、Javaよりもむしろ、より生産的です。一部の人々は、Javaを超える生産性が10倍の増加を発見した。

あなたはそれはあなたが使用する必要があります統計関数を持っている、または多分あなたはRコードを書くことができ利用できる人を持っているかもしれないので、Rを述べました。ここでも、R対のPythonを選択するといずれか、または決定ではありません。あなたは、両方を使用することができます。

RPYライブラリは、Pythonプログラムは、Rライブラリやコードにアクセスすることができます。あなたはPythonであなたのメインプログラムを書いて、あなたはCで書かれたFANNライブラリを利用するのと同じ方法でライブラリを提供するツールとしてRを扱うこのしまう使用します。

http://rpy.sourceforge.net/する

RプログラムはPythonで書かれたライブラリにアクセスできるように、両方の方法で動作しますRSPythonと呼ばれる別のモジュールがあります。あなたはあなたを助け、専門家Rプログラマを持っている場合、これは有用であろう。

http://www.omegahat.org/RSPython/する

そして、それがすべてではありません。あなたは、Javaプログラミングを簡素化するためのPythonを活用することができます。あなたはJavaのニューラルネットワークエンジンを持っている場合、あなたはまだJavaのVM上で動作し、あなたのコード内の任意のJavaライブラリやクラスを使用することができますJythonのバージョンを使用してPythonでプログラムのほとんどを書くことができます。彼らはJavaプログラムのためのバインディングを提供するので、あなたはまだだけでなく、高速FANNライブラリを使用することができます。

私はあなたの仕事のためのPythonをお勧めします主な理由は、それが利用可能な2つの科学指向のディストリビューションがある理由である科学者の非常に多くで使用されていることです。第二の理由は、Pythonを使い始めるための初心者プログラマのための非常に簡単で、ニューラルネットワークを探索中に、あなたはおそらく、単純なシミュレーションで開始し、結果のより多くのデータ操作と分析して、より複雑なものまで働くということです。 Pythonは、コードの独自のライブラリを構築することができ、そしてあなたは、ニューラルネットワークの問題にあなたの注意の多くを焦点を合わせることができるように専門家のPythonプログラマになります。あなたは、Javaのビット、およびC ++のビットとRビットの周りバウンスした場合は、ニューラルネットワークに少ない時間を過ごすことができるようになります。その戦略はsomeoのために良いかもしれませんプログラミングではなく、ニューラルネットワークといくつかの重要な結果を達成したい人のためのキャリアを望んでいるNEます。

あなたのニューラルネットワークの仕事は特殊なハードウェア、いわゆるニューロモーフィックチップ内に延びている場合でも、あなたはまだNIHから、この論文としてPythonを活用できることを示しています:

http://www.ncbi.nlm.nih.gov/pmc /記事/ PMC2701676 /

他のヒント

を使ってみました双方の高い抽象化レベルの言語(matlab,java)、下(C)の両方を使用toolboxes、図書館やコーディングした。全体の。関する情報は見つかりませんでし最適なツールです。ご注意ください:

  • 試作品かさないといけません:多くを実行する必要がありますのネットワーク上の大型の試料、または数倍以上のサブセットサンプルの場合の進化ニューラルネットワークも。だいネットワークを運営するには、少しでも性能が大きな助けと時間をスクリーンセーバー(C以上のmatlab);

  • 場合、その他ったりとくつろいでいただく必要が容易符号化するためにするものではなく、一切の多くのパッケージライブラリ(javaNN)

  • どのような神経ネットワークです。連続時間の経常な神経ネットワーク(CTRNN)?Backprop?よろしくお願いしま電車ですか。いかに確かった。は精度が重要であるということですか。(ありませて小さなデバイスなどのメモリ制限ロボット制御ボードのように、Arduinos?)

だ時間に余裕をもって、私の提案

  1. 学びの概念を高いレベルの言語、擬似コード、
  2. までの全ての雑で、特にを使用する場合は進化する神経ネットワークを選択し、言語が精通した
  3. そうした研究方法の最適化のための速度、メモリフットプリント等

武器agiは、dexで下がらないboxerぐ.

私はある程度の工具箱をネットワーキングのMatlabの神経を使用して、あなたはネットワーク、テスト入力データ対訓練のサイズの実験、およびそのポストを設定できるようにそのグラフィックインターフェースによるプロトタイピングツールとして、それを楽しんできました訓練は、すべてを内蔵したテスト結果によります。それだけで...始めるのはいいと自然に思えた。

私はまた、ジョーンする(ニューラルエンジン指向のJavaオブジェクト)で実験を行いました。 それは非常にうまくセットアップされ、そして時に、私はアマチュアのビットは、昔も今も何の問題のテストで、アップさまざまなネットワークを取得し、実行しているがありませんでした。 これは、Javaであるので、それはあなたが大規模で複雑なシステムを訓練している場合、あなたが望むかもしれないパフォーマンスを持っていないかもしれないが、そのAPIは非常に親しみました。

私はまた、C ++での洪水にして行われ、いくつかの仕事を見てきました。これは、問題の範囲を解決するために適切なネットワークで設定クラスの束を持っています。これは、チェックアウトする価値がある。

私はまた、高度のpythonをお勧めします。試作品のため、Pythonは素晴らしい選択肢です:中にプログラムする簡単かつ迅速で、そこに使用可能なライブラリの膨大な数があり、それが広く科学界で使用されます。

あなたのpythonを使用している場合は、

また、あなたはまた、アルゴリズムが含まれている優れた PyBrain のパッケージを利用することができますニューラルネットワークのためにあなたがすぐにプロトタイプの構築を支援する必要があり、強化学習、教師なし学習、および他の機械学習タスク、ます。

これは、あなたの現在の設定に依存します。私は大学時代に戻ってそれらに取り組むために使用する場合、私はC ++ + MPI +数値のレシピを使用する必要がありました。私は大きなベオウルフクラスタ上の共有をロードしなければならなかったので、これが行われました。

あなたの計算のニーズが大でない場合は、

は、何をするだろう。パッケージ化されたライブラリは、(R、パイソン(numpyの、scipyのダウンロード)、C / C ++(数値レシピ)など)、すべてのプラットフォームで利用可能です。あなたがそれらのいずれかに快適でプログラミングしている場合、それは大したことではないはずです。

私は今、何をプロトタイプに持っていた場合、私はおそらく(私はプロトタイピングのためのそれをはるかに簡単に見つけるという理由だけで)はPythonで行くと思います。

ScilabののMatlabのにオープンソースの代替物である。

あなたは ANNツールボックスを使用してニューラルネットワークを試すこと/>。

、理論と実験に焦点を当てています。あなたのサンプルの判別機能を選択しましたか?あなたのトレーニングとテスト・セットの状態は何ですか。各実験について、混同行列を研究。あなたは、サンプルが誤って分類されている理由のアイデアを持っていますか?それはあなたに論理的に見えるのか?そうでない場合は、あなたが使用していない備わっている役立つだろう?

の実装は、あなたが精通している言語を使用して、次に来ます。 JavaやC#などの管理言語は、がち少ないエラーである可能性が高い:少なくとも、あなたはので、ポインタやメモリ割り当てのバグの物事を台無しにする可能性が低いです。最適化は、(いつものようにいくつかのまともなプロファイリング後)最後になる。

「Encogは、高度なニューラルネットワークと機械学習の枠組みである。Encogは、これらのニューラルネットワークのためのデータを正規化して処理するために多種多様なネットワークだけでなく、サポートクラスを作成するクラスが含まれています。Encogは、マルチスレッド弾力性の伝播を使用して訓練する。Encogができますまた、更なる高速処理時間にGPUを利用しています。GUIベースのワークベンチは、モデルを支援し、ニューラルネットワークを訓練するために提供される。Encogは、2008年から活発に開発されてきた。」

Encogは、Java、C#.NETとSilverlightのために利用可能である。

http://www.heatonresearch.com/encogする

学校での私のnnは授業では、MATLABを使用して、私は私の論文のためのJavaを使用します。

私は、JavaまたはMATLABをお勧めします。 Matlabのそれはおそらく既にあなたが必要とするかもしれないものをたくさん持っているので。そして、Javaので、オープンソースプロジェクトに不足しているかもしれないものを実装するために迅速です。ニューラルネットワークを実装する以外にも、あなたがそれらを視覚化するためのいくつかの方法が必要になる場合がありますのでbesided。そして、そのために私は個人的には、JavaやMATLABは非常に簡単であると信じています。

私は洪水を好みます。それは、無料の包括的、およびC ++で書かれています。

MATLABでの実装は、洗練されかつ完全です。私はそれが異なる種類のネットワークを評価するのに十分であることがわかってきました。これは、外部インタフェースを使用しても非常にプログラム可能です。

アルゴリズムの実装は、オープンソースではないので、別のニューラルネットワークタイプの手符号化された実装が異なる産としては、MATLABの外部アプリケーションにコードの特定の部分を移動する必要がある場合、

しかし、それは時々、より困難です結果ます。

私はC ++を使用してNNの実装を書き始めたと私は初めに関わる数学について十分に知らなかったことを発見しました。何hapenningを終わったことは、私は計算モデルを微調整されたとして、コードをリファクタリングするためにあまりにもハードだったということでした。

それは間違いなく、ニューラルネットワークがどのように機能するかを学習へのより良い仲間だったとして

結局私はMATLABに与えました。私はいくつかのキーストロークを使用したアルゴリズムに大きな変更を加えると、あまりにも結果をグラフ化することができました。

私はすでに構築された行列計算フレームワークを使用していた場合は、

おそらく、私の経験では、より良いされていると思います。それはあなたが3Dは、ほとんどの言語のためにそこにいくつかの本当に最適化されたライブラリがなければならないんですか考えます。ヘックあなたにもそのためのDirect3DやOpenGLを利用するかもしれませんが、私はそこにニューラルネットワークのためのより適切なものがあると確信しています。

私は私はあなたが何をすべきかについて多くの情報を提供していないですね。しかし私は、あなたがやるべきでないものを伝えることができます - それは、マトリックス操作コードを自分で書くしようとしている。

あげたいかもしれません ウェカ 一見。データ視覚化などのための組み込みツールがいくつかあり、何年も前から存在しています (いくつかのスクリーンショット).

キーは右ではないので、多くのネットワーク自体がコードにactualisedする方法をトレーニングセットを取得しているニューラルネットワークでの作業中に私の見解で。私はあなたがネットワークを使用して解決しようとしている問題の種類に基づいて言語を選ぶだろう。自体はC ++ネットワークでは、C#の、PythonとJavaは、すべての実行可能である。

あなたは画像処理を必要とする問題に関連して、これを使用していますか?その場合、あなたはおそらく簡単にOpenCVのような画像処理ライブラリまでフック何かをしたいだろう。または関与いくつかのオーディオ処理があるのでしょうか?

あなたは簡単にトレーニングセットを視覚化する必要があるかもしれませんので、どのように簡単で、これは選択した言語であることでしょうか?あなたは、OpenGLやDirectXのライブラリを直接またはいくつかの種類のラッパーを使用してのいずれかで動作することができますか? DirectXのために選択肢はC ++とC#です。抽象度の高いレベルは、WPFの作業を使用して言うのでしょうか?

私はそれに慣れていますし、必要なビジュアライゼーションのための.NETと使用WPFの技術を扱う多数のデータを活用することができますので、

私はC#を使用しています。

あなたも贈りたいかもしれません ねん 試してみてください - それは無料です、 使いやすい そしてとても軽い。また すぐに使える比較では LIBSVM よりも優れたパフォーマンスを発揮します 多くの一般的な回帰データセットと分類データセットで。

通常、この種のアルゴリズムをいじっていたとき、オープンソースの Weka ツールキット これは、(人工ニューラル ネットワークだけでなく) さまざまな学習アルゴリズムのプロトタイプを作成し、発見するための優れた方法でした。最近では、さまざまな言語からのバインディングがあるように見えるため、コード レベルで Weka を操作したい場合は Java に縛られるべきではありません。

クールな、または非常に優れた分類ジョブを実行するものを見つけて理解した後、部分的には楽しみのため、部分的にはより大きなデータ セットを処理するために必要な速度向上を得るために、C または C++ でアルゴリズムを作成しました。

あなたのニューラルネットワークがシンプルである場合は、

を使用するC ++は、十分なそこに奇妙なフレームワークを使用しないでください。

たぶん、5年前、私は強化学習を使用して倉庫番ソルバーをしました。当時、私たちは、Javaで行くとイタリアの大学によって開発されたいくつかのエージェントフレームワークを使用することにしました。

ここではまず、悪いの決定は、このフレームワークを使用していました。これは、基本的には、フレームワークのコードをデバッグする時の負荷を無駄にするために私達を引き起こしここにあるバグを持っていました。

私たちはすべてが安定していたポイントに着いたら、

、ニューラルネットワークを訓練することは、単にデッドスローでした。私たちは、それは非常に強力なマシンで一晩実行したまま、まだそれは非常にいくつかのパズルを解きます。基本的にJavaオブジェクトの割り当てとガベージコレクションはかなりひどく、システム全体のパフォーマンスを損なうことされました。私たちは、オブジェクトのプールを作成する代わりに、それらのすべての時間を割り当てることにより、ビットアプリを微調整しますが、プログラムのパフォーマンスは、まだ直接ソケットを使用してC ++で実装された同様の割り当て以下の大きさの順でした。

この情報がお役に立てば幸い!

あなたは高速プロトタイピングしたい場合は、

さて、その後、PythonやMATLABは最高のようです。ニューラルネットワークのために使用可能なライブラリがたくさんあります。ライブラリのいくつかは、彼らはあなたに非常に高速な機能として内部(私は日付までの最速を推測する)CでコンパイルされているTheanoのようなスコープが、ライブラリを微調整の最小量を与えるように設計し、それはあなたの内部の全機能を提供しています微調整。 Theanoは、最初に使用することが一般的であるが、非常に強力です。あなたが深く、神経への神経から移動したい場合は、後でその後、大きな違いはありません。プロフェッショナルKagglersも、このライブラリを使用する傾向があります。このライブラリはまた、GPUをサポートしています。私が使用しているすべてのライブラリの私はtheanoが最も有用かつ強力であることが判明しました。カフェのような深い学習のためのアートフレームワークの他の状態のいくつかはtheano上で開発されています。

この情報がお役に立てば幸いです。

私は、JavaとC / C ++でのいくつかのニューラルネットワークのプロトタイプを実装しました。パフォーマンスの問題は、C / C ++で使用するときます。

私の実装の1つの基本的な多層パーセプトロンの(ベクトル化されません)分未満で(2入力、隠さ4と1つの出力ノードのセットアップで)百万ドルの訓練の繰り返しを行います。 Javaで私はほぼ同じ実装では、これを行うには時間の巨大なamoutをを取ります。 また、処理速度を向上させるためのベクトル化バージョンを作成するために固有のような線形代数ライブラリを使用することができます。

は、例えば、を有する画像処理(顔認識、OCR、等)のあらゆる種類のイメージを使用する想像し、28x28ピクセルイメージ。あなたは784の入力部と少なくとも同数の隠れユニットを持っているでしょう。これは訓練する時間の膨大な量になりますので、それは貴重な分、数時間または数日を保存するために有益です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top