50dfea9f36e507ca9ff84a286d3a53bb4b714a7c
Перейти к файлуt
main.py
import tensorflow as tf
IMG_SIZE = (224, 224)
BATCH_SIZE = 4
train_ds = tf.keras.utils.image_dataset_from_directory(
"data",
validation_split=0.2,
subset="training",
seed=42,
image_size=IMG_SIZE,
batch_size=BATCH_SIZE,
)
val_ds = tf.keras.utils.image_dataset_from_directory(
"data",
validation_split=0.2,
subset="validation",
seed=42,
image_size=IMG_SIZE,
batch_size=BATCH_SIZE,
)
class_names = train_ds.class_names
print("Classes:", class_names)
data_aug = tf.keras.Sequential(
[
tf.keras.layers.RandomFlip("horizontal"),
tf.keras.layers.RandomRotation(0.1),
tf.keras.layers.RandomZoom(0.1),
]
)
base_model = tf.keras.applications.MobileNetV2(
input_shape=(224, 224, 3), include_top=False, weights="imagenet"
)
base_model.trainable = False
inputs = tf.keras.Input(shape=(224, 224, 3))
x = data_aug(inputs)
x = tf.keras.applications.mobilenet_v2.preprocess_input(x)
x = base_model(x)
x = tf.keras.layers.GlobalAveragePooling2D()(x)
x = tf.keras.layers.Dense(64, activation="relu")(x)
outputs = tf.keras.layers.Dense(len(class_names), activation="softmax")(x)
model = tf.keras.Model(inputs, outputs)
model.compile(
optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"]
)
model.fit(train_ds, validation_data=val_ds, epochs=15)
model.save("model.keras")