2

私は Java で機械学習プロジェクトに取り組んでいます。これには、エンド ユーザーが使用するためにかなり頻繁に取得する必要がある非常に大きなモデル (それに精通している方のためにサポート ベクター マシンの出力) が含まれます。モデルの大部分は、かなり小さなオブジェクトの大きな 2 次元配列で構成されています。

残念ながら、モデルがどのくらいの大きさになるかは正確にはわかりません (これまでベンチマーク データを使用してきましたが、実際に使用するデータはまだ準備ができていません)。それが実行されるマシンの仕様も不明です。

モデルを文字列としてファイルに書き込む方法は既にありますが、書き込みプロセスにはかなりの時間がかかり、読み取りプロセスには 1 分近くかかります。その時間を短縮したいので、コンパイルしてから実行して完全に形成されたモデルを生成できるように、モデルを .java ファイルに書き込むという、明るい、または非常に複雑なアイデアを思いつきました。

あなたへの私の質問は、モデルのサイズが約 1 MB であるという前提の下で、Java でモデルを保存してコンパイルする方が、ファイルから読み取るよりもはるかに高速ですか? そして、これがどんな状況下でも追求すべきではない、非常にばかげたアイデアである可能性があることをまだ見ていない理由はありますか?

あなたが私に与えることができるアイデアをありがとう。

編集:どうやら数千の値をコードに自動的に書き込もうとすると、コンパイラが処理できるよりも約2桁大きいメソッドが作成されます。ああ、生きて学ぶ。

4

4 に答える 4

2

文字列や Java ファイルに書き込む代わりに、コンパクトなバイナリ形式のデータを作成することを検討してください。

于 2012-06-28T13:57:19.683 に答える
1

モデルを Java に保存してコンパイルすると、ファイルから読み取るよりも大幅に高速になりますか?

それは、モデルを含むようにカスタム データ構造を作成する方法によって異なります。

于 2012-06-28T14:16:30.307 に答える
1

私見の問題は、IO が原因で、または計算時間 (=> CPU) が原因で、ファイルの読み取りに時間がかかるかどうかです。後者の場合は、運が悪いです。IO(ハードディスクなど)が原因である場合は、ファイルを圧縮して、読み取り後/読み取り中に抽出できます。(もちろん) Java には ZIP サポートがあります (Streams でも)。

于 2012-06-28T14:10:24.657 に答える
0

バイナリ入力形式を使用するという上記の回答に同意します。まずは最適化してみましょう。情報を提供していただけますか?...または、バイナリ データを使ってググったことはありますか? ...バッファリング?等。?

.java ファイルを作成してコンパイルすることは、非常に興味深いことですが、ある時点で問題が発生することは間違いありません。ただし、最適化されたバイナリ形式よりもわずかに遅くなりますが、テキストベースの入力よりは高速であることがわかると思います。

また、初期の最適化には細心の注意を払ってください。通常、「高度に構成可能」と「非常に高速」は相互に排他的です。むしろ、最初にすべてを機能させてから、プロファイラーを使用してアプリケーションの非常に遅いセクションを最適化します。

于 2012-06-28T14:10:16.997 に答える