2016-10-19 4 views
2

私は履歴書を分類することで構成されるマルチクラスの分類問題に取り組んでいます。scipyスパース行列を入力データとしてピクルしましたか?

私はsklearnとそのTfIdfVectorizerを使って、それを酸洗した後にTensorflowモデルでフィードする大きなscipyスパース行列を取得しました。私のローカルマシンでは、ロードし、小さなバッチを高密度な配列に変換し、フィード辞書を埋めます。すべて素晴らしいです。

今私はMLクラウドで同じことをしたいと思います。私のピクルスはgs://my-bucket/path/to/pickleに保存されていますが、トレーナーを走らせると、このURI(IOError: [Errno 2] No such file or directory)でピクルファイルが見つかりません。私はpickle.load(open('gs://my-bucket/path/to/pickle), 'rb')を使ってデータを抽出しています。私はこれがGCS上のファイルを開く良い方法ではないと思うが、私はGoogle Cloudにとって全く新しいので、適切な方法を見つけることができない。

また、入力データにはTFRecordsまたはCSV形式を使用する必要がありますが、私の方法が機能しない理由はわかりません。行列の密な表現が大きすぎてメモリに収まらないため、CSVは除外されます。 TFRecordsは、そのような効率的でないデータをエンコードできますか?そしてpickleファイルからデータを読み取ることは可能ですか?

答えて

5

あなたは、Pythonの "open"がそのままGCSで動作しないということは間違いありません。 TensorFlowを使用している場合、代わりにfile_ioライブラリを使用することができます。これはローカルファイルとGCS上のファイルの両方で動作します。

from tensorflow.python.lib.io import file_io 
pickle.loads(file_io.read_file_to_string('gs://my-bucket/path/to/pickle')) 

NB:pickle.load(file_io.FileIO('gs://..', 'r'))は動作していません。

あなたはどんなデータフォーマットでも使用でき、CSVやTFRecordに限定されません(その主張をする文書の場所を指しておいてください)。データがメモリに収まる場合、あなたのアプローチは合理的です。

データがメモリに収まらない場合は、TensorFlowのreader frameworkを使用することをお勧めします。最も便利なのはCSVまたはTFRecordsです。 TFRecordは単にバイト文字列のコンテナです。最も一般的には、疎なデータをサポートするデータ(本質的にマップ)をシリアル化したtf.Exampleデータが含まれています。 tf.Exampleデータの解析の詳細については、tf.parse_exampleを参照してください。

+0

詳細な回答をいただきありがとうございました。私はTFRコードを調査しましたが、疎なデータにどのように使用するのか分かりません。 mnistのような高密度配列の場合、784次元配列を各例の1つのフィーチャにエンコードすることができます。私は、疎なデータでは、各フィーチャを別々にエンコードし、データがないときにデフォルト値(0)を設定する必要があると思います。私は正しい? –

+0

スパースデータをエンコードする方法はさまざまです。何をエンコードしようとしていますか? – rhaertel80

関連する問題