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

TensorFlow Keras模型训练时形状不兼容错误排查求助

自定义多任务模型训练时形状不兼容问题排查求助

我基于VGG16修改构建了一个同时支持分类与线性回归的多任务模型,并编写了自定义Facetracker Model类用于模型编译和训练。此前已解决call函数报错问题,但训练阶段出现形状不兼容错误:Incompatible shapes: [2,4] vs. [8]。尝试调整输入数据及批量相关参数后仍无法解决,请求协助排查问题。

相关代码

class Facetracker(Model):
#     初始化函数
    def __init__(self,eyetracker,**kwargs):
        super().__init__(**kwargs)
        self.model = eyetracker # 实例化模型

    def compile(self,opt,classlosss,localization_loss,**kwargs):
        super().compile(**kwargs)
        self.classloss = class_loss
        self.localization_loss = regress_loss
        self.opt = optimizer

        # 定义训练步骤
    def train_step(self,batch,**kwargs):
        X,y = batch # 拆分数据

        with tf.GradientTape() as tape:
            classes,coords = self.model(X,training=True)
            batch_classloss = self.classloss(y[0],classes)
            batch_localloss = self.localization_loss(tf.cast(y[1],tf.float32),coords)

            # 计算总损失
            total_loss = batch_localloss+0.5*batch_classloss
            grad = tape.gradient(total_loss,self.model.trainable_variables)
        optimizer.apply_gradients(zip(grad,self.model.trainable_variables))

        return{
            "total_loss":total_loss,
            "class_loss":batch_classloss,
            "localilzation_loss":batch_localloss

        }
    def test_step(self,batch):
        X,y = batch
        classes,coords = self.model(X,training=False)
        batch_classloss = self.classloss(y[0],classes)
        batch_localloss = self.localization_loss(tf.cast(y[1],tf.float32),coords)

        total_loss = batch_localloss+0.5*batch_classloss

        return{
            "total_loss": total_loss,
            "class_loss": batch_classloss,
            "localilzation_loss": batch_localloss
        }
    # def call(self, X, **kwargs):
    #     return self.model(X,**kwargs)
# 用lambda函数替换call函数
lambda self,X,**kwargs: self.model(X,**kwargs)

# 子类化模型
print("Subclassing.....")
model = Facetracker(facetracker)
print("Compiling......")
model.compile(optimizer,classlosss=class_loss,localization_loss=localization_loss)

# 准备日志目录
logdir="logdir"
tensorboard_callbacks = tf.keras.callbacks.TensorBoard(log_dir=logdir)
print("Fitting the model")
hist = model.fit(train.take(80),
                 epochs=16,
                 initial_epoch =8,
                 validation_data=val,
                 validation_steps =8,
                 validation_freq=2,
                 callbacks = [[tensorboard_callbacks]])

报错信息

File "C:\Users\Radhe Krishna\OneDrive\Documents\MarkATT\main.py", line 535, in <module>
    hist = model.fit(train.take(80),
  File "C:\Users\Radhe Krishna\OneDrive\Documents\MarkATT\MarkATT\lib\site-packages\keras\utils\traceback_utils.py", line 67, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "C:\Users\Radhe Krishna\OneDrive\Documents\MarkATT\MarkATT\lib\site-packages\tensorflow\python\eager\execute.py", line 54, in quick_execute
    tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.InvalidArgumentError: Graph execution error:

Detected at node 'gradient_tape/sub_2/BroadcastGradientArgs' defined at (most recent call last):
    File "C:\Users\Radhe Krishna\OneDrive\Documents\MarkATT\main.py", line 535, in <module>
      hist = model.fit(train.take(80),
    File "C:\Users\Radhe Krishna\OneDrive\Documents\MarkATT\MarkATT\lib\site-packages\keras\utils\traceback_utils.py", line 64, in error_handler
      return fn(*args, **kwargs)
    File "C:\Users\Radhe Krishna\OneDrive\Documents\MarkATT\MarkATT\lib\site-packages\keras\engine\training.py", line 1409, in fit
      tmp_logs = self.train_function(iterator)
    File "C:\Users\Radhe Krishna\OneDrive\Documents\MarkATT\MarkATT\lib\site-packages\keras\engine\training.py", line 1051, in train_function
      return step_function(self, iterator)
    File "C:\Users\Radhe Krishna\OneDrive\Documents\MarkATT\MarkATT\lib\site-packages\keras\engine\training.py", line 1040, in step_function
      outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "C:\Users\Radhe Krishna\OneDrive\Documents\MarkATT\MarkATT\lib\site-packages\keras\engine\training.py", line 1030, in run_step
      outputs = model.train_step(data)
    File "C:\Users\Radhe Krishna\OneDrive\Documents\MarkATT\main.py", line 498, in train_step
      grad = tape.gradient(total_loss,self.model.trainable_variables)
Node: 'gradient_tape/sub_2/BroadcastGradientArgs'
Incompatible shapes: [2,4] vs. [8]
         [[{{node gradient_tape/sub_2/BroadcastGradientArgs}}]] [Op:__inference_train_function_22026]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:30:59