23

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

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

ありがとう。

4

18 に答える 18

27

ニューラルネットワークは科学者によって多く使用され、プログラマーによってはあまり使用されないため、科学者を対象とし、ニューラルネットワークに優れたライブラリを提供するプログラミング言語を選択してください。

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

http://www.pythonxy.com/

http://code.enthought.com/

これらのPythonディストリビューションには、標準のPythonライブラリにはないが、科学者が行うプログラミングの種類に非常に役立つ多くのアドオンモジュールが含まれています。Pythonパッケージインデックスを検索すると、ニューラルネットワークについて学習しているだけの場合は問題ない可能性のあるいくつかのニューラルネットワークパッケージが見つかります。

http://pypi.python.org/pypi?:action=search&term=neural&submit=search

ただし、ニューラルネットワークで本格的な作業をしている場合は、高速ニューラルネットワークライブラリのようなものが必要になります。これにはPythonバインディングが付属しているため、Pythonでプログラミングを行ったり、グラフ化、視覚化、データ操作などにさまざまなPythonモジュールを使用したりできます。ただし、ニューラルネットワークは、FANNライブラリから最適化されたコンパイル済みコードを使用して実行されます。両方の長所。

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

Rについて言及したのは、おそらくそれが使用する必要のある統計関数を持っているためか、Rコードを記述できる人がいるためです。繰り返しになりますが、PythonとRのどちらを選択するかは、どちらか一方の決定ではありません。両方を使用できます。

RPYライブラリを使用すると、PythonプログラムがRライブラリとコードにアクセスできます。これを使用すると、Cで記述されたFANNライブラリを使用するのと同じように、Pythonでメインプログラムを記述し、Rをライブラリを提供するツールとして扱います。

https://rpy2.github.io/

RプログラムがPythonで記述されたライブラリにアクセスできるように、両方の方法で機能するRSPythonと呼ばれる別のモジュールがあります。これは、専門家のRプログラマーがあなたを助けてくれる場合に役立ちます。

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

そして、それだけではありません。Pythonを活用して、Javaプログラミングを簡素化できます。Javaニューラルネットワークエンジンを使用している場合でも、Java VMで実行され、コードで任意のJavaライブラリとクラスを使用できるJythonバージョンを使用して、ほとんどのプログラムをPythonで記述できます。また、高速のFANNライブラリは、Javaプログラムのバインディングを提供するため、引き続き使用できます。

私があなたの仕事にPythonをお勧めする主な理由は、Pythonが非常に多くの科学者によって使用されているためです。そのため、2つの科学指向のディストリビューションが利用可能です。2つ目の理由は、Pythonは初心者プログラマーにとって非常に簡単に始められることです。ニューラルネットワークの探索では、おそらくより単純なシミュレーションから始めて、より多くのデータ操作と結果の分析を伴うより複雑なシミュレーションに取り組むでしょう。Pythonを使用すると、独自のコードライブラリを構築し、Pythonのエキスパートになることができるため、ニューラルネットワークの問題により多くの注意を向けることができます。少しのJava、少しのC ++、少しのRでバウンスすると、ニューラルネットワークに費やす時間を減らすことができます。その戦略は、プログラミングのキャリアを望んでいる人にとっては良いかもしれません。

ニューラルネットワークの作業が特殊なハードウェア、いわゆるニューロモルフィックチップにまで及ぶ場合でも、NIHのこの論文が示すように、Pythonを活用できます。

http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2701676/

于 2009-12-09T22:28:07.230 に答える
9

抽象度の高い言語 (matlab、java) と低い言語 (C) の両方を使用してみました。ツールボックスとライブラリを使用することと、それらを自分でコーディングすることの両方。全体的な反応は?どちらも完璧なツールではありません。次の点に注意してください。

  • プロトタイプでは不十分な場合があります。適切な結果を得るには、多くの場合、大規模なサンプルに対してネットワークを実行するか、サンプルのサブセットに対して数回実行する必要があります (進化するニューラル ネットワークの場合)。ネットワークを 100 万回実行する必要がある場合、わずかなパフォーマンスの向上でも大きな助けになり、時間を節約できます (つまり、matlab よりも C)。

  • 一方、コーディングを簡単にする必要がある場合は、事前にパッケージ化された多くのライブラリ (javaNN など) のいずれかを使用することをお勧めします。

  • どのようなニューラル ネットワークを使用していますか? 連続時間反復ニューラル ネットワーク (CTRNN)? バックプロップ?それらをどのように訓練しますか?それらの結果をどのように検証しますか? 精度は重要ですか?(つまり、Arduinos のようなメモリ制限のあるロボット制御ボードなどの小さなデバイスでそれらを実行していますか?)

時間に余裕があればオススメです

  1. 高水準言語を使用して概念を学習するか、最初に擬似コードを学習します。
  2. すべての複雑さに慣れたら、特に進化するニューラル ネットワークを使用している場合は、既に慣れ親しんでいる言語を選択してください。
  3. 次に、速度、メモリ フットプリントなどを最適化する方法の調査を開始することをお勧めします。

お役に立てれば。

于 2009-12-09T09:08:25.490 に答える
8

私は Matlab のニューラル ネットワーク ツール ボックスをある程度使用しており、ネットワークをセットアップし、トレーニングとテスト入力データのサイズを実験し、トレーニング後のすべてのテストを行うことができるグラフィック インターフェイスにより、プロトタイピング ツールとして楽しんでいます。使い始めるのは素晴らしく自然に思えました...

Joone (Java Object Oriented Neural Engine)も試しました。それは非常にうまくセットアップされており、当時私は少しアマチュアでしたが、さまざまなネットワークをセットアップして実行するのに問題はありませんでした. これは Java であるため、大規模で複雑なシステムをトレーニングする場合に必要なパフォーマンスが得られない可能性がありますが、その API は非常に親しみやすいものでした。

また、C++でFloodを使用して行われた作業もいくつか見てきました。さまざまな問題を解決するのに適したネットワークで設定された一連のクラスがあります。チェックアウトする価値があります。

于 2009-12-06T13:48:20.270 に答える
6

私もパイソンを強くお勧めします。プロトタイプの場合は、Python が最適です。プログラミングが簡単で高速であり、膨大な数のライブラリが利用可能であり、科学コミュニティで広く使用されています。

また、Python を使用している場合は、ニューラル ネットワーク、強化学習、教師なし学習、およびその他の機械学習タスクのアルゴリズムを含む優れたPyBrainパッケージを利用することもできます。これは、プロトタイプを迅速に構築するのに役立ちます。

于 2009-12-11T23:06:35.253 に答える
5

これは、現在の設定によって異なります。大学時代にそれらに取り組んでいたときは、C++ + MPI + 数値レシピを使用する必要がありました。これは、大きな beowulf クラスターで共有をロードする必要があったためです。

計算のニーズが大きくない場合は、何でも構いません。事前にパッケージ化されたライブラリは、すべてのプラットフォーム (R、Python(numPy、scipy)、C/C++(数値レシピ) など) で利用できます。それらのいずれかでプログラミングに慣れている場合は、大したことではありません。

今何かのプロトタイプを作成する必要がある場合は、おそらく Python を使用します (プロトタイプ作成がはるかに簡単だからです)。

于 2009-12-10T21:10:20.793 に答える
3

Scilabは、Matlab に代わるオープン ソースです。

ANN Toolbox for Scilabを使用して、ニューラル ネットワークを試すことができます。

理論と実験に焦点を当てます。サンプルの判別機能を選択しましたか? トレーニング セットとテスト セットの状態はどうですか。各実験について、混同行列を調べます。サンプルが誤分類される理由がわかりましたか? それはあなたにとって論理的に思えますか?そうでない場合、使用しない機能はどれですか?

次は実装です。使い慣れた言語を使用してください。Java や C# などのマネージ言語は、エラーが発生しにくい可能性があります。少なくとも、ポインターやメモリ割り当てのバグが原因で問題が発生する可能性は低くなります。最適化は最後に行います (いつものように適切なプロファイリングを行った後)。

于 2009-12-10T09:48:07.180 に答える
3

「Encog は、高度なニューラル ネットワークおよび機械学習フレームワークです。Encog には、さまざまなネットワークを作成するためのクラスと、これらのニューラル ネットワークのデータを正規化および処理するためのサポート クラスが含まれています。Encog は、マルチスレッドの回復力のある伝播を使用してトレーニングします。Encog は、使用することもできます。 GPU を使用して処理時間をさらに高速化します。GUI ベースのワークベンチも提供されており、ニューラル ネットワークのモデル化とトレーニングに役立ちます。Encog は 2008 年から活発に開発されています。」

Encog は、Java、C#.Net、Silverlight で利用できます。

http://www.heatonresearch.com/encog

于 2011-01-14T17:22:31.843 に答える
2

あなたはWekaを見てみたいと思うかもしれません。データの視覚化などのツールが組み込まれており、何年も前から存在しています(いくつかのスクリーンショット)。

于 2009-12-12T09:33:57.187 に答える
2

私は洪水が好きです。これは無料で包括的であり、C++で記述されています。

于 2009-12-11T16:44:02.307 に答える
2

C++ を使用して NN の実装を書き始めましたが、最初は関連する数学について十分に知らなかったことがわかりました。結局、計算モデルを微調整していたので、コードをリファクタリングするのが難しすぎたのです。

最終的には、ニューラル ネットワークのしくみを学習する上で MATLAB の方が優れていたため、MATLAB を使用することにしました。いくつかのキー ストロークを使用してアルゴリズムを大幅に変更し、結果をグラフ化することもできました。

既に構築された行列計算フレームワークを使用していれば、おそらく私の経験はより良かったでしょう。それが 3D のやり方であることを考えると、ほとんどの言語に対して本当に最適化されたライブラリがいくつかあるはずです。そのために Direct3D や OpenGL を活用することもできますが、Neural Networks にもっと適したものがあると確信しています。

私はあなたが何をすべきかについて多くの情報を提供していないと思います. ただし、何をすべきでないかはわかります。それは、自分で行列操作コードを書こうとすることです。

于 2009-12-12T05:32:16.293 に答える
2

また、 Nenを試してみることもできます。無料で、使いやすく、非常に軽量です。また、多くの一般的な回帰および分類データセットのすぐに使える比較で、LIBSVM よりも優れています。

于 2012-02-28T09:45:49.577 に答える
2

学校の nn のクラスでは matlab を使用し、卒業論文では Java を使用しました。

Javaまたはmatlabをお勧めします。Matlabには、おそらく必要なものがすでにたくさんあるからです。Java は、オープン ソース プロジェクトに欠けている可能性があるものをすばやく実装できるためです。また、ニューラル ネットワークを実装する以外に、それらを視覚化する方法が必要になる場合もあります。そのために、私は個人的にJavaまたはmatlabが非常に簡単であると信じています.

于 2009-12-11T15:37:37.180 に答える
2

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

ただし、アルゴリズムの実装はオープン ソースではないため、特定のコードを Matlab の外部のアプリケーションに移動する必要がある場合は、より困難な場合があります。これは、異なるニューラル ネットワーク タイプの手動でコーディングした実装が異なる結果を生成したためです。

于 2009-12-12T05:09:26.870 に答える
2

私の考えでは、ニューラル ネットワークを扱う際の鍵は、ネットワーク自体がコードでどのように実現されるかではなく、トレーニング セットを適切に設定することです。ネットワークを使用して解決しようとしている問題の種類に基づいて言語を選択します。ネットワーク自体については、c++、c#、python、および java がすべて実行可能です。

画像処理を必要とする問題に関連してこれを使用していますか? その場合、OpenCV のような画像処理ライブラリに簡単に接続できるものが必要になるでしょう。それとも、何らかのオーディオ処理が関係していますか?

トレーニングセットを簡単に視覚化する必要があるかもしれませんが、選択した言語でこれはどれほど簡単でしょうか? OpenGL または DirectX ライブラリを直接、または何らかのラッパーを使用して操作できますか? DirectX の場合、選択肢は C++ と C# です。より高いレベルの抽象化は、WPF を使用すると機能しますか?

私は C# を使い慣れていて、.net の多数のデータ処理テクノロジを活用し、必要な視覚化に wpf を使用できるため、C# を使用しています。

于 2009-12-12T10:10:31.507 に答える
1

C++ を使用し、ニューラル ネットワークが十分に単純である場合は、変なフレームワークを使用しないでください。

たぶん 5 年前に、強化学習を使用して倉庫番ソルバーを作成しました。その時点で、Java を採用し、イタリアの大学が開発したエージェント フレームワークを使用することにしました。

ここでの最初の悪い決定は、このフレームワークを使用することでした。基本的にあちこちにバグがあり、フレームワークのコードをデバッグするのに多くの時間を浪費しました。

すべてが安定するようになると、ニューラル ネットワークのトレーニングは非常に遅くなります。非常に強力なマシンで一晩実行したままにしましたが、それでもパズルはほとんど解決されませんでした. 基本的に、Java オブジェクトの割り当てとガベージ コレクションは、システム全体のパフォーマンスにかなりのダメージを与えていました。オブジェクトを常に割り当てるのではなく、オブジェクトのプールを作成することでアプリを少し調整しましたが、プログラムのパフォーマンスは、ソケットを直接使用して C++ で実装された同様の割り当てよりも 1 桁劣っていました。

お役に立てれば!

于 2009-12-10T14:08:45.087 に答える
1

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

クールな/かなり良い分類作業を行っている何かを見つけて理解したら、C または C++ でアルゴリズムを作成しました。これは、一部は楽しみのためであり、一部はより大きなデータセットを処理するために必要な速度向上を得るためにです。

于 2009-12-09T22:45:08.740 に答える
1

プロトタイプをすばやく作成したい場合は、python または matlab が最適です。ニューラル ネットワークに使用できるライブラリは多数あります。一部のライブラリは微調整範囲を最小限に抑えるように設計されていますが、Theano のようなライブラリは、関数が C で内部的にコンパイルされているため非常に高速であり (これまでで最速だと思います)、内部の完全な機能を提供します。微調整。Theano は最初に使用するのが一般的ですが、非常に強力です。その後、ニューラルからディープ ニューラルに移行したい場合、大きな違いはありません。プロの Kaggler もこのライブラリを使用する傾向があります。このライブラリは GPU もサポートしています。私が使用したすべてのライブラリの中で、theano が最も便利で強力であることがわかりました。Caffe のようなディープ ラーニング用の他の最先端フレームワークのいくつかは、theano で開発されています。

お役に立てれば。

于 2015-03-19T04:38:05.863 に答える
0

Java と C/C++ でいくつかのニューラル ネットワーク プロトタイプを実装しました。パフォーマンスが重要な場合は、C/C++ で使用してください。

基本的な多層パーセプトロンの私の実装 (ベクトル化されていない) の 1 つは、1 分未満で 100 万回のトレーニング反復 (2 つの入力ノード、4 つの非表示ノード、1 つの出力ノードのセットアップ) を実行します。私の Java でのほぼ同じ実装は、これを行うのに膨大な時間がかかります。また、Eigen などの線形代数ライブラリを使用してベクトル化されたバージョンを作成し、処理速度を向上させることもできます。

たとえば、28x28 ピクセルの画像を使用して、あらゆる種類の画像処理 (顔認識、OCR など) に使用することを想像してください。784 個の入力ユニットと少なくとも同数の非表示ユニットがあります。これはトレーニングに膨大な時間がかかるため、貴重な分、時間、または日を節約するのに役立ちます。

于 2016-05-30T17:28:11.890 に答える