usunięcie tych pośrednich clear: both znacznie polepszy sprawę aczkolwiek nie do końca ponieważ używasz różnych formatów zdj. aby to się odpowiednio porządkowało musisz użyć algorytmu w js lub jq który będzie odpowiednio grupował zdj. według rozmiaru
<div class="gal2"><img src="img/photo01.jpg" alt="zdjecie w galeri"/></div>
<div class="gal2"><img src="img/photo12.jpg" alt="zdjecie w galeri"/></div>
<div class="gal2"><img src="img/photo20.jpg" alt="zdjecie w galeri"/></div>
<div class="gal2"><img src="img/photo14.jpg" alt="zdjecie w galeri"/></div>
<div class="gal"><img src="img/photo16.jpg" alt="zdjecie w galeri"/></div>
<div class="gal"><img src="img/photo18.jpg" alt="zdjecie w galeri"/></div>
<div class="gal"><img src="img/photo02.jpg" alt="zdjecie w galeri"/></div>
<div class="gal"><img src="img/photo08.jpg" alt="zdjecie w galeri"/></div>
<div class="gal"><img src="img/photo22.jpg" alt="zdjecie w galeri"/></div>
<div class="gal"><img src="img/photo19.jpg" alt="zdjecie w galeri"/></div>
<div class="gal2"><img src="img/photo11.jpg" alt="zdjecie w galeri"/></div>
<div class="gal2"><img src="img/photo03.jpg" alt="zdjecie w galeri"/></div>
<div class="gal2"><img src="img/photo04.jpg" alt="zdjecie w galeri"/></div>
<div class="gal2"><img src="img/photo15.jpg" alt="zdjecie w galeri"/></div>
<div class="gal2"><img src="img/photo06.jpg" alt="zdjecie w galeri"/></div>
<div class="gal2"><img src="img/photo17.jpg" alt="zdjecie w galeri"/></div>
<div class="gal2"><img src="img/photo10.jpg" alt="zdjecie w galeri"/></div>
<div class="gal2"><img src="img/photo23.jpg" alt="zdjecie w galeri"/></div>
<div style="clear: both;"> </div>
P.S. poczytaj o flexboxie...