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

Keras报错:No gradients provided for any variable 问题求助

Fixing the "No gradients provided" Error in Your CNN Training

Let's break down the issues here step by step—your gradient error is rooted in two key oversights that are easy to fix:

1. Missing Training/Validation Labels in model.fit()

The most critical problem is that you're not passing training or validation labels to your model during training. Keras needs labels to calculate loss, and without loss, there's no way to compute gradients for backpropagation. That's exactly why you're seeing the "No gradients provided" message.

Fix the fit() Call

You need to pass both features and labels for training, and your validation data should be a tuple of (test features, test labels):

# First, make sure you've split your labels into train/test sets (match X_train/X_test)
from sklearn.model_selection import train_test_split
X_train, X_test, labels_train, labels_test = train_test_split(X, labels, test_size=0.2, random_state=42)

# Then update the fit call:
history = model.fit(
    X_train, labels_train,  # Add training labels here
    epochs=50,
    validation_data=(X_test, labels_test),  # Validation data is (features, labels) tuple
    shuffle=True,
    verbose=1,
    callbacks=callbacks
)

2. Mismatch Between Label Dimensions and Output Layer

Your model's output layer is set to 4 classes (Dense(4, activation='softmax')), but your one-hot encoded labels are only 2-dimensional right now. When you run to_categorical(labels) without specifying num_classes, Keras infers the number of classes from the unique values in your labels. Since all your labels are 1, it assumes 2 classes (0 and 1), producing a shape of (5000, 2)—which doesn't match your output layer's 4-dimensional output.

Fix the One-Hot Encoding

Explicitly set num_classes=4 to ensure your labels match the output layer's dimension:

labels = to_categorical(labels, num_classes=4)

This will encode your all-1 labels as [0, 1, 0, 0], aligning perfectly with your 4-class output.

Quick Sanity Checks to Avoid Future Issues

  • Verify X_train.shape and X_test.shape are (num_samples, 29, 29, 1) to match your model's input shape.
  • Confirm labels_train.shape and labels_test.shape are (num_samples, 4) to match the output layer.
  • Double-check that your training/validation splits align (same number of samples in X_train and labels_train, etc.).

With these fixes applied, your model should be able to compute loss and gradients correctly, and training should run without errors.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:32:49