Keras模型中的重塑编码器解码器

got*_*sth 6 python keras

我有一个简单的机器翻译模型,可以将英语句子转换为法语句子.我想首先使用英文句子维度传递模型编码器.在被解码器翻译后,模型输出具有法语句子维度.这里的问题是英语句子,填充后法语句子的长度不同.如何在我的编码器和解码器之间进行重塑?

这是我的代码:

def encdec_model(input_shape, output_sequence_length, english_vocab_size, french_vocab_size):

    learning_rate = 1e-3

    input_seq = Input(input_shape[1:])
    encoder = GRU(64, return_sequences=True)(input_seq)
    decoder = GRU(64, return_sequences=True)(encoder)
    logits = TimeDistributed(Dense(french_vocab_size))(decoder)
    model = Model(input_seq, Activation('softmax')(logits))

    model.compile(loss=sparse_categorical_crossentropy,
                optimizer=Adam(learning_rate),
                metrics=['accuracy'])    

return model
Run Code Online (Sandbox Code Playgroud)

结果模型参数如下所示:

Layer (type)                 Output Shape              Param #   
_________________________________________________________________
input_13 (InputLayer)        (None, 15, 1)             0         
_________________________________________________________________
gru_16 (GRU)                 (None, 15, 64)            12672     
_________________________________________________________________
gru_17 (GRU)                 (None, 15, 64)            24768     
_________________________________________________________________
time_distributed_10 (TimeDis (None, 15, 344)           22360     
_________________________________________________________________
activation_10 (Activation)   (None, 15, 344)           0     
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

对于输入维度(15,1),我想将输出维度更改为(17,1)

在此先感谢您的帮助.

Ank*_*sal 0

\n

我认为通过将 input_seq 传递给编码器意味着完整的句子。

\n
\n\n

您正在传递完整的句子,GRU一次会收到一个单词,并且会roll-out收到序列中的单词数。

\n\n

让我们举个例子,你的输入是一个类似的句子This is awesome platform, to share knowledge.,它的语言翻译Hindi\xe0\xa4\xaf\xe0\xa4\xb9 \xe0\xa4\x9c\xe0\xa5\x8d\xe0\xa4\x9e\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\xb8\xe0\xa4\xbe\xe0\xa4\x9d\xe0\xa4\xbe \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa4\xa8\xe0\xa5\x87 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x8f \xe0\xa4\xac\xe0\xa4\xb9\xe0\xa5\x81\xe0\xa4\xa4 \xe0\xa4\xac\xe0\xa4\xa2\xe0\xa4\xbc\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xae\xe0\xa4\x82\xe0\xa4\x9a \xe0\xa4\xb9\xe0\xa5\x88\xe0\xa5\xa4。现在,这里的last单词 inHindi对应于2nd单词 in englishlast单词 inenglish对应于2nd单词 in english(以某种方式)等等。

\n\n

我的观点是,当您input向 发送一个单词时encoder,会有一些与其对应的特征,这些特征会转到decoder,其中包含有关所有先前单词的信息。现在它的输出将仅取决于它所看到的那些单词。

\n\n

另外,如果当前步骤之前的序列中的任何单词是错误的,则显然(解码器的)完整句子将是错误的,因为它还没有看到完整的句子。

\n\n

一种选择是将完整序列编码为压缩信息,然后允许decoder解码来自 的信息hidden-compact info是使用此方法的一个很好解释的示例。

\n