How to determine which type of layer one should use?

Considering the SRGAN, I found it amazingly difficult to find logic on how this architecture was thought.

The first two layers are input layer and 2d convolution layer, whose choice is pretty simple to understand since we want to detect features to scale them. But after, there are what is called "residual blocks" containing PReLU layers, element-wise sum layers, batch normalization layers, and convolution layers...

Moreover, another element-wise sum is done after these residual blocks plus some batch normalization and convolution again.

How did the author think to use all these types of layers, in this particular order, and what logic does bind these layers? In order to be able to think myself to new architectures and to understand simpler existing ones.

• Working and developing new models, like e.g. SRGAN, and getting them to work, might take years. I would argue that effectively experimenting and motivating innovative layers often require an extensive knowledge of prior work with said layers and techniques. The best tip I've gotten is to involve yourself in the research and methods that are known to work for specific types of use cases, and see if you can combine them somehow. – Andreas Storvik Strauman Jul 27 '19 at 15:24
• Thank you @AndreasStorvikStrauman. As a full-stack developer, I probably can't expect to build my own neural architecture, and I will always have to use the discoveries of neural researchers and engineers. And maybe adapt them as much as I can in my own way. Is that correct? It's something depressing! – JarsOfJam-Scheduler Jul 27 '19 at 15:50
• There are, of course, nothing stopping you from exploring, and even succeeding, in making new architectures. Of course you can build your own neural architecture, but in my (limited) experience, chances are that similar problems have been solved and that other architectures work better. – Andreas Storvik Strauman Jul 27 '19 at 15:52
• My point is - starting with something that is already working and slowly improve it will probably be easier and way less time consuming compared to developing something big and completely new from scratch. – Andreas Storvik Strauman Jul 27 '19 at 15:53