2017-04-11 52 views
0

我建立我自己的CNN
卷積層和完全連接層 之間,我需要知道卷積層的輸出的大小,即有沒有辦法自動獲取特徵映射的形狀並用它在Tensorflow中構建圖形?

width_feature map * height_feature map * number_feature map

這樣我就可以知道加權這之間的形狀兩層,即,

[number_neuron_output of convolution layer , number_neuron_1st fully connect layer].

我想要做的是自動獲取[width_feature地圖,height_feature,地圖* number_feature圖] ,因此可以用它來建立convolutoin層之間的連接和完全連接層

我試着像

def add_convtofully_layer(self,size_out,data_in): 
     shape_in=tf.shape(data_in)#[batch,H,W,C] 
     data_re=tf.reshape(data_in,[-1,shape_in[1]*shape_in[2]*shape_in[3]]) 
     W=self.weight_NN(shape_in[1]*shape_in[2]*shape_in[3],size_out) 
     B=self.bias_NN(size_out) 
     data_drop=tf.nn.dropout(data_re,self.drop) 
     result=tf.nn.relu(tf.matmul(data_drop,W)+B) 
     return result 

def weight_NN(self,w_in,w_out): 
    W=tf.Variable(tf.truncated_normal([w_in,w_out],stddev=0.1),name='weight') 
    return W 


def bias_NN(self,out): 
    B=tf.Variable(tf.constant(0.0,dtype=tf.float32,shape=[out]),name='bias') 
    return B 

但只得到了消息

ValueError: initial_value must have a shape specified: Tensor("Fully_connect_layer1/truncated_normal:0", shape=(?, 150), dtype=float32)

有沒有辦法使用Tensorflow做到這一點的方法嗎?或者唯一的方法是我需要先自己計算一下?

謝謝!

回答

0

它看起來像您的輸入仍然有一個變量批量維度。 (shape=(?, 150)中的?告訴你這個,因爲?代表可變的大小)。不,你不能初始化變量大小的變量,因爲tensorflow不能正確地分配內存。

雖然您在忽略shape_in的第一個值時似乎剝離了批量維度,但有兩種可能性:第一種是您剛剛通過的size_out參數。另一個是你不小心混淆了shape_in中的尺寸,並且實際上並沒有解決問題。

我的建議是在調試器中運行代碼 - 雖然不能跟蹤符號庫中的值(如張量流),但您可以輕鬆看到不同變量的形狀。

相關問題