在我想要启动的模型中,我有一些必须用特定值初始化的变量。
我目前将这些变量存储到numpy数组中,但我不知道如何调整我的代码以使其适用于google-cloud-ml作业。
目前我初始化我的变量:
my_variable = variables.model_variable('my_variable', shape=None, dtype=tf.float32, initializer=np.load('datasets/real/my_variable.npy'))
有人可以帮助我吗?
答案 0 :(得分:15)
首先,您需要在GCS上复制/存储数据(使用例如gsutil
),并确保您的培训脚本可以访问该存储桶。最简单的方法是将数组复制到与数据相同的存储桶中,因为您可能已经将该存储桶配置为读访问权限。如果存储桶与您的培训作业位于同一项目中,并且您遵循了these说明(特别是gcloud beta ml init-project
),则应进行设置。如果数据将在另一个存储桶中,请参阅these说明。
然后,您需要使用能够从GCS加载数据的库。 Tensorflow包含一个可以执行此操作的模块,尽管您可以自由使用任何可以从GCS读取的客户端库。以下是使用TensorFlow的file_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_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]]))
答案 1 :(得分:1)
我尝试了接受的答案,但是遇到了一些问题。最终这对我有用(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)