我有一个简单的机器翻译模型,可以将英语句子转换为法语句子。我想首先通过英语句子维度传递模型编码器。经解码器翻译后,模型输出为法语句子维。这里的问题是填充后的英语句子和法语句子的长度不同。如何在编码器和解码器之间进行重塑?
这是我的代码:
.css
生成的模型参数如下:
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
对于输入尺寸为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
_________________________________________________________________
,我想将输出尺寸更改为(15,1)
预先感谢您的帮助。
答案 0 :(得分:0)
我认为将input_seq传递给编码器意味着完整的句子。
您正在传递完整的句子,GRU
一次将接收一个单词,而roll-out
则是序列中单词的数量。
让我们举个例子,您的输入是一个类似This is awesome platform, to share knowledge.
的句子,其在Hindi
语言中的翻译是यह ज्ञान साझा करने के लिए बहुत बढ़िया मंच है।
。现在,此处last
中的Hindi
词对应于2nd
中的english
词,而last
中的english
词对应于{ 2nd
中的{1}}字(以某种方式),等等。
我的意思是,当您向english
发送一个input
字时,将有一些与之相对应的功能,这些功能将转到encoder
,其中包含有关所有以前的话。现在,它的输出将仅取决于它所看到的那些单词。
如果当前步骤之前序列中的任何单词有错误,则很明显,(解码器的)完整句子将是错误的,它没有看到完整的句子。
一个选项是对完整序列进行编码以压缩信息,然后允许decoder
对decoder
中的信息进行解码。 Here是使用此方法的很好解释的示例。