В настоящее время я создаю собственный слой keras без обучаемых параметров.
Входные данные этого слоя имеют форму (размер пакета, длина последовательности, характеристики). По сути, это то же самое, что и вход в уровень глобального максимального пула 1D.
Что я пытаюсь сделать с этим настраиваемым слоем, так это выполнить одномерное глобальное максимальное объединение без уменьшения размерности. (Просто хочу обнулить записи, не являющиеся максимальными, для каждой функции). Вдобавок к этому я хочу, чтобы на выходе было одно дополнительное измерение, чтобы его можно было затем передать на сверточный 2D-слой.
Таким образом, выходные данные этого уровня должны иметь форму (размер пакета, длина последовательности, функции, 1). При этом 1D глобальный максимальный пул был выполнен путем обнуления всего, что не является максимальным.
Вот скелет слоя
class GlobalMaxPoolZeroOutNonMax(Layer):
def __init__(self, **kwargs):
super(GlobalMaxPoolZeroOutNonMax, self).__init__(**kwargs)
self.input_spec = InputSpec(ndim=3)
self.data_format = K.normalize_data_format('channels_last')
def compute_output_shape(self, input_shape):
return (input_shape[0], input_shape[1], input_shape[2], 1)
def call(self, inputs):
# THIS IS WHERE I NEED HELP to zero out the non max and add a dimension
raise NotImplemented
def get_config(self):
config = {'data_format': self.data_format}
base_config = super(GlobalMaxPoolZeroOutNonMax, self).get_config()
return dict(list(base_config.items()) + list(config.items()))
Спасибо за уделенное время!