【问题标题】:Keras embedding layer causing dimensionality problemsKeras 嵌入层导致维度问题
【发布时间】:2019-05-17 14:14:36
【问题描述】:

我目前正在尝试在我的序列到序列自动编码器中包含一个嵌入层,使用 keras 功能 API 构建。

模型代码如下所示:

#Encoder inputs
encoder_inputs = Input(shape=(None,))

#Embedding
embedding_layer = Embedding(input_dim=n_tokens, output_dim=2)
encoder_embedded = embedding_layer(encoder_inputs)

#Encoder LSTM
encoder_outputs, state_h, state_c = LSTM(n_hidden, return_state=True)(encoder_embedded)
lstm_states = [state_h, state_c]


#Decoder Inputs
decoder_inputs = Input(shape=(None,)) 

#Embedding
decoder_embedded = embedding_layer(decoder_inputs)

#Decoder LSTM
decoder_lstm = LSTM(n_hidden, return_sequences=True, return_state=True, )
decoder_outputs, _, _ = decoder_lstm(decoder_embedded, initial_state=lstm_states)


#Dense + Time
decoder_dense = TimeDistributed(Dense(n_tokens, activation='softmax'), input_shape=(None, None, 256))
#decoder_dense = Dense(n_tokens, activation='softmax', )
decoder_outputs = decoder_dense(decoder_outputs)

model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])

模型是这样训练的:

model.fit([X, y], X, epochs=n_epoch, batch_size=n_batch)

X 和 y 的形状为 (n_samples, n_seq_len)

模型的编译完美无缺,而在尝试训练时,我总是会得到:

ValueError:检查目标时出错:预期 time_distributed_1 到 有 3 个维度,但得到了形状为 (n_samples, n_seq_len) 的数组

有人有想法吗?

Keras 版本是 2.2.4
TensorFlow 后端版本 1.12.0

【问题讨论】:

    标签: python tensorflow keras autoencoder sequence-to-sequence


    【解决方案1】:

    在这样的自动编码器中,由于最后一层是 softmax 分类器,因此您需要对标签进行一次热编码:

    from keras.utils import to_categorical
    
    one_hot_X = to_categorical(X)
    
    model.fit([X, y], one_hot_X, ...)
    

    附带说明,由于the Dense layer is applied on the last axis,因此无需将Dense 层包裹在TimeDistributed 层中。

    【讨论】:

    • 今天您好,感谢您的回答,我理解您对 one-hot 编码的需求。问题是我有很多不同的标签,并尽可能避免一次性编码。您现在知道如何更改模型的布局,以便预测更小的(嵌入?)向量吗?
    • @BorisMirheiss 如果您的问题是您不想预先对所有标签进行一次性编码(由于 RAM 限制),那么您可以编写一个生成器,在飞。
    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2019-09-07
    • 2021-09-02
    • 2020-06-20
    • 1970-01-01
    相关资源
    最近更新 更多