keras.layers.pooling.GlobalMaxPooling1D () против tf.nn.max_pool3d () - PullRequest
0 голосов
/ 07 ноября 2018

У меня такой вопрос: у меня есть, например, векторы элементов изображения 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.

Я правильно делаю? Это те же самые вещи? Должен ли я выбрать один над другим? Что является более эффективным в отношении памяти и вычислений? Спасибо

...