Makine ö?renmesi ile öksürük tespiti
Merhaba makine ö?renmesi yöntemlerini kullanarak öksürük tespitini yapaca??z. Yaz?m? Türkçe yaz?yorum çünkü bu konuda Türkçe kaynak yok. Örnekler vererek detayl?ca aç?klayarak size nas?l yap?ld???n? sunaca??m iyi okumalar.
https://github.com/flavves/oksurukTespit
spektrum görüntülerini bu yaz?mda anlatt???m ?ekilde elde edebilirsiniz
veri setine buradan ula?abilirsiniz : https://wetransfer.com/downloads/d731d25849ca25f7f6bd0349392d8c2920210103141036/fd98e1
import numpy as np
import pandas as pd
import os
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.layers import Dense, Conv2D, MaxPool2D, Flatten, Dropout
import time
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array
Bu k?s?mda bizim elimizdeki spektrum png dosyalar?m?z? belirlenen parametreler filtrelemesi sayesinde belirli tan?mlara at?yoruz
data_generator = ImageDataGenerator(rescale=1./255.,validation_split=0.2,
featurewise_center=True,
samplewise_center=True,
featurewise_std_normalization=True,
samplewise_std_normalization=True,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.15,
zoom_range=0.15,
fill_mode="nearest",
horizontal_flip=True,
vertical_flip=True
)
train_generator = data_generator.flow_from_directory(directory= 'D:/masaüstü/yaz?l?mileilgilihersey/onluk/sestospectrum/we/dataset/training/',
target_size=(224, 224),
class_mode='binary',
subset='training',
shuffle=True,
seed=2,
batch_size=32,
color_mode='rgb'
)
valid_generator = data_generator.flow_from_directory(directory= 'D:/masaüstü/yaz?l?mileilgilihersey/onluk/sestospectrum/we/dataset/testing/',
target_size=(224, 224),
class_mode='binary',
subset='validation',
shuffle=True,
batch_size=32,
color_mode='rgb'
)
classes = ['oksuruk_degil', 'oksuruk']

sample_training_images, _ = next(train_generator)
def plotImages(images_arr):
fig, axes = plt.subplots(1, 5, figsize=(20,20))
labels = sample_training_images
axes = axes.flatten()
for img, ax in zip(images_arr, axes):
ax.imshow(img)
ax.axis('off')
plt.tight_layout()
plt.show()
plotImages(sample_training_images[:5])

model = tf.keras.models.Sequential()
model.add(MobileNetV2(include_top=False, pooling='avg', weights='imagenet', input_shape=(224, 224, 3), classes=2))
model.add(Dense(2, activation='softmax'))
model.layers[0].trainable = False
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
callbacks = tf.keras.callbacks.EarlyStopping(monitor = 'val_accuracy', patience = 2)
history = model.fit_generator(train_generator,
steps_per_epoch = len(train_generator),
epochs=15,
validation_steps = len(valid_generator),
validation_data=valid_generator,
callbacks = [callbacks]
)

def visualize_training(history, lw = 3):
plt.figure(figsize=(10,6))
plt.plot(history.history['accuracy'], label = 'training', marker = '*', linewidth = lw)
plt.plot(history.history['val_accuracy'], label = 'validation', marker = 'o', linewidth = lw)
plt.title('Training Accuracy vs Validation Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend(fontsize = 'x-large')
plt.show()
plt.figure(figsize=(10,6))
plt.plot(history.history['loss'], label = 'training', marker = '*', linewidth = lw)
plt.plot(history.history['val_loss'], label = 'validation', marker = 'o', linewidth = lw)
plt.title('Training Loss vs Validation Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend(fontsize = 'x-large')
plt.show()
visualize_training(history)


preds = model.predict_generator(valid_generator,steps=15)
label = valid_generator.classes
pred= model.predict(valid_generator)
predicted_class_indices=np.argmax(pred,axis=1)
labels = (valid_generator.class_indices)
labels2 = dict((v,k) for k,v in labels.items())
predictions = [labels2[k] for k in predicted_class_indices]
print(predicted_class_indices)
print (labels)
print (predictions)

Haydi sizinle beraber ?imdi tahmin yapal?m
image_path = 'D:/masaüstü/yaz?l?mileilgilihersey/onluk/sestospectrum/we/dataset/testing/oksuruk/a48.png'
image = tf.keras.preprocessing.image.load_img(image_path)
input_arr = tf.keras.preprocessing.image.img_to_array(image)
input_arr = np.array([input_arr]) # Convert single image to a batch.
predictions = model.predict(input_arr)
predictions

from sklearn.metrics import confusion_matrix, classification_report, roc_curve
rc = roc_curve(predicted_class_indices,label)
cf_matrix = confusion_matrix(predicted_class_indices,label)
cf_report = classification_report(predicted_class_indices,label)
print('Confusion matrix report of the model : \n{}'.format(cf_matrix))
exp_series = pd.Series(label)
pred_series = pd.Series(predicted_class_indices)
pd.crosstab(exp_series, pred_series, rownames=['Actual'], colnames=['Predicted'],margins=True)
print('Classification report of the model : \n{}'.format(cf_report))
save_path = '.'
from tensorflow.keras.models import load_model
model2 = load_model(os.path.join(save_path,"D:/masaüstü/yaz?l?mileilgilihersey/onluk/sestospectrum/bionluk.h5"))
pred = model2.predict(input_arr)
pred
Tahminimce hadi nerede sonuç diyebilirsiniz. Kendi üretti?iniz model sonucunda test datan?zdaki öksürük ve öksürük de?il kararlar?n? kar??la?t?r?n gelen arraylerin aral???n? veya yüksekli?ine göre tahmin yap?n
save_path = '.'
model2 = load_model(os.path.join(save_path,"bionluk.h5"))
pred = model2.predict(giris)
pred
for a in pred:
print(a[1])
sonuc=a[0]
sonuc1=a[1]
if sonuc >0.50:
print("SONUÇ ÖKSÜRÜK")
else:
print("NEGAT?F")
Tarz?nda yapabilirsiniz sizin terci?inize kalm??.
Te?ekkür ederim e?er bir sorunuz olursa
batuhanokmen@gmail.com üzerinden sorular?n?z? iletebilirsiniz.