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

UpSampling2D指定interpolation参数触发TypeError错误求助

问题根源

你遇到的这个错误是因为当前使用的TensorFlow/Keras版本里,UpSampling2D层并不支持interpolation参数——这个参数是在较新的tf.keras版本(大致从TensorFlow 2.0开始)才被引入的。从错误栈能看到,你用的是Python 3.6+Keras旧接口,此时UpSampling2D的初始化只接受size和data_format两个关键字参数,传入未定义的interpolation自然会触发TypeError。而默认的最近邻插值能正常运行,是因为老版本的UpSampling2D本身就只实现了这种插值方式,不需要额外指定参数。

解决方法

根据你的环境限制,有两种可行的方案:

方案1:升级TensorFlow版本

如果项目允许升级依赖,直接把TensorFlow升级到2.0及以上的版本,这样UpSampling2D层就会支持interpolation参数,原有代码可以直接运行。执行以下命令升级:

pip install --upgrade tensorflow

方案2:在旧版本环境中手动实现双线性插值上采样

如果无法升级环境,可以用Lambda层结合TensorFlow原生的图像resize函数来替代UpSampling2D,实现双线性插值。修改你的代码如下:

def build_model(self):
    chnl4_input = Input(shape=(368, 256, 4))
    chnl3_input = Input(shape=(736, 512, 3))
    conv1 = Conv2D(26, self.kernel_size, activation='relu', padding='same')(chnl4_input)
    conv2 = Conv2D(26, self.kernel_size, strides=(2, 2), activation='relu', padding='same')(conv1)
    conv5 = Conv2D(64, self.kernel_size, activation='relu', padding='same')(conv2)
    conv6 = Conv2D(64, self.kernel_size, activation='relu', padding='same')(conv5)
    
    # 替换原来的UpSampling2D为Lambda层实现双线性插值
    up_sampled_conv6 = Lambda(
        lambda x: tf.image.resize(
            x, 
            size=(x.shape[1] * 2, x.shape[2] * 2),  # 对应原UpSampling2D的size=(2,2)
            method='bilinear'
        )
    )(conv6)
    
    up1 = concatenate([up_sampled_conv6, conv1], axis=-1)
    # 后续层代码省略

这里利用tf.image.resize直接指定双线性插值方法,确保上采样后的特征图尺寸和conv1完全匹配,完美替代原有的UpSampling2D逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:15:56