繁体   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