dotnet / dotnet/machinelearning-modelbuilder
Can't reduce val_loss when teaching computer vision
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
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- 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