【问题标题】:Google cloudml Always Gives Me The Same Results谷歌 cloudml 总是给我同样的结果
【发布时间】:2016-12-17 05:44:47
【问题描述】:

我正在研究机器学习,我想使用 Google Cloud 机器学习服务。

此时,我已经使用 Tensorflow (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py#L103) 的 retrain.py 代码训练了我的模型,并将结果导出到了 cloudml(export 和 export.meta 文件)。但是,当我尝试使用命令 (https://cloud.google.com/ml/reference/commandline/predict) 预测新数据时:

gcloud beta ml predict

它总是返回相同的结果(我想预测不同的数据)。怎么可能?

我的数据是从 jpeg 以文本格式解码的图像:

echo "{\"image_bytes\": {\"b64\": \"`base64 image.jpg`\"}}" > instances

你有什么建议吗?

【问题讨论】:

    标签: python image-recognition google-cloud-ml


    【解决方案1】:

    此问题有多种可能的原因。首先想到的是模型中的权重可能在导入时被初始化为零。如果图中定义了初始化,则可能会发生这种情况(c.f. the loader)。要检查这一点,请使用以下命令:

    from tensorflow.contrib.session_bundle import session_bundle
    
    session, _ = session_bundle.load_session_bundle_from_path("/path/to/model")
    print(s.graph.get_collection("serving_init_op"))
    

    如果该集合中有东西,请确保它没有初始化变量。

    如果没有初始化器,请确保权重本身看起来合理,例如,

    session, _ = session_bundle.load_session_bundle_from_path("/path/to/model")
    print(session.run("name_of_var:0"))
    

    如果所有这些都得到满足,那么您可能需要注意图表的输入以及转换这些输入后的输出。为此,您可以使用session.run 运行图的部分内容。例如,您可以通过调用session.run 使用适当的提要和提取来提供 jpeg 字符串并查看沿途各个步骤的输出。

    例如,使用this post 中的示例,我们可以从磁盘加载 JPEG,将其提供给图形,然后查看调整大小和缩放后数据的样子:

    INPUT_PLACEHOLDER = 'Placeholder:0'
    DECODE_AND_RESIZE = 'map/TensorArrayPack_1/TensorArrayGather:0'
    SCALED = 'Mul:0'
    
    # Read in a sample image, preferably with small dimensions.
    jpg = open("/tmp/testing22222.jpg", "rb").read()
    
    session, _ = session_bundle.load_session_bundle_from_path("/path/to/model")
    resized, scaled = session.run([DECODE_AND_RESIZE, SCALED], feed_dict={INPUT_PLACEHOLDER: [jpg]})
    

    通过在fetch 列表中策略性地放置图表中的张量名称,您可以检查神经网络的任何给定层中发生的情况,尽管最可能的问题在于输入和/或变量。

    棘手的部分是找出张量的名称。您可以在定义大多数操作时使用name 属性,这可能会有所帮助。你也可以使用类似的东西:

     print([o.name for o in session.graph.get_operations()])
    

    帮助检查图中的操作。

    最后,您可能还想尝试在本地运行图表,以最大限度地减少调试时的反馈周期。查看示例中的local_predict.py,了解如何执行此操作的示例。这将帮助您快速迭代以识别模型本身的问题。

    【讨论】:

      【解决方案2】:

      您的输入也可能需要缩放。如果您有一个输入的大小压倒其他所有输入,则优化可能很差。如果您得到的结果接近目标变量的平均值,就会发生这种情况。

      这在您的特定情况下不太可能,因为您的输入是图像,您的输入值是否可能类似地缩放,但如果您从 csv 文件等进行训练,则更常见。

      【讨论】:

        【解决方案3】:

        Google 发布了关于图像识别任务的blog post 和一些相关的code。它从您提到的 retrain.py 示例开始,但对其进行了所有修改以使其在 Cloud ML 上运行。

        【讨论】:

          猜你喜欢
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多