У меня такой вопрос: у меня есть, например, векторы элементов изображения Y x 2048, и я хочу агрегировать их по времени и векторы объектов Z x 1024 измерения оптического потока, а также хочу их агрегировать по времени. Так что мне нужно, чтобы над ними был максимальный пул. Предполагается, что две функции, упомянутые в заголовке, выполняют одну и ту же функцию, но я нашел подвох.
keras.layers.pooling.GlobalMaxPooling1D()
просто получает
(1, len(feature_matrix),2048)
как K.Variable
и возвращает агрегированный вектор с .eval()
С другой стороны, tf.nn.max_pool3d()
требует большего количества аргументов.
и чтобы (1 x Z x 1024) Тензор оказался в (1 x 1024) векторе, требуется что-то вроде:
tf.nn.max_pool3d(my_net, ksize =[1, my_net.get_shape()[1] , 1 ,1 ,1] , strides = [1, 1, 1, 1, 1], padding = snt.VALID)
my_net.get_shape()[1]
имеет решающее значение, поскольку на предыдущем слое чем длиннее видео, тем больше значение измерения Z.
Я правильно делаю? Это те же самые вещи? Должен ли я выбрать один над другим? Что является более эффективным в отношении памяти и вычислений?
Спасибо