1. 程式人生 > 程式設計 >tensorflow之獲取tensor的shape作為max_pool的ksize例項

tensorflow之獲取tensor的shape作為max_pool的ksize例項

實驗發現,tensorflow的tensor張量的shape不支援直接作為tf.max_pool的引數,比如下面這種情況(一個錯誤的示範):

self.max_pooling1 = tf.nn.max_pool(self.l_6,ksize = [1,tf.shape(self.F1)[0],1,1],strides = [1,padding = 'VALID',name = 'maxpool1')

我在max_pool的過程中想對特徵每一列進行max_pooling,但因為tensor F1張量沒有值,而ksize此處需要一個int型別的常量,所以tf.shape(self.F1)[0]無法作為ksize的引數。

一些人的做法是固定行數,比如pointnet固定為2048個點,但這樣做需要重新取樣,過於麻煩。

而既然tensorflow不提供標準的max_pool層實現,其實可以自己實現每一列取最大值的操作,充當自己的max_pool。如下圖所示:

def max_pooling(self,NC):
    out = tf.reduce_max(NC,reduction_indices=[0])
    return out

利用reduce_max剛好能實現這個操作,其中reduction_indices可以指定取哪一維的最大值。這個函式的詳細功能可以參考官方文件。

這種情況和tf.reshape不同,tf.reshape是可以使用tf.shape(tensor)[i]的,可能兩者對引數的要求不一樣。

以上這篇tensorflow之獲取tensor的shape作為max_pool的ksize例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。