2017-07-14 101 views
1

我想在Keras中实现一个卷积自动编码器,像下面这样的图层。我的数据有1108行和29430列。Keras - 嵌入层的输入形状

def build(features, embedding_dims, maxlen, filters, kernel_size): 
    m = keras.models.Sequential() 

    m.add(Embedding(features, embedding_dims, input_length=maxlen)) 
    m.add(Dropout(0.2)) 

    m.add(Conv1D(filters, kernel_size, padding='valid', activation='relu', strides=1, input_shape=(len(xx), features))) 
    m.add(MaxPooling1D()) 

    m.add(Conv1D(filters, kernel_size, padding='valid', activation='relu', strides=1, input_shape=(None, len(xx), features))) 
    m.add(UpSampling1D()) 

    m.summary() 
    m.compile(optimizer="adagrad", loss='mse', metrics=['accuracy']) 
    return m 

early = keras.callbacks.EarlyStopping(
     monitor='val_loss', patience=10, verbose=1, mode='min') 

model = build(len(xx[0]), 60, 11900, 70, 3) 

model.fit(xx, xx, batch_size=4000, nb_epoch=10000,validation_split=0.1, 
    callbacks=[early]) 

但是,我收到一个错误,指出ValueError: Error when checking input: expected embedding_1_input to have shape (None, 11900) but got array with shape (1108, 29430)。为什么第一层期望(无,maxlen)而不是数据的大小?

我还会包括我的模型摘要:

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
embedding_1 (Embedding)  (None, 11900, 60)   714000  
_________________________________________________________________ 
dropout_1 (Dropout)   (None, 11900, 60)   0   
_________________________________________________________________ 
conv1d_1 (Conv1D)   (None, 11898, 70)   12670  
_________________________________________________________________ 
max_pooling1d_1 (MaxPooling1 (None, 5949, 70)   0   
_________________________________________________________________ 
conv1d_2 (Conv1D)   (None, 5947, 70)   14770  
_________________________________________________________________ 
up_sampling1d_1 (UpSampling1 (None, 11894, 70)   0   
================================================================= 
Total params: 741,440 
Trainable params: 741,440 
Non-trainable params: 0 
_________________________________________________________________ 

回答

1

我通过添加input_shape字段到埋入层固定此特定错误如下:

m.add(Embedding(features, embedding_dims, input_length=maxlen, input_shape=(features,))) 

features是特征(29430)的数目。

0

你输入到嵌入层必须是一维的,所以你需要将数据重新塑造成这种格式(正)。无论你传入input_length什么都需要匹配n的大小。