Should I start instantiating my game objects in Start or Awake function when I load my scene?

Awake vs Start

"Awake is used to initialize any variables or game state before the game starts. Awake is called only once during the lifetime of the script instance. Awake is called after all objects are initialized so you can safely speak to other objects or query them using eg. GameObject.FindWithTag. Each GameObject’s Awake is called in a random order between objects… "

It looks like awake is your best bet for getting references if the references are not dependent on another/order does not matter. What exactly are you trying to do?