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

免费版Google Colab运行SMOTE过采样时RAM崩溃的原因是什么?

崩溃原因

你当前场景触发RAM崩溃的核心原因是原始图像维度太高:单张1761763的图像展平后有92928维特征,SMOTE基于K近邻实现,处理高维数据时内存开销会随特征维度、样本量呈非线性增长,加上过采样后样本量会数倍提升,直接超出Colab免费运行时的RAM上限。另外你的前置代码存在路径错误:你把数据集复制到了./dataset2/,但后续读取数据的路径设置为WORK_DIR = './dataset',可能意外加载了冗余的旧数据,进一步加剧内存占用。

可行解决方案

  • 方案1:优先用类权重替代过采样(无额外内存开销,适配图像场景)
    不需要修改现有数据加载逻辑,训练时直接传入类别平衡权重即可抵消类别不平衡的影响,代码示例:
    from sklearn.utils.class_weight import compute_class_weight
    import numpy as np
    import gc
    
    # 修正路径错误
    WORK_DIR = './dataset2'
    # 重新加载数据后回收冗余内存
    del train_data_gen
    gc.collect()
    
    # 计算平衡类权重
    train_labels_cls = train_labels.argmax(axis=1)
    class_weights = compute_class_weight('balanced', classes=np.unique(train_labels_cls), y=train_labels_cls)
    class_weight_dict = {i: class_weights[i] for i in range(len(class_weights))}
    
    后续模型训练时在model.fit()中添加参数class_weight=class_weight_dict即可。
  • 方案2:降维后再执行SMOTE(必须用过采样时的最优选择)
    用预训练模型提取低维图像特征,把9万维的原始像素特征降到2048维以内再做过采样,内存开销直接降低97%以上,代码示例:
    from tensorflow.keras.applications import InceptionV3
    
    # 加载预训练特征提取器,不包含顶部分类层
    feature_extractor = InceptionV3(input_shape=(IMG_SIZE, IMG_SIZE, 3), include_top=False, weights='imagenet', pooling='avg')
    feature_extractor.trainable = False
    
    # 批量提取低维特征
    train_features = feature_extractor.predict(train_data, batch_size=32)
    # 回收原始图像的内存占用
    del train_data
    gc.collect()
    
    # 对低维特征执行SMOTE,调小k值进一步降低内存
    sm = SMOTE(random_state=42, k_neighbors=3)
    train_features_resampled, train_labels_resampled = sm.fit_resample(train_features, train_labels)
    
    # 后续直接用降维后的过采样特征训练分类层即可,无需还原为图像
    
  • 方案3:升级Colab运行时配置
    如果必须在原始像素维度执行SMOTE,可切换到高RAM运行时:点击顶部菜单栏「代码执行程序」→「更改运行时类型」→「运行时规格」选择「高RAM」,免费版高RAM运行时提供25G内存,可覆盖当前场景的内存需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:06:03