我刚刚开始使用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上的源代码,看起来对我来说是正确的。
答案 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