You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

视频分类输入形状适配问题:关键点数据输入报错排查

视频分类中形状不兼容错误的排查方向

我有多个文件夹,每个文件夹包含37张图片,每张图片对应126个关键点。在进行视频分类时,出现报错:ValueError: Shapes (None, 1) and (None, 5) are incompatible,不清楚该如何调整输入形状,希望了解需要排查的方向。输入形状参考显示输入维度为(样本数量, 37, 126)。

模型结构代码如下:

from tensorflow.keras.models import  Sequential
from  tensorflow.keras.layers import LSTM,Dense
from  tensorflow.keras.callbacks import TensorBoard
import  tensorflow as tf
import os

log_dir = os.path.join('logs')
callback = TensorBoard(log_dir=log_dir)

model = Sequential()

model.add(LSTM(64,input_shape=(37,126,),return_sequences=True,activation='relu'))
model.add(LSTM(128,return_sequences=True,activation='relu'))
model.add(LSTM(64,return_sequences=False,activation='relu'))
model.add(Dense(64,activation='relu'))
model.add(Dense(32, activation='relu'))

model.add(Dense(class_label.shape[0],activation='softmax'))

model.summary()

排查方向

  • 核对标签与模型输出的形状匹配度
    报错中(None,1)是标签数据的形状,(None,5)是模型最后一层的输出形状(说明分类类别数为5)。两种调整方式:

    1. 若标签是整数索引,将损失函数改为sparse_categorical_crossentropy,同时确保标签形状为(样本数,),可通过y_train = y_train.squeeze()压缩多余维度;
    2. 若标签用独热编码,需将标签转换为(样本数,5)的形状,配合categorical_crossentropy损失函数。
  • 验证输入数据形状是否符合LSTM要求
    模型定义的LSTM输入形状为(37,126),要求输入数据整体形状为(样本数,37,126),其中37对应时间步(37张图片),126对应每个时间步的特征数(126个关键点)。检查数据预处理环节,若维度顺序错误(比如(样本数,126,37)),可使用tf.transpose(input_data, perm=[0,2,1])调整。

  • 确认分类类别数的正确性
    模型最后一层神经元数量由class_label.shape[0]得到,当前为5。需确认该值与实际分类类别数一致,同时标签数据的类别范围要对应(如0-4)。

  • 检查数据加载时的标签处理逻辑
    若标签被错误处理为二维数组(如[[0],[1],...]),会导致形状为(None,1)。可通过print(y_train.shape)查看标签形状,若确实为二维,用y_train = y_train.flatten()或y_train = y_train.squeeze()转换为一维。

内容的提问来源于stack exchange,提问作者ddaannyyooww

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:57:29