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

如何解决VGG训练中mean_squared_error节点的InvalidArgumentError图执行错误?

问题:Keras VGG训练触发InvalidArgumentError(节点'mean_squared_error/SquaredDifference')

在Google Colab中运行VGG结构的Keras训练代码时,触发InvalidArgumentError图执行错误,错误检测节点为'mean_squared_error/SquaredDifference',不确定该错误由数据集、代码还是依赖问题导致,以下是完整模型代码及报错信息:

模型代码

# 定义模型
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, BatchNormalization
from keras.layers import Activation, Flatten, Dense
from keras.optimizers import Adam
from keras.losses import mean_absolute_error
model = Sequential()

# 添加卷积层
model.add(Conv2D(32, (3, 3), padding='same', activation='relu', input_shape=(height, width, 3)))
model.add(Conv2D(32, (3, 3), padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))

# 添加全连接层
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(3))

# 编译模型
#opt = Adam(learning_rate=0.001, decay=0.001/(30*0.5))
# 训练模型
model.compile(optimizer='adam', loss='mse', metrics=["accuracy"])
callbacks = [
    keras.callbacks.EarlyStopping(patience=5, monitor="val_loss", mode="min", restore_best_weights=True)]
    
model.fit(x_train, y_train, epochs=30, batch_size=32, validation_data=(x_val, y_val), callbacks=callbacks)

报错信息

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-3-6eba740a4ec6> in <cell line: 132>()
    130     keras.callbacks.EarlyStopping(patience=5, monitor="val_loss", mode="min", restore_best_weights=True)]
    131 
---> 132 model.fit(x_train, y_train, epochs=30, batch_size=32, validation_data=(x_val, y_val), callbacks=callbacks)
    133 
    134 # Implementar el modelo en una aplicación o programa

1 frames
/usr/local/lib/python3.9/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
     50   try:
     51     ctx.ensure_initialized()
---> 52     tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
     53                                         inputs, attrs, num_outputs)
     54   except core._NotOkStatusException as e:

InvalidArgumentError: Graph execution error:

Detected at node 'mean_squared_error/SquaredDifference' 

解决方案

  • 检查标签维度与模型输出匹配:模型最后一层是Dense(3),输出形状为(batch_size, 3),因此y_train和y_val必须是对应形状的张量。如果标签是一维数组,需用y_train = y_train.reshape(-1, 3)调整维度,确保与模型输出维度一致。

  • 移除不兼容的评估指标:当前使用mse(均方误差,回归任务损失),但metrics设置了"accuracy"——这是分类任务的指标,回归任务中计算精度会导致逻辑冲突,进而触发计算错误。建议替换为回归任务适配的指标,比如metrics=['mae'](平均绝对误差)。

  • 检查数据类型一致性:确保训练数据x_train、y_train和验证数据x_val、y_val的类型均为float32(Keras默认浮点类型),若存在整数或其他类型,用x_train = x_train.astype('float32')统一转换。

  • 清理数据中的异常值:数据集中的NaN、无穷大值会导致平方差计算失败,可通过以下代码检查并清理:

    import numpy as np
    # 检查并清理训练集
    x_train = x_train[~np.isnan(x_train).any(axis=(1,2,3))]
    y_train = y_train[~np.isnan(y_train).any(axis=1)]
    x_train = x_train[~np.isinf(x_train).any(axis=(1,2,3))]
    y_train = y_train[~np.isinf(y_train).any(axis=1)]
    # 验证集同理
    
  • 确认输入尺寸变量已定义:模型输入依赖height和width变量,需确保这两个变量已被正确赋值,且与x_train、x_val的图像尺寸完全匹配(比如x_train.shape[1:]应为(height, width, 3))。

内容的提问来源于stack exchange,提问作者Victor Comendador Checa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:19:56