dotnet / dotnet/machinelearning-modelbuilder

Can't reduce val_loss when teaching computer vision

Aperta
#2,917 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Dockerfile
Stelle
285
Fork
66
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

I tried everything, improved the architecture, added layers, neurons, but it doesn’t work.
Could this be because I'm training images at 384x384 resolution?

import cv2
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
from keras.utils import to_categorical
import os
import tensorflow as tf
from sklearn.utils.class_weight import compute_class_weight
from sklearn.model_selection import train_test_split

classes = 5

def load_images_from_folder(folder):
    images = []
    labels = []
    class_names = os.listdir(folder)
    for class_name in class_names:
        class_path = os.path.join(folder, class_name)
        for filename in os.listdir(class_path):
            img = cv2.imread(os.path.join(class_path, filename))
            if img is not None:
                img = cv2.resize(img, (32, 32))  # Изменение размера до 64x64
                img = img.astype('float32') / 255
                images.append(img)
                labels.append(class_names.index(class_name))
    return np.array(images), to_categorical(np.array(labels), classes), labels

dataset_folder = 'E:\\MSHI_2_KYRS_2_SIM\\5.v5\\dataset\\train'
x_train, y_train, y_labels = load_images_from_folder(dataset_folder)

x_train, x_test, y_train, y_test = train_test_split(x_train, y_train, test_size=0.3, random_state=42)

class_weights = dict(enumerate(compute_class_weight(class_weight='balanced', classes=np.unique(y_labels), y=y_labels)))


model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(5, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])


model.fit(x_train, y_train, batch_size=32, epochs=50, verbose=1, validation_data=(x_test, y_test), class_weight=class_weights)



save_path = 'E:\\MSHI_2_KYRS_2_SIM\\5.v5\\my_model.keras'
model.save(save_path)

loaded_model = tf.keras.models.load_model(save_path)

img_path = 'E:\\MSHI_2_KYRS_2_SIM\\5.v5\\dataset\\train\\healthy\\20220101_085747_jpg.rf.8e8f3a8931b9f5a43b77e87937b875a7.jpg'
img = cv2.imread(img_path)
img = cv2.resize(img, (32, 32))
img = img.astype('float32') / 255
img = np.expand_dims(img, axis=0)

predictions = loaded_model.predict(img)
class_names = ['algal', 'brown_blight', 'gray_blight', 'healthy', 'red_spot']
predicted_class = np.argmax(predictions)
predicted_class_name = class_names[predicted_class]
predicted_prob = predictions[0][predicted_class]

print('Predicted class:', predicted_class_name)
print('Probability:', predicted_prob)

Problem:
Epoch 1/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 3s 47ms/step - accuracy: 0.1800 - loss: 1.6678 - val_accuracy: 0.3012 - val_loss: 1.5612 Epoch 2/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.3546 - loss: 1.4837 - val_accuracy: 0.3775 - val_loss: 1.3366 Epoch 3/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.3527 - loss: 1.4189 - val_accuracy: 0.4458 - val_loss: 1.2974 Epoch 4/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.4015 - loss: 1.2905 - val_accuracy: 0.5582 - val_loss: 1.1519 Epoch 5/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.4741 - loss: 1.2249 - val_accuracy: 0.6345 - val_loss: 1.0815 Epoch 6/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.5274 - loss: 1.1392 - val_accuracy: 0.6305 - val_loss: 1.0546 Epoch 7/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 30ms/step - accuracy: 0.5744 - loss: 1.0751 - val_accuracy: 0.6345 - val_loss: 0.9895 Epoch 8/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.6253 - loss: 1.0424 - val_accuracy: 0.6345 - val_loss: 0.9201 Epoch 9/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 30ms/step - accuracy: 0.5834 - loss: 1.0626 - val_accuracy: 0.6747 - val_loss: 0.9016 Epoch 10/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.6576 - loss: 0.8760 - val_accuracy: 0.6747 - val_loss: 0.8456 Epoch 11/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 33ms/step - accuracy: 0.6317 - loss: 0.8696 - val_accuracy: 0.6586 - val_loss: 0.8808 Epoch 12/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 30ms/step - accuracy: 0.6426 - loss: 0.8469 - val_accuracy: 0.7068 - val_loss: 0.8178 Epoch 13/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.6738 - loss: 0.7729 - val_accuracy: 0.5904 - val_loss: 1.0304 Epoch 14/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 32ms/step - accuracy: 0.6776 - loss: 0.8323 - val_accuracy: 0.7149 - val_loss: 0.8181 Epoch 15/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 32ms/step - accuracy: 0.7252 - loss: 0.6729 - val_accuracy: 0.6867 - val_loss: 0.7835 Epoch 16/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 32ms/step - accuracy: 0.7558 - loss: 0.6813 - val_accuracy: 0.7269 - val_loss: 0.8004 Epoch 17/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.7109 - loss: 0.6636 - val_accuracy: 0.6867 - val_loss: 0.8329 Epoch 18/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 33ms/step - accuracy: 0.7475 - loss: 0.6015 - val_accuracy: 0.7108 - val_loss: 0.8273 Epoch 19/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 32ms/step - accuracy: 0.7663 - loss: 0.6021 - val_accuracy: 0.7229 - val_loss: 0.7504 Epoch 20/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 33ms/step - accuracy: 0.7462 - loss: 0.5803 - val_accuracy: 0.6667 - val_loss: 0.9694 Epoch 21/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.7682 - loss: 0.5598 - val_accuracy: 0.7028 - val_loss: 0.8124 Epoch 22/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.8133 - loss: 0.4916 - val_accuracy: 0.7269 - val_loss: 0.7957 Epoch 23/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 33ms/step - accuracy: 0.8201 - loss: 0.4763 - val_accuracy: 0.6988 - val_loss: 0.8507 Epoch 24/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 33ms/step - accuracy: 0.8063 - loss: 0.4616 - val_accuracy: 0.7309 - val_loss: 0.7837 Epoch 25/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 35ms/step - accuracy: 0.8704 - loss: 0.3862 - val_accuracy: 0.7108 - val_loss: 0.8784 Epoch 26/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 33ms/step - accuracy: 0.8719 - loss: 0.3722 - val_accuracy: 0.7028 - val_loss: 0.9467 Epoch 27/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.8673 - loss: 0.3757 - val_accuracy: 0.7349 - val_loss: 0.8438 Epoch 28/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 32ms/step - accuracy: 0.8545 - loss: 0.3687 - val_accuracy: 0.6867 - val_loss: 1.0415 Epoch 29/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 30ms/step - accuracy: 0.8504 - loss: 0.3589 - val_accuracy: 0.7229 - val_loss: 0.8642 Epoch 30/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 32ms/step - accuracy: 0.8945 - loss: 0.3146 - val_accuracy: 0.7149 - val_loss: 0.8812 Epoch 31/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.8421 - loss: 0.3840 - val_accuracy: 0.7108 - val_loss: 1.0181 Epoch 32/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 30ms/step - accuracy: 0.9033 - loss: 0.2608 - val_accuracy: 0.7108 - val_loss: 0.9892 Epoch 33/50 19/19 ━━━━━━━━━━━━━━━━━━━━ 1s 31ms/step - accuracy: 0.9207 - loss: 0.2226 - val_accuracy: 0.6787 - val_loss: 1.0831 Epoch 34/50 15/19 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - accuracy: 0.8765 - loss: 0.2960Traceback (most recent call last):

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Non è identificato alcun file del repository o test; l'issue fornisce solo uno script Python autonomo per l'addestramento. Inizia riproducendo l'esecuzione di model.fit fornita e analizzando il comportamento della validazione; quindi stabilisci un risultato atteso specifico e una risoluzione riproducibile prima di considerare concluso il lavoro.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
keras, numpy, opencv, python, scikit-learn, tensorflow
Ambito
computer-vision, machine-learning
Tipo di issue
Bug
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
20/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.