首页 > 解决方案 > 从 kwargs 中消除一个论点。那可能吗?

问题描述

我正在使用 Keras 中的内置函数来创建 XCeption 合奏。在我的集成中,每个 Xception 网络都会考虑不同的权重初始化方法。初始化技术如下:

switcher = {
            0: Orthogonal(gain=1.0, seed=None),
            1: lecun_uniform(seed=None),
            2: VarianceScaling(scale=1.0, mode='fan_in', distribution='normal', seed=None),
            3: RandomNormal(mean=0.0, stddev=0.05, seed=None),
            4: RandomUniform(minval=-0.05, maxval=0.05, seed=None),
            5: TruncatedNormal(mean=0.0, stddev=0.05, seed=None),
            6: glorot_normal(seed=None),
            7: glorot_uniform(seed=None),
            8: he_normal(seed=None),
            9: he_uniform(seed=None) 
        }

好的,所以,对于我的集合中的几个 CNN,我实例化 Xception 网络,如下所示。

base_model=xception.Xception(include_top=False, weights=None, kernelinitializer=xception_ensemble.switcher.get(init_var))

要包含 kernelinitializer 参数以初始化 Xception 权重,我必须在我的 python3.6/site-packages/keras_applications/xception.py 文件中进行一些修改。

第一个修改是在 CNN 的构造函数中包含变量 kernelinitializer,如下所示:

def Xception(include_top=True,
             weights='imagenet',
             input_tensor=None,
             input_shape=None,
             pooling=None,
             classes=1000, kernel_initializer="he_normal", **kwargs):

我放“he_normal”只是因为如果没有通知它必须有一个默认值。

然后,下一步是添加 kernel_initializer 值来初始化 Xception CNN 的任何卷积层。例如:

residual = layers.Conv2D(256, (1, 1), strides=(2, 2),
                             padding='same', use_bias=False, kernel_initializer=kernel_initializer)(x)

然而这里有一个问题。代码做了以下事情

backend, layers, models, keras_utils = get_submodules_from_kwargs(kwargs)

因此,该函数将所有参数(包括我的外星人参数)作为输入来构建 CNN 的子模块。但是,我的论点(显然)不被函数识别。因此,会发生以下错误:

文件“venv/lib/python3.6/site-packages/keras_applications/ init .py”,第 20 行,在 get_submodules_from_kwargs 中引发 TypeError('Invalid keyword argument: %s', key) TypeError: ('Invalid keyword argument: %s ', '内核初始化器')

有没有办法从这些 kwards 中消除我的 kernelinitializer 变量?有没有办法解决这个问题?

标签: pythonkeras

解决方案


您可以使用 dict comprehension 来获取没有特定项目的 kwargs 副本:

{key: value for key, value in kwargs.items() if key != 'kernelinitializer'}

推荐阅读