Я работаю со встроенными функциями в 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.
Первая модификация включала переменную kernelinitializer в конструктор CNN, как показано ниже:
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('Недопустимый аргумент ключевого слова:% s', ключ) TypeError: ('Недопустимый аргумент ключевого слова:% s', 'kernelinitializer')
Есть ли способ исключить мою переменную kernelinitializer из этих kwards? Есть ли способ решить эту проблему?