Tensorflow file_io.read_file_to_string表示意外的关键字参数binary_mode

时间:2017-12-24 00:46:34

标签: python numpy tensorflow google-cloud-ml

我刚刚开始使用google cloud ml引擎来训练我的模型,但是在尝试加载数据时我一直遇到问题:我的数据文件采用压缩的.npz(numpy存档)格式。

pathtodata = os.path.join(FLAGS.inputdir,'input_data_1.npz')
f = file_io.read_file_to_string(pathtodata, binary_mode=True)
data1 = np.load(BytesIO(f))

每当我尝试在计算机上运行它时,它都能完美运行。数据从正确的目录加载。但是,当我尝试在CloudML上运行作业时,它说

    f = file_io.read_file_to_string(pathtodata, binary_mode=True)
    TypeError: read_file_to_string() got an unexpected keyword argument 
    'binary_mode'

我尝试过使用

with file_io.FileIO(pathtodata, mode='r') as f:
    f._binary_mode = True
    data1 = np.load(f)

再一次,这可以在我自己的设备上运行,但当我将其加载到谷歌云时,我收到错误

File "/root/.local/lib/python2.7/site-packages/trainer/task.py", line 35, in 
get_data
data1 = np.load(f)
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 405, 
in load
fid.seek(-min(N, len(magic)), 1)  # back-up
TypeError: seek() takes exactly 2 arguments (3 given)

我已经研究了从云存储桶导入数据到cloudml作业的所有不同方法,但无济于事。

如果你想知道为什么,我明确地告诉FileIO对象让_binary_mode为真,因为它会抛出模式不是'r''w''''r +'的错误。我的电脑正在运行Tensorflow 1.2.1。最新的运行时版本似乎是Tensorflow 1.4.0。我检查了github上的源代码,看起来对我来说是正确的。

1 个答案:

答案 0 :(得分:0)

我遇到了这个问题,对我来说,这是版本不匹配的问题,正如郭国庆所建议的那样。要进行诊断,请在脚本中添加以下行:

print("TensorFlow version", tf.__version__)

然后,您可以比较本地版本和远程版本。我相信ML引擎的默认版本是1.0.1,为时过早,无法将文件读取到字节。

您可以通过YAML或JSON文件更改部署版本,该文件必须对--config命令使用gcloud ml-engine jobs submit training参数,也可以使用--runtime-version标志。例如

gcloud ml-engine jobs submit training "JOB_NAME" --module-name my_module.main --runtime-version=1.13

可在此处找到部署中可用版本的列表:https://cloud.google.com/ml-engine/docs/tensorflow/runtime-version-list