neuro-lab6/test2.py

82 lines
1.7 KiB
Python
Raw Permalink Normal View History

2025-11-29 13:57:50 +02:00
from tensorflow.keras import layers as kl
from tensorflow.keras import models as km
from tensorflow.keras import losses as ks
from tensorflow.keras import optimizers as ko
from tensorflow.keras import callbacks as kc
def conv(i, k, s, a = None, t = (1, 1)):
l1 = kl.Conv2D(k, s, strides = t, padding = 'same')(i)
l2 = kl.BatchNormalization()(l1)
if a:
return kl.Activation(a)(l2)
else:
return l2
def sepc(i, k, s, a = None, t = (1, 1)):
l1 = kl.SeparableConv2D(k, s, strides = t, padding = 'same')(i)
l2 = kl.BatchNormalization()(l1)
if a:
return kl.Activation(a)(l2)
else:
return l2
def maxp(i, s):
return kl.MaxPooling2D(s, padding = 'same')(i)
def addl(*i):
return kl.Add()([*i])
def gapl(i):
return kl.GlobalAveragePooling2D()(i)
def drpt(i, r):
return kl.Dropout(r)(i)
def dnsl(i, s):
return kl.Dense(s)(i)
def rscl(i, r):
return kl.Rescaling(r)(i)
def raise_xception(si = (300, 300), cc = 1):
i = kl.Input(shape = (*si, 3))
b01 = rscl(i, 1/255)
b11 = conv(b01, 16, (3,3), 'relu')
b21 = conv(b11, 32, (1,1), t = (2,2))
b22 = sepc(b11, 32, (3,3), 'relu')
b23 = maxp(b22, (2,2))
b31 = addl(b21, b23)
b41 = conv(b31, 64, (1,1), t = (2,2))
b42 = sepc(b31, 64, (3,3), 'relu')
b43 = maxp(b42, (2,2))
b51 = addl(b41, b43)
b61 = sepc(b51, 128, (3,3))
b71 = gapl(b61)
b81 = drpt(b71, 0.3)
b91 = dnsl(b81, 64)
o = dnsl(b91, cc)
return km.Model(inputs = i, outputs = o)
m = raise_xception()
m.compile(
optimizer = ko.Lion(learning_rate = 0.002),
loss = ks.BinaryCrossentropy(from_logits = True),
metrics = ['accuracy'])
m.summary()