代码之家  ›  专栏  ›  技术社区  ›  andresbravog

Google Cloud ML:输出的外部尺寸必须未知

  •  3
  • andresbravog  · 技术社区  · 7 年前

    我们在本地得到了一个正在工作的导出模型,该模型将在中创建一个新的模型版本 具体如下:

    Create Version failed. Model validation failed: Outer dimension for outputs must be unknown, outer dimension of 'Const_2:0' is 1 For more information on how to export Tensorflow SavedModel, seehttps://www.tensorflow.org/api_docs/python/tf/saved_model.

    我们当前导出的模型响应正在 tensorflow-serve gcloud predict local

    outputs {
      key: "categories"
      value {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
          dim {
            size: 17
          }
        }
        string_val: "Business Essentials"
        string_val: "Business Skills"
        string_val: "Communication"
        string_val: "Customer Service"
        string_val: "Desktop Computing"
        string_val: "Finance"
        string_val: "Health & Wellness"
        string_val: "Human Resources"
        string_val: "Information Technology"
        string_val: "Leadership"
        string_val: "Management"
        string_val: "Marketing & Advertising"
        string_val: "Personal Development"
        string_val: "Project Management"
        string_val: "Sales"
        string_val: "Technical Skills"
        string_val: "Training & Development"
      }
    }
    outputs {
      key: "category"
      value {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "Training & Development"
      }
    }
    outputs {
      key: "class"
      value {
        dtype: DT_INT64
        tensor_shape {
          dim {
            size: 1
          }
        }
        int64_val: 16
      }
    }
    outputs {
      key: "prob"
      value {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 1
          }
          dim {
            size: 17
          }
        }
        float_val: 0.051308773458
        float_val: 2.39087748923e-05
        float_val: 4.77133402232e-11
        float_val: 0.00015225057723
        float_val: 0.201782479882
        float_val: 2.11781745287e-17
        float_val: 3.61836161034e-09
        float_val: 0.104659214616
        float_val: 6.55719213682e-06
        float_val: 1.16744895001e-12
        float_val: 1.68323947491e-06
        float_val: 0.00510392058641
        float_val: 3.46840134738e-12
        float_val: 1.02085353504e-08
        float_val: 0.000151587591972
        float_val: 3.04983092289e-25
        float_val: 0.636809647083
      }
    }

    该问题必须分类,因为所有其他产出在第一个报告中已经存在 工作 输出的版本。

    有什么想法吗??

    2 回复  |  直到 7 年前
        1
  •  2
  •   andresbravog    7 年前

    回答我自己的问题:

    我需要使用一个现有的形状张量,我需要创建一个 [?, len(CATEGORIES)]

    为此,我们需要一个张量 [?] tf.argmax(logits, 1) tf.till 超过 categories_tensor 和张量 [?,len(类别)] tf.reshape 而不是结果。所以

    CATEGORIES # => ['dog', 'elephant']
    n_classes = len(CATEGORIES) # => 2
    categories_tensor = tf.constant(CATEGORIES) # => Shape [2]
    pob_tensor = tf.nn.softmax(logits) 
    # => Shape [?, 2] being ? the number of inputs to predict
    class_tensor = tf.argmax(logits, 1) 
    # => Shape [?, 1]
    
    tiled_categories_tensor = tf.tile(categories_tensor, tf.shape(class_tensor)) # => Shape [2*?] 
    # => ['dog', 'elephant', 'dog', 'elephant', ... (? times) , 'dog', 'elephant' ]
    categories = tf.reshape(tiled_categories_tensor, tf.shape(prob_tensor)) # => Shape [?, 2] 
    # => [['dog', 'elephant'], ['dog', 'elephant'], ... (? times) , ['dog', 'elephant'] ]
    
    predictions_dict = {
          'category': tf.gather(CATEGORIES, tf.argmax(logits, 1)),
          'class': class_tensor,
          'prob': prob_tensor,
          'categories': categories
        }
    

    希望这对任何面临这个问题的人都有帮助

        2
  •  0
  •   Jeremy Lewi    7 年前