如何在seq2seq模型中添加辍学图层?

时间:2020-06-11 10:17:31

标签: python tensorflow machine-learning keras

我训练了模型,得到了这个奇怪的图:

enter image description here

我尝试以不同的学习率等来实现它,但是即使在50个时期内,我的验证精度仍保持在40%至50%之间,并且训练达到了将近100个。我的数据集虽然很小,但仍然是奇怪的结果。现在,我想添加一些辍学层,但似乎无法向他们提供输入,也不知道如何将其输出传递给下一层。我只是通过声明一个对象并向其传递Dropout(0.5)进行了尝试,但是它没有用。这是我的模型代码:

embedding_layer = Embedding(num_words, EMBEDDING_SIZE, weights=[embedding_matrix], input_length=max_input_len)
decoder_targets_one_hot = np.zeros((
        len(input_sentences),
        max_out_len,
        num_words_output
    ),
    dtype='float32'
)
decoder_output_sequences = pad_sequences(output_integer_seq, maxlen=max_out_len, padding='post')
for i, d in enumerate(decoder_output_sequences):
    for t, word in enumerate(d):
        decoder_targets_one_hot[i, t, word] = 1

encoder_inputs_placeholder = Input(shape=(max_input_len,))
x = embedding_layer(encoder_inputs_placeholder)
encoder = LSTM(LSTM_NODES, return_state=True)

encoder_outputs, h, c = encoder(x)
encoder_states = [h, c]

decoder_inputs_placeholder = Input(shape=(max_out_len,))

decoder_embedding = Embedding(num_words_output, LSTM_NODES)
decoder_inputs_x = decoder_embedding(decoder_inputs_placeholder)

decoder_lstm = LSTM(LSTM_NODES, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_inputs_x, initial_state=encoder_states)

decoder_dense = Dense(num_words_output, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)

import tensorflow as tf

opt = tf.keras.optimizers.Adam(learning_rate=0.01, epsilon=1e-6, clipvalue=0.5)

model = Model([encoder_inputs_placeholder,
  decoder_inputs_placeholder],
  decoder_outputs)

model.compile(
    optimizer=opt,
    loss='categorical_crossentropy',
    metrics=['accuracy']
)

我试图在LSTM层和致密层之间创建一个辍学层,但是没有用。我遵循了一些已经发布的查询,但是其中大多数具有model.layers.Dropout(0.5),但是如果我尝试这样做,那将是行不通的。我不知道如何提供前一层的输出并将其输出提供给下一层。

如何提高我的有效性准确性?她是我的数据集的样子,虽然很小,但我认为,如果我可以正确设置超参数,它的准确性仍应超过90%:

वाह!    Wow!
बचाओ!   Help!
उछलो.   Jump.
कूदो.   Jump.
छलांग.  Jump.
नमस्ते। Hello!
नमस्कार।    Hello!
वाह-वाह!    Cheers!
चियर्स! Cheers!
समझे कि नहीं?   Got it?
मैं ठीक हूँ।    I'm OK.
बहुत बढ़िया!    Awesome!
अंदर आ जाओ। Come in.
बाहर निकल जाओ!  Get out!
चले जाओ!    Go away!
ख़ुदा हाफ़िज़।  Goodbye!
उत्तम!  Perfect!
सही!    Perfect!
आपका स्वागत है। Welcome.
स्वागतम्।   Welcome.
मज़े करना।  Have fun.
मौज करना।   Have fun.
मज़े करो।   Have fun.
मैं भूल गया।    I forgot.
मैं भूल गई। I forgot.
मैं पैसे दूंगा। I'll pay.
मैं ठीक हूँ।    I'm fine.
मेरा पेट भर गया है। I'm full.
चलो चलें!   Let's go!
मुझे जवाब दो।   Answer me.
पंछी उड़ते हैं। Birds fly.
माफ़ कीजिए। Excuse me.
बहुत ख़ूब!  Fantastic!
मैं बेहोश हो गया।   I fainted.

共有2800行,有人使用此数据集实现了92%的准确性,但我想自己用Keras来实现。

添加Dropout图层会有所帮助吗?如果是,如何添加它们以及如何提高验证准确性?

0 个答案:

没有答案