question on net.collect_params() in the book

in chapter 3.3. Concise Implementation of Linear Regression:


Gluon lets us get away with this because behind the scene, the initialization is actually deferred . The real initialization will take place only when we for the first time attempt to pass data through the network.

but later:

trainer = gluon.Trainer(net.collect_params(), ‘sgd’, {‘learning_rate’: 0.03})

how can u call net.connect_params() since params are not known at that point?