【发布时间】:2023-04-04 20:00:02
【问题描述】:
Keras Upsampling2d 操作通过附加操作和未定义形状转换为 this
然而,Tensorflow 在没有此操作的情况下会以正确的形状进行转换
这会导致未定义的整体模型输出形状,并导致设备出现错误。如何解决这个问题?
【问题讨论】:
标签: tensorflow keras tensorflow-lite
Keras Upsampling2d 操作通过附加操作和未定义形状转换为 this
然而,Tensorflow 在没有此操作的情况下会以正确的形状进行转换
这会导致未定义的整体模型输出形状,并导致设备出现错误。如何解决这个问题?
【问题讨论】:
标签: tensorflow keras tensorflow-lite
这里描述了这种行为https://github.com/tensorflow/tensorflow/issues/45090
Keras 默认将动态批量大小设置为 true。 这意味着模型输入形状是 [*,28,28] 而不是 [1,28,28]。 旧的(已弃用)转换器用于忽略动态批处理并将其覆盖为 1 - 这是错误的,因为这不是原始模型所具有的 - 您可以想象当您尝试在运行时调整输入大小时会有多糟糕。
当前转换器可以正确处理动态批量大小,并且生成的模型可以在运行时正确调整大小。 这就是为什么“Shape、StridedSlice、Pack”的顺序不是恒定折叠的原因,因为形状取决于运行时定义的形状。
对于单输入模型,这可以通过在保存之前为 keras 模型设置恒定形状来修复
model.input.set_shape(1 + model.input.shape[1:])
【讨论】: