2017-05-05 163 views
2

如何可以重塑從形狀(1,1,10)Keras張量來塑造(10),而無需指定初始輸入形狀? 使用平鋪()(作爲一個命令)給出重塑Keras張量

<tf.Tensor 'flatten_11/Reshape:0' shape=(?, ?) dtype=float32> 

作爲輸出 並給出了一個錯誤,而在模型中使用它

model = Sequential() 
    model.add(Convolution1D(filters=self.nb_filters, 
          kernel_size=self.n_gram, 
          padding='valid', 
          activation='relu', 
          input_shape=(None,3*self.vecsize))) 
    model.add(MaxPooling1D(pool_size=3*self.vecsize-self.n_gram+1)) 
    model.add(Flatten()) 
    model.add(Dense(num_categories, activation='softmax')) 

它說: 輸入到形狀「 「Flatten」沒有完全定義(got(None,10)。確保將完整的「input_shape」或「batch_input_shape」參數傳遞給模型中的第一層。

Init IAL輸入形狀爲1×任意維* vecsize,我強烈不希望事先指定的任意尺寸。

使用平鋪((1,1,10)),而不是僅僅拼合()也產生一個錯誤:

類型錯誤:__init __()需要1個位置參數,但2分別給予

所以我應該怎麼做才能使它工作?

+0

給出的消息,這聽起來你的輸出'(無,10)'已經正是你所需要的'Dense'形狀。似乎沒有重塑是必要的。 –

回答

1

在給予第一層的input_shape,你不能添加None部分。這是保留到批量大小,並將在訓練或預測時自動推斷。

所以,定義,當你第一次Convolution1D,你input_shape應該只是input_shape = (3*self.vecsize,1),如果你使用的通道過去,或者(1,3*self.vecsize)如果你第一次使用渠道。

+0

雖然其添加到模型中,而不是展平,它拋出 類型錯誤:int()函數的參數必須是一個字符串,一類字節對象,數字,而不是「NoneType」 –

+0

啊,現在我明白了錯。該'input_shape'傳遞給第一層不應該考慮'None'部分。 –