簡體   English   中英

Tensorflow set_shape function 在運行時不會拋出不同形狀的錯誤

[英]Tensorflow set_shape function doesn't throw an error with a different shape at runtime

所以我將一些分辨率為 1024x1024 的圖像加載到張量列表中,然后使用 function set_shape 將列表中每個張量的形狀更改為 [128,128,3]:請參見此處的代碼示例

但是,當我調用 eval() 並檢查來自張量的圖像的形狀時,它說形狀是 [1024,1024,3]。 在此處查看代碼示例

那為什么 set_shape 沒有拋出錯誤呢?

我認為您可能錯誤地使用set_shape() 請參閱關於 tf.Tensor.set_shape() 的說明

“一個類比是tf.set_shape()就像 Java 這樣的面向對象語言中的運行時轉換。例如,如果你有一個指向 Object 的指針,但知道它實際上是一個字符串,你可能會進行強制轉換 (String) obj 以便將 obj 傳遞給需要 String 參數的方法。但是,如果您有一個 String 並嘗試將其強制轉換為 java.util.Vector,編譯器會給您一個錯誤,因為這兩種類型是不相關的。”

基本上這個 function 為具有未指定形狀的張量提供了形狀定義(我認為)。 它不會將張量調整為具有不同數量元素的張量,因此如果您嘗試以這種方式使用它,它將失敗。 那么為什么它不拋出錯誤呢? 我不是 100% 確定,但我猜這與為什么將 integer 轉換為字符串不會導致錯誤有類似的原因。 這是一個有效的操作,但是當您嘗試使用該變量時,假設形狀實際上與您的set_shape()調用期間指定的一樣,可能會在您的代碼中導致問題。

考慮改用tf.image.resize() 此 function 旨在執行您在此處嘗試執行的操作。 它接受一批圖像並返回一個調整大小的批次。

new_list = tf.image.resize(lista,[128,128])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM