From acda7e69c0c55fce70338926bdb5b0867ea5064f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20Krau=C3=9Fer?= Date: Wed, 29 Apr 2026 20:35:58 +0200 Subject: [PATCH] minor parameter changes --- bird_cnn/Dockerfile | 8 +- bird_cnn/__pycache__/bird_cnn.cpython-314.pyc | Bin 8804 -> 8149 bytes bird_cnn/bird_cnn.py | 74 ++++++++---------- bird_cnn/main.py | 6 +- 4 files changed, 36 insertions(+), 52 deletions(-) diff --git a/bird_cnn/Dockerfile b/bird_cnn/Dockerfile index 4286652..6245a8b 100644 --- a/bird_cnn/Dockerfile +++ b/bird_cnn/Dockerfile @@ -1,23 +1,17 @@ FROM python:3.11-slim -# Set working directory WORKDIR /app -# Install system dependencies (optional but common) RUN apt-get update && apt-get install -y \ bash \ && rm -rf /var/lib/apt/lists/* -# Copy requirements first (better Docker layer caching) COPY . . -# Install Python dependencies RUN pip install --no-cache-dir -r requirements.txt -RUN pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu +RUN pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu -# Make sure the startup script is executable RUN chmod +x start_server.sh -# Use the script as the container entrypoint ENTRYPOINT ["bash", "./start_server.sh"] \ No newline at end of file diff --git a/bird_cnn/__pycache__/bird_cnn.cpython-314.pyc b/bird_cnn/__pycache__/bird_cnn.cpython-314.pyc index 4b07fc792b5dc4ad739fa620a7f2ca59d6e780c9..927c59cdf85d79076a20ecd548ac74e7ad12fb64 100644 GIT binary patch delta 2058 zcmb_dUrbY17(eIs-uAZKwt#J+e}IC3G!l)_36ezxjYh**y++&|(B1S_sg@Q`uMAlh z*kYo>BH+maTe8TD8N@g>?!gzcJ?vqROlr2=k?n;n`miMvrd#&1^WD;l4+o;Wrs*!9dL$WwMSmiI0i)3pV zN@7itCD~?3b{TI)A^W{-fWr&-|KNVZc!B=H*A}~3FdYwPIQFiuCtkWmn81E|L+Hje z^trGvP!10EXf&2oG8r`y)1pzsdH;Uqe9XN4u%9^)fkBKtg<)EkR$pg=f)qT4dXa`@ zq;Y+I&E!F8Ec4x{8OxY0P)uU_wb@%M=+@)s5`!JdbnIM=F9bu#!ekawTz!P-Kjy7< zkk1$=OS?@nYFSU$jZ*o9F5 zg(#SfqHzl*;$a3-1_0IX3Ry`Jd`JMW6rGQyQ$y4)1xBqPMKf#{#KkNbFxRs&M!et+ zQ}oipCU-=miBy8sGyuMb82mMcmPPwj%lBe=R`e~q8s^pS-pRV&zQTWOUH1BKRD4#k zEIB5Rj31d&=XNbgb@0_S-ZlH$l2pAa)S7&@EBrMFfn$lS?}>>Bnb~8Ma2U}Om9?z+ z5rGEz00>21-!sgegzdQ)t6oAP(Q zhtKaJQc6oimn56RIH&62>HAfc^r2hin0TwIiVjEK0h^FoD0F| zV9&>w1=d3>q?LWMvjQd%YfgU2k6lc0rr8)v`?^BhQ&WJnNT&1h zK)mxr?raTGm9(qMpq3blw-23(q|?bJRks{UDw-Bg>E_NvDy|USa*(74(-$;d7)Yz} zWJn;;(G0@sVl3L9P}O)UM_uS-8|g@~-Cr330pLU=v>^9AZqkLSJ#epHXnc*!4Zw2ADvq!N3M>{R!@AeCLI3tEan)IYg$M$|ACDuAdJxj1e2pOl6z7G2QNB-T%>eLaG)OnS)|!!i2A zcg+PYR2Ma(BvNdBWQ2VlzCZ5&f{&bHBIyH&0=x^LFwpsAT2XZ;U^JsCT09CrG13bT zG5{<}w`9_%wE<;VH!%p=NC*8e*o0O3RWMj;BsFK0fx%>)TxQ;v=&!+hq9d2-6unU$ zZZ?`FG%VfxMq0hV9N`A%?y^w?SgJ930p)h;M1& delta 2318 zcmb_eZERCj7`~^Ux9x4W(yr~gw(B+=E8}C`szU;79ngd@YH7k$C@ppEpjg^^S|)79 zPXDkE-GCEAL!#^tvBV!jh>1V_LqrpkVMj1Gi@{`xA!dof{7Q`Ry!W=FRAOTE{CMtr z-t(OIea~~wx%b}fTi&DX)M?cWZ7ZIKiIof5MpV48fmnm8pwi4FQBD(72U)@5f~bvg zX>R;!lOWg4Cg}=7E~1jJuQ$@!JUWw=&}Vx)wve6j8Du42$cK=VI2C=!OpYn6$U?>y zohmCOVL1iDAs4cdh}x@B(XNzX*hgQ=$SfKlE9$rRdZ+{15R+1h7Q=+}73;;;uw)ZN zDYvjRDCvDX0|G)LKQ%RzAJlDzS~~JbiCNPj2}{V24Mv>@N~et`qgs%+xE^D5IE^@3 z3D-(4a4pic5VG13oDjm`kyTeXBnh+C{hErkwJEl0^@iFhYbn{c?FaTow%5 zhv}v;#Kqe3vS57h5U(0er$!@*R3axFMqVNG-MmJ4W?xNYBJQ%YyV}`ZcJ@>|d&*7^ zulL5HnOtHt?j1cINT-wCFIfmOMtdwVmBPSBESUe@J83fA09cZU*0$YFwtK{_q2^@>;_WQR)gcU|2 zcA#FQn*26lV3t_zl=2R1S!AutjZIhVm+fR$_e}ngQf5_8%HGkfa*Vn2I(u7xOTF;Y z%ZsMN)Tvo&vR~PGdFK+Ro7*?N@BE3P{;Im@Epc1Gw;UkNt(9@z7UVATpa=xSJzPhm(Epc7{SI~bEGjyFTSK586 zbKyv6(R36lT{bt~Gk1P%?kxIB<{s+dmduTp#x9PLH-wJKaw%~!G0zs)UDXs1l}tc^ zNkExzBl$_$EQhV+E4ERxLqeRgb}m$Y*Dy>#Mo+yNDM`Jmndof>@U@)z7C&OV8jIqjTp+IQY_&(LmnlGKN&BLzw;-W|k_E diff --git a/bird_cnn/bird_cnn.py b/bird_cnn/bird_cnn.py index a69f897..580e4a6 100644 --- a/bird_cnn/bird_cnn.py +++ b/bird_cnn/bird_cnn.py @@ -23,59 +23,49 @@ class SeparableConvolution(nn.Module): x = F.relu(x) return x + +class SkipBlock(nn.Module): + def __init__(self, c_in, c_out, kernel_size=3): + super().__init__() + self.conv = SeparableConvolution(c_in=c_in, c_out=c_out, kernel_size=kernel_size) + self.conv_skip = nn.Sequential( + nn.Conv2d(c_in, c_out, 1), + nn.BatchNorm2d(c_out) + ) + + def forward(self, x): + return(F.relu(self.conv_skip(x) + self.conv(x))) class Bird_CNN(nn.Module): def __init__(self, c_in, c_hidden, c_out): super().__init__() - self.conv_init = nn.Sequential( + self.model = nn.Sequential( nn.Conv2d(c_in, c_hidden, kernel_size=3, padding=1), nn.BatchNorm2d(c_hidden), - nn.ReLU() + nn.ReLU(), + + SkipBlock(c_in=c_hidden, c_out=c_hidden), + SkipBlock(c_in=c_hidden, c_out=c_hidden), + SkipBlock(c_in=c_hidden, c_out=c_hidden), + SkipBlock(c_in=c_hidden, c_out=c_hidden), + + SkipBlock(c_in=c_hidden, c_out=c_hidden*2), + SkipBlock(c_in=c_hidden*2, c_out=c_hidden*2), + SkipBlock(c_in=c_hidden*2, c_out=c_hidden*2), + SkipBlock(c_in=c_hidden*2, c_out=c_hidden*2), + + SeparableConvolution(c_in=c_hidden*2, c_out=c_hidden*4, kernel_size=3), + + nn.AdaptiveAvgPool2d((1, 1)), + nn.Flatten(), + nn.Linear(c_hidden*4, c_out), + nn.Dropout(0.3) ) - self.conv_1 = SeparableConvolution(c_in=c_hidden, c_out=c_hidden*2, kernel_size=3) - self.conv_skip_1 = nn.Sequential( - nn.Conv2d(c_hidden, c_hidden*2, 1), - nn.BatchNorm2d(c_hidden*2) - ) - - self.conv_2 = SeparableConvolution(c_in=c_hidden*2, c_out=c_hidden*4, kernel_size=3) - self.conv_skip_2 = nn.Sequential( - nn.Conv2d(c_hidden*2, c_hidden*4, 1), - nn.BatchNorm2d(c_hidden*4) - ) - - self.conv_3 = SeparableConvolution(c_in=c_hidden*4, c_out=c_hidden*8, kernel_size=3) - self.conv_skip_3 = nn.Sequential( - nn.Conv2d(c_hidden*4, c_hidden*8, 1), - nn.BatchNorm2d(c_hidden*8) - ) - - self.conv_4 = SeparableConvolution(c_in=c_hidden*8, c_out=c_hidden*16, kernel_size=3) - - self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) - self.flatten = nn.Flatten() - self.linear = nn.Linear(c_hidden*16, c_out) - - self.dropout = nn.Dropout(0.3) - def forward(self, x): - x = self.conv_init(x) - - x = F.relu(self.conv_skip_1(x) + self.conv_1(x)) - x = F.relu(self.conv_skip_2(x) + self.conv_2(x)) - x = F.relu(self.conv_skip_3(x) + self.conv_3(x)) - - x = self.conv_4(x) - - x = self.avgpool(x) - x = torch.flatten(x, 1) - - x = self.dropout(x) - - return self.linear(x) + return self.model(x) def trainCNN(model, optimizer, loss_module, train_data_loader, validation_data_loader, device, num_epochs, SAVE_PATH, save=False): diff --git a/bird_cnn/main.py b/bird_cnn/main.py index eeb5c21..24f079e 100644 --- a/bird_cnn/main.py +++ b/bird_cnn/main.py @@ -34,13 +34,13 @@ val_size = len(dataset) - train_size train_dataset, val_dataset = random_split(dataset, [train_size, val_size]) -train_loader = DataLoader(train_dataset, batch_size=8, shuffle=True) -val_loader = DataLoader(val_dataset, batch_size=8, shuffle=False) +train_loader = DataLoader(train_dataset, batch_size=4, shuffle=True) +val_loader = DataLoader(val_dataset, batch_size=4, shuffle=False) device = torch.device("cpu") if not torch.cuda.is_available() else torch.device("cuda:0") print("Using device", device) -model = Bird_CNN(c_in=3, c_hidden=32, c_out=7) +model = Bird_CNN(c_in=3, c_hidden=64, c_out=7) model.to(device) optimizer = torch.optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-4) loss_module = nn.CrossEntropyLoss()