2

次のような機械学習ルーチンを Octave にまとめました。

  1. 音声ファイルから特徴を抽出
  2. 機能はスケーリングおよび正規化されています
  3. SVM 分類器のトレーニング
  4. 分類が行われます

私が抱えている問題は、ステップ 2、3、および 4 がデータベース全体で完了するまでに数秒かかることです。ただし、ステップ 1 はファイルごとに約 1 秒かかります。これは過剰です。

時間がかかる理由は、ほとんどの場合、を使用してファイルごとに複数の指数フィットを実行しているためですleasqr

クラスごとに約 1500 のサウンド ファイルがあり、3 つ以上のクラスがあるため、合計が増え始めます。15,000 個のファイルに拡張したいと考えていますが、現在の特徴抽出速度では実現不可能です。

特徴抽出のステップに何度も対処しなければならない理由は、それを使用して分類器のパフォーマンスを微調整してきたからです。たとえば、指数フィットが実行される範囲を変更することによって。

私の質問は次のとおりです。手間のかかるプロセスを外部で実行した経験はありませんが、それは実行可能な解決策でしょうか? もしそうなら、このような状況の良い/標準的な慣行は何ですか? そうでない場合、良い習慣は何ですか?

4

1 に答える 1

5

プロセスは高度に独立しているため (1 つのファイルからの特徴の抽出は、他のファイルの抽出結果にまったく依存しません)、この問題を処理する最も論理的な方法は並列化です。このプロセスは、多くのスレッド/コア/プロセッサ/コンピューター/クラスターで同時に実行でき、十分な計算能力にアクセスできると仮定して、プロセス全体を必要なだけ高速化できます。あなたが研究者である場合、大学/研究施設/会社でいくつかの計算クラスターにアクセスできる可能性が非常に高くなります。それ以外の場合は、Amazon EC2 などでそのようなリソースへのアクセスをいつでも購入できます (ただし、より安価で優れたクラスターを見つけることができると確信しています)。

しかし、 (価格と結果の両方の意味で)より良い方法は、C++ のような効率的な言語を使用して前処理を実行し、信じられないほど遅いため、Octave を置き去りにすることです。これで十分でない場合 (少なくとも数列は高速化されると確信しています)、並列化について考えてみてください。

一般に、Matlab/Octave は分析ツールであり、実際の計算ではなく、研究に使用する必要があります。効率が問題になったら、「実際のプログラミング」を行います。

于 2013-09-02T07:27:37.630 に答える