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
相关产品推荐
相关产品推荐

