#python #tensorflow #machine-learning #keras #neural-network
Вопрос:
Я работаю с последовательностями векторов в качестве входных данных для NN в tensorflow, и я хотел бы выполнить среднее объединение по глубине ввода.
Я попытался использовать следующий лямбда-слой:
depth_pool = keras.layers.Lambda(
lambda X: tf.nn.avg_pool1d(X,
ksize=(1, 1, 3),
strides=(1, 1, 3),
padding="VALID"))
Однако я получаю сообщение об ошибке:
UnimplementedError: Непрост. объединение еще не поддерживается.
Есть ли способ достичь желаемого результата?
Большое вам спасибо за вашу помощь
Ответ №1:
Если ваши входные данные имеют эти размерности: (None, timestamps, features)
вы можете просто изменить глубину с помощью других размерностей, применить стандартное объединение, а затем вернуться к исходным размерностям.
Приведу пример… Если ваша сеть принимает входную форму (None, 20, 99)
, вы можете просто сделать следующее, чтобы получить пул глубины:
inp = Input((20,99))
depth_pool = Permute((2,1))(inp)
depth_pool = AveragePooling1D(3)(depth_pool)
depth_pool = Permute((2,1))(depth_pool)
m = Model(inp, depth_pool)
m.summary()
Резюме:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_4 (InputLayer) [(None, 20, 99)] 0
_________________________________________________________________
permute_4 (Permute) (None, 99, 20) 0
_________________________________________________________________
average_pooling1d_3 (Average (None, 33, 20) 0
_________________________________________________________________
permute_5 (Permute) (None, 20, 33) 0
=================================================================
Вывод имеет форму (None, 20, 33)
Если ваши входные данные имеют эти размерности: (None, features, timestamps)
вы можете просто установить data_format='channels_first'
в своих слоях
inp = Input((20,99))
depth_pool = AveragePooling1D(3, data_format='channels_first')(inp)
m = Model(inp, depth_pool)
m.summary()
Резюме:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_9 (InputLayer) [(None, 20, 99)] 0
_________________________________________________________________
average_pooling1d_7 (Average (None, 20, 33) 0
=================================================================
Вывод имеет форму (None, 20, 33)