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

发布于 2021-01-29 19:00:47

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

我目前将这些变量存储到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
被浏览
44
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    然后,您需要使用一个能够从GCS加载数据的库。尽管您可以自由使用任何可以从GCS读取的客户端库,但Tensorflow包含一个可以执行此操作的模块。以下是使用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未完全实现所需的seek函数,因此必须将文件读取为字符串并使用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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看