Python 在google cloud ml作业中加载numpy数组

Python 在google cloud ml作业中加载numpy数组,python,numpy,tensorflow,google-cloud-ml,Python,Numpy,Tensorflow,Google Cloud Ml,在我想要启动的模型中,我有一些变量必须用特定的值初始化 我目前将这些变量存储到numpy数组中,但我不知道如何调整代码,使其在google cloud ml作业中工作 目前,我初始化变量的方式如下: my_variable = variables.model_variable('my_variable', shape=None, dtype=tf.float32, initializer=np.load('datasets/real/my_variable.npy')) 有人能帮我吗?首先,您

在我想要启动的模型中,我有一些变量必须用特定的值初始化

我目前将这些变量存储到numpy数组中,但我不知道如何调整代码,使其在google cloud ml作业中工作

目前,我初始化变量的方式如下:

my_variable = variables.model_variable('my_variable', shape=None, dtype=tf.float32, initializer=np.load('datasets/real/my_variable.npy'))

有人能帮我吗?

首先,您需要在地面军事系统上复制/存储数据(使用,例如,
gsutil
),并确保您的培训脚本可以访问该存储桶。最简单的方法是将数组复制到与数据相同的bucket中,因为您可能已经将该bucket配置为读访问。如果bucket与您的培训工作在同一个项目中,并且您遵循了说明(特别是,
gcloud beta ml init project
),则应设置该bucket。如果数据将位于另一个存储桶中,请参阅说明

然后,您需要使用能够从地面军事系统加载数据的库。Tensorflow包含一个模块,可以实现这一点,尽管您可以自由使用任何可以从GCS读取的客户端库。下面是使用TensorFlow的
文件io
模块的示例:

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

# Create a variable initialized to the value of a serialized numpy array
f = StringIO(file_io.read_file_to_string('gs://my-bucket/123.npy'))
my_variable = tf.Variable(initial_value=np.load(f), name='my_variable')
请注意,我们必须将文件读入字符串并使用
StringIO
,因为
file\u io.FileIO
没有完全实现
numpy.load
所需的seek函数

额外好处:如果有用,您可以使用
文件io
模块将numpy阵列直接存储到地面军事系统,例如:

np.save(file_io.FileIO('gs://my-bucket/123', 'w'), np.array([[1,2,3], [4,5,6]]))

对于Python3,使用
from io import StringIO
而不是
from StringIO import StringIO

我尝试了接受的答案,但遇到了一些问题。最终这对我起了作用(Python 3):

要保存:

dest = 'gs://[BUCKET-NAME]/' # Destination to save in GCS
np.save(file_io.FileIO(dest, 'w'), np.ones((100, )))
要加载:

f = BytesIO(file_io.read_file_to_string(src, binary_mode=True))
arr = np.load(f)
f = BytesIO(file_io.read_file_to_string(src, binary_mode=True))
arr = np.load(f)