Google Cloud ML:输出的外部维度必须未知
Google Cloud ML: Outer dimension for outputs must be unknown
我们在本地得到了一个有效的导出模型,它正在下降以在 Google Cloud ML 中创建一个新的模型版本,如下所示:
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
}
}
问题必须归类,因为所有其他输出都已经存在于输出的第一个 工作 版本中。
有什么想法吗??
我认为您需要构建图形,使每个输入的第一个维度都是未知的,以便您可以支持批处理。我认为您可以通过将形状中的大小设置为 None 来做到这一点;看到这个 .
回答我自己的问题:
我需要使用形状的现有张量之一,我需要基于它们创建 [?, len(CATEGORIES)]
张量。
为此我们需要一个张量 [?]
作为 tf.argmax(logits, 1)
用于在 categories_tensor
上使用 tf.till
和一个张量 [?, len(CATEGORIES)]
用于使用 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
}
希望对遇到此问题的人有所帮助
我们在本地得到了一个有效的导出模型,它正在下降以在 Google Cloud ML 中创建一个新的模型版本,如下所示:
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
}
}
问题必须归类,因为所有其他输出都已经存在于输出的第一个 工作 版本中。
有什么想法吗??
我认为您需要构建图形,使每个输入的第一个维度都是未知的,以便您可以支持批处理。我认为您可以通过将形状中的大小设置为 None 来做到这一点;看到这个
回答我自己的问题:
我需要使用形状的现有张量之一,我需要基于它们创建 [?, len(CATEGORIES)]
张量。
为此我们需要一个张量 [?]
作为 tf.argmax(logits, 1)
用于在 categories_tensor
上使用 tf.till
和一个张量 [?, len(CATEGORIES)]
用于使用 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
}
希望对遇到此问题的人有所帮助