3

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

我目前将这些变量存储到 numpy 数组中,但我不知道如何调整我的代码以使其适用于 google-cloud-ml 工作。

目前我像这样初始化我的变量:

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

有人能帮我吗 ?

4

2 回答 2

17

首先,您需要在 GCS 上复制/存储数据(例如,使用gsutil)并确保您的训练脚本可以访问该存储桶。最简单的方法是将数组复制到与数据相同的存储桶中,因为您可能已经配置了该存储桶以进行读取访问。如果存储桶与您的训练作业在同一个项目中,并且您遵循了这些说明(尤其是gcloud beta ml init-project),那么您应该已设置好。如果数据将在另一个存储桶中,请参阅这些说明。

然后,您需要使用能够从 GCS 加载数据的库。Tensorflow 包含一个可以执行此操作的模块,尽管您可以自由使用任何可以从 GCS 读取的客户端库。file_io以下是使用 TensorFlow模块的示例:

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_io.FileIO它没有完全实现numpy.load.

奖励:如果有用,您可以使用file_io模块直接将 numpy 数组存储到 GCS,例如:

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

对于 Python 3,使用from io import StringIO而不是from StringIO import StringIO.

于 2017-01-13T15:10:32.310 回答
5

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

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

保存:

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)
于 2019-06-27T21:27:03.317 回答