Keras is more like a wrapper for Tensorflow/Theano/CNTK which supports most of the commonly used DL algorithms. If you would like to quickly apply and test some existing DL framework, then Keras would be your way to go.
If you would like to delve into research and want a fine-grained control over all of your parameters and network structure, then you could work directly on Tensorflow. (I'd also like to add that Theano's development is frozen as of now due to the popularity of the other deep learning packages such as Tensorflow.)
Thanks, Ebenezer. Yes this is for the research purpose and we want the fine-grained control over all of the parameters. We will explore the Theano development.
I use Keras with Tensorflow backend( in spyder there is a variable explorer that I really like). The model construction is comparatively simpler in keras, you can always fine tune things if you understand the network parameters(You might have to look into the keras documentation for doing so).
For example: if I want to change the learning rate of an 'Adam' optimizer in keras, I import the function and change values accordingly:
It depends on the use-case. As some people have already pointed out, Keras is a wrapper for Tensorflow and Theano in Python. You can either use Tensorflow directly in Python, or you can access Tensorflow using Keras.
If you want to train, test networks without digging in deep, Keras (or PyTorch) should be more than enough. If you want to dig deep, understand and implement DNNs from scratch, Tensorflow should be the better & flexible option.