Tensorflow Keras上采样2D->;tflite转换会导致失败的形状推断和未定义的输出形状

Tensorflow Keras上采样2D->;tflite转换会导致失败的形状推断和未定义的输出形状,tensorflow,keras,tensorflow-lite,Tensorflow,Keras,Tensorflow Lite,Keras Upsampling2d操作通过附加操作和未定义的形状转换为该操作 但是,Tensorflow在没有此操作的情况下以正确的形状进行转换 这会导致未定义的整体模型输出形状,并导致设备上的错误。如何修复此问题?此处描述了此行为 Keras默认情况下将动态批处理大小设置为true。 这意味着模型输入形状是[*,28,28],而不是[1,28,28]。 旧的(不推荐使用的)转换器用于忽略动态批处理并将其覆盖为1-这是错误的,因为这不是原始模型所具有的-您可以想象,当您尝试在运行时调整输入

Keras Upsampling2d操作通过附加操作和未定义的形状转换为该操作

但是,Tensorflow在没有此操作的情况下以正确的形状进行转换


这会导致未定义的整体模型输出形状,并导致设备上的错误。如何修复此问题?

此处描述了此行为

Keras默认情况下将动态批处理大小设置为true。 这意味着模型输入形状是[*,28,28],而不是[1,28,28]。 旧的(不推荐使用的)转换器用于忽略动态批处理并将其覆盖为1-这是错误的,因为这不是原始模型所具有的-您可以想象,当您尝试在运行时调整输入大小时,情况会有多糟

相反,current converter正确处理动态批处理大小,并且生成的模型可以在运行时正确调整大小。 这就是为什么“Shape,stickdslice,Pack”序列不是固定折叠的,因为该形状依赖于运行时定义的形状

对于单输入模型,可通过在保存前设置keras模型的恒定形状来修复此问题

model.input.set_shape(1 + model.input.shape[1:])