2017-06-15 25 views
1

我在tensorflow神經網絡的工作池的形狀,我有一個名爲CNN_model函數作爲輸入三個佔位符:利用預留作爲tensorflow

X = tf.placeholder(tf.float32, [1, None, 13]) 
Y = tf.placeholder(tf.int32, [None]) 

pool_shape = tf.placeholder(tf.int32, [1]) 

我運行具有以下值的會話:

feed_dict={X: x, Y: y, MFCCS: x.shape[0]} 

在會話中,我想要使用max-pooling層它是由佔位這樣定義形狀:

pool_window_size = [pool_shape, pool_shape] 

pool = tf.layers.max_pooling2d(
     inputs = conv, 
     pool_size = pool_window_size, 
     strides = pool_window_size, 
     name = "pool" 
) 

但我得到的錯誤:

類型錯誤:int()函數的參數必須是一個字符串,一類字節對象或數量,而不是'張量'

我假設是因爲在那個時候「pool_shape」是一個張量而不僅僅是一個整數,有沒有辦法獲得張量在這個點上的任何值?

+0

如果我可以問,你爲什麼要改變池內核的大小?你能想出一種方法來實現你的任務而不做它嗎? – hars

+0

我想使用動態池,因爲我有可變大小的輸入示例,所以我希望池層根據示例的形狀生成固定大小的輸出。我一直在使用零填充來使所有示例具有相同的形狀,但我擔心準確性會更差。 – Aaronrobeson

回答

1

您可以與您當前的會話sess,並需要pool_shape相關輸入嘗試在feed_dict作爲

dimension = pool_shape.eval(sess, feed_dict = {inputs})[0] 
pool_window_size = [dimension , dimension] 

希望這有助於!

編輯 我認爲這是目前您的代碼:

pool_shape = tf.placeholder(tf.int32, [1]) 
pool_window_size = [pool_shape, pool_shape] 

#... 

for i in range(iterations): 
    sess.run(Optimizer, feed_dict = {X:x, Y:y, pool_shape:value} 
    #value is the length/width you want to set for the pool_window_size 

相反,我認爲這可能工作。

pool_window_size = [pool_shape, pool_shape] 

#... 

for i in range(iterations): 
    pool_shape = value 
    sess.run(Optimizer, feed_dict = {X:x, Y:y} 

我不太確定maxpooling層是否會更新pool_size,你可以試着告訴我。

+0

嗨喬希,謝謝你的回答。不幸的是,我仍然沒有任何運氣在培訓期間從張量中獲得價值。當我想獲得價值時,我已經在運行一個會話: – Aaronrobeson

+0

嗨喬希,謝謝你的回答。不幸的是,我仍然沒有任何運氣在培訓期間從張量中獲得價值。當我想獲得值時,我已經在運行一個會話:'sess.run(train_op,feed_dict = {X:x,Y:y,MFCCS:x.shape [1]})'train_op然後調用我的函數在那裏我想獲得我傳遞的值爲'x.shape [1]',它具有變量名'pool_shape',但試圖運行另一個會話以得到它的值'print(input_mfcc_count.eval(feed_dict = {input_mfcc_count: input_mfcc_count}))'它說我不能傳遞張量「input_mfcc_count」到feed_dict。 – Aaronrobeson

+0

如果假設你在你的代碼中寫了'print(input_mfcc_count.eval(feed_dict = {input_mfcc_count:input_mfcc_count}))',那麼這可能是你理解的問題。爲了獲得'pool_window_size'的長度/寬度,它從變量'pool_shape'確定它的值。您可能必須觀察獲取'pool_window_size'是否也取決於其他值,方法是觀察它與層次結構中較高變量的連接,直到佔位符輸入級別爲止。在這種情況下,您的'feed_dict'應該是'feed_dict = {pool_shape:value}',其中'value'是長度/寬度 –