TensorFlow训练数据集报错InvalidArgumentError:图执行错误排查
TensorFlow训练时InvalidArgumentError问题排查与解决
问题场景
以下是搭建的CNN模型代码:
classifier = tf.keras.models.Sequential() classifier.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, padding="same", activation="relu", input_shape=[128, 128, 1])) classifier.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2, padding='valid')) classifier.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, padding="same", activation="relu")) classifier.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2, padding='valid')) classifier.add(tf.keras.layers.Flatten()) classifier.add(tf.keras.layers.Dense(units=128, activation='relu')) classifier.add(tf.keras.layers.Dropout(0.40)) classifier.add(tf.keras.layers.Dense(units=96, activation='relu')) classifier.add(tf.keras.layers.Dropout(0.40)) classifier.add(tf.keras.layers.Dense(units=64, activation='relu')) classifier.add(tf.keras.layers.Dense(units=32, activation='softmax')) # softmax for more than 2 classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy']) classifier.summary()
执行训练代码时:
classifier.fit(training_set, epochs = 5, validation_data = test_set)
无论是训练5轮还是20轮,均抛出InvalidArgumentError: Graph execution error: in training dataset错误。
排查与解决步骤
核对输入数据与模型输入维度
模型定义的input_shape=[128,128,1]对应128x128的单通道灰度图。需确认:- 数据集加载时是否指定了正确的尺寸(如
image_size=(128,128))和色彩模式(如color_mode="grayscale") - 自定义数据集的每个样本shape是否严格为
(128,128,1),避免出现RGB图(shape为(128,128,3))或尺寸不符的情况
- 数据集加载时是否指定了正确的尺寸(如
匹配标签格式与损失函数
模型输出用softmax,损失为categorical_crossentropy,要求标签必须是独热编码格式:- 若标签是整数类别,要么将损失函数改为
sparse_categorical_crossentropy,要么用tf.keras.utils.to_categorical()将整数标签转换为独热编码 - 确认标签维度与输出层
units=32一致,即每个标签为长度32的向量
- 若标签是整数类别,要么将损失函数改为
检查数据集完整性
报错指向训练数据集,大概率存在损坏的样本:- 遍历数据集,通过try-except捕获加载失败的样本并移除
- 用
tf.data.experimental.cardinality(training_set)查看数据集规模,验证是否与预期一致,排除加载异常
验证TensorFlow版本兼容性
部分旧版本TensorFlow的API兼容性问题可能引发图执行错误,建议升级到稳定版本(如TensorFlow 2.15及以上),或回退到与代码兼容的版本
内容的提问来源于stack exchange,提问作者Avijit Chowdhury
相关产品推荐
相关产品推荐

