使用InceptionV4时Convolution2D报subsample与strides错误求助
解决InceptionV4代码运行的Keras版本兼容性错误
错误根源
你用的InceptionV4代码是基于旧版Keras(1.x)写的,但当前运行环境是Keras 2.x,两者卷积层API参数差异很大:
- 旧版
Convolution2D在新版中更名为Conv2D - 旧版
subsample参数对应新版的strides - 旧版
border_mode参数对应新版的padding - 卷积核尺寸参数从分开的
nb_row, nb_col改为元组形式的kernel_size=(行, 列)
具体修改方案
针对你的conv_block函数,需要做3处关键调整:
- 替换卷积层类名,用
Conv2D替代Convolution2D(记得同步修改代码顶部的导入语句) - 调整参数传递结构,将原位置参数改为关键字参数,避免参数冲突
- 同步替换旧版参数名为新版对应名称
修改后的conv_block函数代码:
def conv_block(x, nb_filter, nb_row, nb_col, padding='same', strides=(1, 1), bias=False): x = Conv2D(filters=nb_filter, kernel_size=(nb_row, nb_col), strides=strides, padding=padding, use_bias=bias)(x)
额外说明
你之前只替换subsample为strides却报错,是因为旧版的nb_row, nb_col被新版Keras误识别为strides的位置参数,导致重复赋值。另外旧版的bias参数在新版中对应use_bias,必须一并替换才能正常运行。
内容的提问来源于stack exchange,提问作者Syuuuu
相关产品推荐
相关产品推荐

