Conv3D预测报错:输入深度与滤波器深度不匹配(1 vs 3)求助
解决Conv3D预测时的InvalidArgumentError问题
看起来你遇到的问题是因为不必要的张量转置导致输入维度和模型期望的不匹配,咱们一步步来解决:
错误原因分析
错误信息 Input depth must be evenly divisible by filter depth: 1 vs 3 说明卷积层接收到的输入深度(对应卷积核的第三个维度)是1,但你的Conv3D卷积核定义的深度是3,两者无法匹配。
为什么会这样?你看:
- 你的模型输入形状是
(None, 120, 160, 3, 3),对应每个样本的形状是(120, 160, 3, 3) - 你准备的
tgt形状是(1, 120, 160, 3, 3),完全符合模型的输入要求 - 但你调用了
tf.transpose(tgt),在不指定维度顺序的情况下,tf.transpose会反转所有维度,把tgt变成了(3, 3, 160, 120, 1),这完全打乱了模型期望的维度顺序,导致卷积层无法正确解析输入。
解决方案
直接移除tf.transpose,用原始的tgt进行预测:
model1.predict(tgt, steps=1)
额外建议
另外,建议你确认一下Conv3D的输入维度顺序是否符合你的数据逻辑:
- Keras中Conv3D默认的数据格式是
channels_last,即输入形状应为(batch_size, dim1, dim2, dim3, channels) - 你的模型定义的
input_shape=(120, 160, 3, 3),意味着你把channels放在了最后一个维度(最后一个3),而前一个3是时间步(你的视频帧序列),这没问题,但要确保你的训练数据和预测数据的维度顺序完全一致,避免后续再出现类似问题。
内容的提问来源于stack exchange,提问作者P RAY
相关产品推荐
相关产品推荐

