我有上序列化(TFRecord
)輸入操作訓練有素的TF模型。圖像數據具有可變的形狀,並通過tf.image.resize_images(...)
轉換爲229x229x3形狀。我想用gcloud ml-engine predict
platform類似this,確保接受任何尺寸的圖像作爲輸入。Tensorflow:調整圖像佔位符
我從下面的函數得到我features
張量(其傳遞給預測圖):
def jpeg_serving_input_fn():
"""
Serve single jpeg feature to the prediction graph
:return: Image as a tensor
"""
input_features = tf.placeholder(dtype=tf.float32, shape=[None, None, 3],
name="PREDICT_PLACEHOLDER")
features_normalized = tf.image.resize_images(input_features, [229, 229])
image = tf.reshape(features_normalized, [1, 229, 229, 3], name="RESHAPE_PREDICT")
inputs = {
'image': image
}
的tf.reshape
在端部是因爲我的預測圖形期望形狀[batch_size, 229, 229, 3]
的張量。當我通過
gcloud ml-engine local predict \
--model-dir=trained_model/export/ \
--json-instances=img.json
運行此通過發動機,我收到了PredictionError
:
predict_lib_beta.PredictionError: (4, "Exception during running the graph: Cannot feed value of shape (1, 1600, 2400, 3) for Tensor u'RESHAPE_PREDICT:0', which has shape '(1, 229, 229, 3)'")
它看起來對我來說,tf.reshape
被饋送的tf.image.resize_images
輸出應該有正確的形狀。有什麼想法,我在做什麼錯在這裏?提前致謝!
的Tensorflow位看起來是正確的給我; features_normalized應包含輸出(229,229,3)形張量。你可以在你的函數中添加一些調試來驗證它是否使用了你認爲用於預測的模型?幾個星期前我剛開始使用Google Cloud ML,所以我很想看看這裏有什麼問題。 – SuperTetelman
添加'tf.logging.debug(features_normalized.get_shape())'打印出我所期望的:'229x229x3'。但是,它在保存模型之前在訓練期間構建圖形時執行此操作。在恢復預測模型時,形狀不會重複。這顯然是有道理的,但奇怪的是,當我看着'tensorboard'中的圖時,'RESHAPE_PREDICT'無處可尋。 – fenkerbb