tf2中tf.reshape的使用问题

我通过子类的方法构建模型,在call方法中用到了reshape,我的做法是对于call方法传进来的inputs参数,我通过inputs.shape获取了形状:b,h,w,c。然后后面reshape的时候是进行了tf.reshape(x,[b,hw,c])的操作。前向反向传播都没有任何问题。但是调用save_model保存模型的时候提示我reshape这一行出现了异常,提示[None, 20480, 48]的None的list不能转换为tensor。
并且采用model.fit也会这样提示。正如您所说,创建动态图是形状还没有确定。于是我更改了reshape的使用方法,将tf.reshape(x,[b,h
w,c])更改成了tf.reshape(x,[-1,h*w,c])也就是让其自动推断出batchsize大小。这样一来可以顺利保存模型。但是这样一来,在训练的途中会出现莫名的错误,有时候是concat的时候提示形状不一样,提示batchsize纬度不同。
规范的使用方法应该是什么呢?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    根据问题描述,使用tf.reshape操作时遇到了保存模型时的异常以及训练过程中的错误。根据参考资料中的代码示例,可以看出tf.reshape的使用方法是正确的。因此,可能出现问题的地方可能是其他地方代码的问题。

    首先,我们需要确认输入张量x的形状是否与模型构建时的输入形状一致。如果输入形状不一致,那么产生的错误可能与tf.reshape无关。

    接下来,我们可以查看训练过程中出错的地方。按照问题描述,有时是concat操作时形状不一致,有时是批量大小(batch_size)维度不同。这些错误提示可能是由于在批处理样本时,样本的形状不一致导致的。因此,我们需要检查数据集是否有错误,确保所有样本的形状是一致的。

    如果确认输入形状和数据集都是正确的,那么问题很可能出现在模型的其他部分。我们需要仔细检查模型的其他操作,例如concat操作和其他自定义的操作,以确保它们正确处理输入的形状。

    总之,根据给出的参考资料和问题描述,我无法确定问题的具体原因,也无法给出具体的解决方案。因此,我建议先检查输入形状和数据集是否正确,然后仔细检查模型的其他操作。如果问题仍然存在,可能需要更多的信息才能解决该问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^