1

我有上序列化(TFRecord)輸入操作訓練有素的TF模型。圖像數據具有可變的形狀,並通過tf.image.resize_images(...)轉換爲229x229x3形狀。我想用gcloud ml-engine predictplatform類似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輸出應該有正確的形狀。有什麼想法,我在做什麼錯在這裏?提前致謝!

+0

的Tensorflow位看起來是正確的給我; features_normalized應包含輸出(229,229,3)形張量。你可以在你的函數中添加一些調試來驗證它是否使用了你認爲用於預測的模型?幾個星期前我剛開始使用Google Cloud ML,所以我很想看看這裏有什麼問題。 – SuperTetelman

+0

添加'tf.logging.debug(features_normalized.get_shape())'打印出我所期望的:'229x229x3'。但是,它在保存模型之前在訓練期間構建圖形時執行此操作。在恢復預測模型時,形狀不會重複。這顯然是有道理的,但奇怪的是,當我看着'tensorboard'中的圖時,'RESHAPE_PREDICT'無處可尋。 – fenkerbb

回答

2

它看起來像錯誤是由一些代碼,饋送"RESHAPE_PREDICT:0"張量(即tf.reshape() OP的輸出,image)而不是"PREDICT_PLACEHOLDER:0"張量(即,輸入到運算tf.image.resize_images()input_features)引起的。

沒有整個源代碼到你的訓練模型,這是很難說什麼的變化是必要的,但也可能是因爲改變inputs定義爲簡單:

inputs = {'image': input_features} 

......從而使預測服務知道爲該佔位符提供值,而不是固定形狀的輸出tf.reshape()

+0

謝謝,這導致我的解決方案,是的問題是如何在代碼中的其他地方使用此代碼。本質上,我的「輸入」字典定義了用於預測的JSON輸入文件的格式(參見圖:-))。字典的值是形狀被傳遞給'tf.saved_model.signature_def_utils.build_signature_def(...)'的張量。這個模塊有很好的教程或指導嗎?文檔看起來有點稀疏。在任何情況下,非常感謝@mrry – fenkerbb

+0

我認爲'tf.saved_model'唯一文檔是這些的:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/README.md(加上代碼本身的任何評論)。我相信球隊正在使用此教程,但它可能是值得通過打開[GitHub的問題(https://github.com/tensorflow/tensorflow/issues),要求更好的文檔來提醒他們。 – mrry