Do I need validation data if my train and test accuracy/loss is consistent?
You don't always need 3 separate datasets. You usually split a dataset into 3 if you are doing some parameter or hyperparameter tuning before choosing a final model. Tuning will usually add bias from the 2nd dataset into your model, decreasing it's performance.
For instance:

If you are manually tuning a model over several iterations and using
the results from the 2nd dataset to find the optimal parameters. By
doing so, you built some information from the 2nd dataset into your
model. This will make the 2nd dataset not a good, unbiased benchmark for your final
model. Therefore, you will want to use a 3rd untouched dataset, to
give you unbiased final performance measurements of your model

Some models use a validation dataset internally while building model
to evaluate loss, etc. This will cause the same problem with
including bias into the model. Example:
model.fit(
    train_features,
    train_labels,
    batch_size=20,
    epochs=20,
    validation_data=(val_features, val_labels), # &lt;- here
    verbose=0)