我有一个google云-ml的工作,需要从gs桶加载numpy .npz文件。我跟踪了this example如何从gs加载.npy文件,但是由于.npz文件是压缩的,所以它对我不起作用。
这是我的密码:
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是不正确的,但我不知道如何解决这个问题。
有人能帮忙吗?谢谢!
发布于 2017-06-20 18:25:56
结果,我需要在True中将二进制标志设置为file_io.read_file_to_string()。
以下是工作代码:
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文件。
发布于 2017-06-20 16:34:07
尝试使用io.BytesIO,它具有与Python3兼容的额外好处:
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)发布于 2017-12-19 19:14:42
另一种选择是(请注意较早的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))https://stackoverflow.com/questions/44657902
复制相似问题