Error when checking target: expected Output to have 2 dimensions, but got array with shape (631, 80, 2641)
Alright, so... I got help from someone. He mentions changing LSTM to return_sequences.

# Input
inputs = Input(shape=(max_length,), name="Input")

# Embedding
embed = Embedding(input_dim=n_words+1,
                  output_dim=embedding_size,
                  input_length=max_length,
                  name="Embedding")(inputs)

# Bi-LSTM
encoder = Bidirectional(LSTM(units=hidden_state_encoder_size,
                             return_sequences=True,
                             dropout=dropout_rate,
                             name="LSTM"),
                        name="Bi-LSTM")

encoder_outputs = encoder(embed)

# # Average
# average = Average()([state_h, state_c])

# Outputs
outputs = Dense(n_tags,
                activation="softmax",
                name="Output")(encoder_outputs)


The average layer is still wrong, but it's the close thing. I might have to edit it later.