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

图像分类SMOTE上采样问题解析及临时解决方法

图像分类中SMOTE上采样的问题

背景

我拥有一个含12类的图像数据集,为对比不同图像分类上采样技术,计划使用SMOTE对严重不平衡类别进行上采样。

训练集定义

我按如下方式定义训练集:

img_height = 256
img_width = 256
batch_size = 32
train_ds = tf.keras.utils.image_dataset_from_directory(
  image_directory,
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

运行后输出:

Found 11730 files belonging to 12 classes. Using 9384 files for training.

数据提取与SMOTE执行问题

SMOTE需要明确的x_train和y_train,我尝试通过以下代码获取:

for images, labels in train_ds:  # only take first element of dataset
    numpy_images = images.numpy()
    numpy_labels = labels.numpy()
    numpy_images.shape

返回的形状为(8,256,256,3),不符合预期的(9384,256,256,3)。

随后我将numpy数组重塑为2D以传入SMOTE:

x_train = numpy_images.reshape(8, 256 * 256 * 3)
x_train.shape

返回形状为(8, 196608)

执行SMOTE代码:

from imblearn.over_sampling import SMOTE
sm = SMOTE(random_state=42)
X_smote, y_smote = SMOTE(k_neighbors=2).fit_resample(x_train, numpy_labels)

最终返回错误:n_samples = 1, n_neighbors = 2

疑问

  • 如何解决上述问题?
  • 为什么numpy数组的形状是(8,256,256,3)而非(9384,256,256,3)?

临时解决方法

我目前的临时解决方法是:在文件资源管理器中手动复制指定数量的欠采样类别图像。


内容的提问来源于stack exchange,提问作者James Anderson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:01:44