The standard BERT-base has 12 layers each of 12 heads, using 768 dimensions for the vector encoding.   Those values cannot be changed after the model has been created and pre-trained.   When you fine-tune a BERT-base model to solve your own task, you change the values of the weight parameters within the model, but you don’t change the number or layers or heads, and you don’t change the 768 dimensions.
If you create and pre-train your own BERT model, then you can choose any number of layers or heads or dimensions, and you can choose how many tokens your BERT has in its vocabulary.   I believe we would call this a custom model.
By the way, there are several different sizes of BERT model available, pre-trained.   For example, see this link for BERT-small, BERT-tiny etc, which were created by the original BERT team Devlin et al

  
      
      GitHub
  
  
    

google-research/bert 10

TensorFlow code and pre-trained models for BERT. Contribute to google-research/bert development by creating an account on GitHub.


  
  
    
    
  
  


You might also be interested in BERT-like models that have different sizes and have also been pre-trained in different ways, such as DistilBERT, ALBERT and RoBERTa