2017-05-05 152 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'部分。 –