55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
#!/usr/bin/python3
|
|
|
|
img_size = (150, 150)
|
|
|
|
from tensorflow.keras import models as m
|
|
from tensorflow.keras import layers as l
|
|
from tensorflow.keras import optimizers as o
|
|
from PIL import Image
|
|
from sys import argv
|
|
from os import listdir as ls
|
|
import numpy as np
|
|
|
|
model = m.Sequential([
|
|
l.Input(shape = (*img_size, 3)),
|
|
|
|
l.Conv2D(96, (11, 11), strides = 4, activation = "relu"),
|
|
l.BatchNormalization(),
|
|
l.MaxPooling2D((3, 3), strides = 2),
|
|
|
|
l.Conv2D(192, (5, 5), activation = "relu", padding = "same"),
|
|
l.BatchNormalization(),
|
|
l.MaxPooling2D((3, 3), strides = 2),
|
|
|
|
l.Conv2D(256, (3, 3), activation = "relu", padding = "same"),
|
|
l.Conv2D(256, (3, 3), activation = "relu", padding = "same"),
|
|
l.Conv2D(160, (3, 3), activation = "relu", padding = "same"),
|
|
l.BatchNormalization(),
|
|
l.MaxPooling2D((3, 3), strides = 2),
|
|
|
|
l.Flatten(),
|
|
l.Dense(1024, activation = "relu"),
|
|
l.Dropout(0.5),
|
|
l.Dense(1024, activation = "relu"),
|
|
l.Dropout(0.5),
|
|
l.Dense(10, activation = "softmax"),
|
|
])
|
|
|
|
model.compile(optimizer = o.Adam(learning_rate = 0.0001),
|
|
loss = "categorical_crossentropy",
|
|
metrics = ["accuracy"])
|
|
|
|
model.load_weights("ep20.weights.h5")
|
|
|
|
if len(argv) >= 2:
|
|
for i in argv[1:]:
|
|
with Image.open(i) as im:
|
|
im = im.resize((150, 150), Image.Resampling.LANCZOS)
|
|
im = np.divide(np.array(im),
|
|
np.array(255.))
|
|
|
|
res = model.predict(np.array([im]))
|
|
print(res)
|
|
print(np.argmax(res))
|
|
print(sorted(ls("../ds/raw-img"))[np.argmax(res)])
|