2017-06-20 12 views
1

gs bucketからnumpy .npzファイルをロードする必要があるgoogle-cloud-mlジョブがあります。私はthis exampleのgsから.npyファイルをロードする方法を追っていましたが、.npzファイルが圧縮されて以来、私はうまくいきませんでした。ここでnumpy npzファイルをgoogle-cloud-mlジョブまたはGoogle Cloud Storageから読み込む方法は?

は私のコードです:

from StringIO import StringIO 
import tensorflow as tf 
import numpy as np 
from tensorflow.python.lib.io import file_io 

f = StringIO(file_io.read_file_to_string('gs://my-bucket/data.npz')) 
data = np.load(f) 

そしてここでは、エラーメッセージが表示されます:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa2 in position 10: invalid start byte

はどうやら、strにデータを符号化することは正しくないですが、私は対処するかどうかはわかりませんこの。

いくつかお手伝いできますか?ありがとう!

答えて

1

私はfile_io.read_file_to_string()Trueバイナリフラグを設定する必要が判明しました。

はここで動作するコードです:

from io import BytesIO 
import tensorflow as tf 
import numpy as np 
from tensorflow.python.lib.io import file_io 

f = BytesIO(file_io.read_file_to_string('gs://my-bucket/data.npz', binary_mode=True)) 
data = np.load(f) 

そして、これは、圧縮と非圧縮.npzファイルの両方のために動作します。

1

は、Python 3と前方互換であることの追加ボーナスを有し、代わりio.BytesIOを使用してみてください:

import io 
import tensorflow as tf 
import numpy as np 
from tensorflow.python.lib.io import file_io 

f = io.BytesIO(file_io.read_file_to_string('gs://my-bucket/data.npz'), 
       binary_mode=True) 
data = np.load(f) 
+0

はそれを試してみましたが、まだ動作しませんでした - 同じエラーメッセージが表示されます。しかし、ありがとう! – astromz

+0

'read_file_to_string'に' binary_mode = True'を設定すると、コードが動作します。ありがとう。 – astromz

+0

私はちょうどコードを編集しました、ありがとう。奇妙なことに、それは私がやったテストでうまく走ったが、これはとにかく良く見える。 – rhaertel80

0

代替が(以前のTFのバージョン以降のものとの違いに注意してください)です。

同様
import numpy as np 
from tensorflow.python.lib.io import file_io 
from tensorflow import __version__ as tf_version 

if tf_version >= '1.1.0': 
    mode = 'rb' 
else: # for TF version 1.0 
    mode = 'r' 

f_stream = file_io.FileIO('mydata.npz', mode) 
d = np.load(BytesIO(f_stream.read())) 

、漬物用のファイル:

import pickle 
d = pickle.load(file_io.FileIO('mydata.pickle', mode)) 
関連する問題