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

CNN图像分类训练报错‘boundary mode not supported’求助

解决RuntimeError: boundary mode not supported问题

问题背景

跟着教程做图像分类,用CNN构建了如下模型:

model=tf.keras.models.Sequential([
    #first layer an input layer a shape of 100*150 RGP array of pictures 
    # 2D convutional layer with 32 nodes 3*3 filter
    tf.keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=(100,150,3)),
    #2d maxpooling with size of 2*2
    tf.keras.layers.MaxPooling2D(2,2),
    
    #second layer
    tf.keras.layers.Conv2D(64,(3,3),activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    
    #third layer 
    tf.keras.layers.Conv2D(128,(3,3),activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    
    #forth layer 
    tf.keras.layers.Conv2D(256,(3,3),activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    
    #flatten layer 
    tf.keras.layers.Flatten(),
    
    #dense layer 
    tf.keras.layers.Dense(512,activation='relu'),
    tf.keras.layers.Dense(3,activation='softmax')
])
model.compile(loss='categorical_crossentropy',optimizer=tf.optimizers.Adam(),
              metrics=['accuracy'])

运行训练代码时触发错误:

history=model.fit(train_gen,steps_per_epoch=25,epochs=20,
                  validation_data=validation_gen,validation_steps=5,verbose=2,
                  callbacks=[my_callback()]
)

报错回溯:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
c:\Users\rabee\OneDrive\Desktop\rps-final-dataset\rbs_classification.ipynb Cell 20 in <cell line: 1>()
----> 1 model.fit(train_gen,steps_per_epoch=25,epochs=20,
      2                   validation_data=validation_gen,validation_steps=5,verbose=2,
      3                   callbacks=[my_callback()]
      4     
      5 )

File c:\Users\rabee\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\utils\traceback_utils.py:67, in filter_traceback.<locals>.error_handler(*args, **kwargs)
     65 except Exception as e:  # pylint: disable=broad-except
     66   filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67   raise e.with_traceback(filtered_tb) from None
     68 finally:
     69   del filtered_tb

File c:\Users\rabee\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\ndimage\_interpolation.py:574, in affine_transform(input, matrix, offset, output_shape, output, order, mode, cval, prefilter)
    572     npad = 0
    573     filtered = input
--> 574 mode = _ni_support._extend_mode_to_code(mode)
    575 matrix = numpy.asarray(matrix, dtype=numpy.float64)
    576 if matrix.ndim not in [1, 2] or matrix.shape[0] < 1:

File c:\Users\rabee\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\ndimage\_ni_support.py:54, in _extend_mode_to_code(mode)
     52     return 6
     53 else:
---> 54     raise RuntimeError('boundary mode not supported')

RuntimeError: boundary mode not supported

错误原因

这个错误根源在图像生成器的预处理参数,具体是scipy的ndimage模块不识别你设置的边界填充模式。比如用ImageDataGenerator时fill_mode设了scipy不支持的值,或者自定义生成器里调用scipy图像函数时传了无效的mode参数。

解决方法

  • 检查ImageDataGenerator的fill_mode参数
    确保fill_mode用scipy支持的取值:'nearest'、'reflect'、'constant'、'wrap'。比如把生成器改成这样:
    from tensorflow.keras.preprocessing.image import ImageDataGenerator
    
    # 训练集生成器
    train_gen = ImageDataGenerator(
        rescale=1./255,
        fill_mode='nearest'  # 替换成支持的模式,别用'mirror'这类scipy不认的
    ).flow_from_directory(
        # 你的路径和其他参数
    )
    
    # 验证集同理
    validation_gen = ImageDataGenerator(
        rescale=1./255,
        fill_mode='nearest'
    ).flow_from_directory(
        # 你的路径和其他参数
    )
    
  • 排查自定义数据生成器
    如果是自己写的生成器,在做图像变换(缩放、旋转等)调用scipy函数时,确保mode参数是上述支持的值,别传拼写错误或不兼容的字符串。
  • 升级scipy版本
    版本不兼容也可能导致这个问题,执行命令升级到最新稳定版:
    pip install --upgrade scipy
    
  • 检查自定义回调函数
    你的my_callback()如果涉及图像处理逻辑,也要排查里面有没有用到不支持的边界模式参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:54:18