| import os | |
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| import tensorflow as tf | |
| from tensorflow import keras | |
| from tensorflow.keras import layers | |
| from tensorflow.keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array | |
| veriyolu = " " | |
| image_size = (150, 150) | |
| batch_size = 32 | |
| train_datagen = ImageDataGenerator(rescale=1./255, validation_split=0.1) | |
| train_generator = train_datagen.flow_from_directory( | |
| veriyolu, | |
| target_size=image_size, | |
| batch_size=batch_size, | |
| class_mode='categorical', | |
| subset='training' | |
| ) | |
| validation_generator = train_datagen.flow_from_directory( | |
| veriyolu, | |
| target_size=image_size, | |
| batch_size=batch_size, | |
| class_mode='categorical', | |
| subset='validation' | |
| ) | |
| model = keras.Sequential([ | |
| layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)), | |
| layers.MaxPooling2D(2, 2), | |
| layers.Conv2D(64, (3, 3), activation='relu'), | |
| layers.MaxPooling2D(2, 2), | |
| layers.Conv2D(128, (3, 3), activation='relu'), | |
| layers.MaxPooling2D(2, 2), | |
| layers.Flatten(), | |
| layers.Dense(512, activation='relu'), | |
| layers.Dense(len(train_generator.class_indices), activation='softmax') | |
| ]) | |
| model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) | |
| model.fit(train_generator, validation_data=validation_generator, epochs=10) | |
| model.save("image_classifier.h5") | |
| def gercek_deger(image_path, model, class_indices): | |
| img = load_img(image_path, target_size=(150, 150)) | |
| img_array = img_to_array(img) / 255.0 | |
| img_array = np.expand_dims(img_array, axis=0) | |
| prediction = model.predict(img_array) | |
| predicted_class = np.argmax(prediction) | |
| class_labels = {v: k for k, v in class_indices.items()} | |
| predicted_label = class_labels[predicted_class] | |
| plt.imshow(img) | |
| plt.title(f"Tahmin: {predicted_label}") | |
| plt.axis("off") | |
| plt.show() |