Prosty Model CNN do segregowania zdjęc

0

Posiadam 3 katalogi zdjęć. Przedmioty ułożone w poprawnej kolejności, przedmioty ułożone w niepopranej kolejności i w ogóle brak przedmiotów. Próbuje do tego stworzyć model który będzie w stanie po załadowaniu zdjęcia określi czy przedmioty poukładane są poprawnie, czy są poukładane źle czy ich w ogóle na zdjęciu nie ma. Niestety nie wiem dlaczego model zawsze ostateczną skuteczność ocenia na 0. Nie ważne jaka będzie liczba pokoleń treningowych jak ustawie batch_size ciągle otrzymuję 0.

X_train = np.concatenate((X_train_zgodne, X_train_niezgodne, X_train_brak), axis=0)
y_train = np.concatenate((y_train_zgodne, y_train_niezgodne, y_train_brak), axis=0)

y_train = to_categorical(y_train)

split_index = int(len(X_train) * 0.7)
X_train, X_test = X_train[:split_index], X_train[split_index:]
y_train, y_test = y_train[:split_index], y_train[split_index:]

model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(300, 300, 3)),
MaxPooling2D((2, 2)),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
Flatten(),
Dense(128, activation='relu'),
Dense(3, activation='softmax') # Warstwa wyjściowa z trzema klasami: zgodne, niezgodne, brak przewodu
])

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

model.fit(X_train, y_train, epochs=10, batch_size=36, validation_split=0.2)

test_loss, test_acc = model.evaluate(X_test, y_test)
print('Test accuracy:', test_acc)

0

Ile masz zdjęć, a dwa spróbuj to pojechać jakimś gotowym wyuczonym modelem, np. Resnet50; zobaczysz, co się w ogóle da zrobić.

0

Nie wiem jakie masz dane, ale zbiór dzielisz w bardzo podejrzany sposób, tzn. mówisz 70% do uczenia, 30% do testów. Czy nie jest przypadkiem tak, że te 70% danych to stanowią X_train_zgodne?
W efekcie trenowałbyś model tylko na jednej klasie, a testował na pozostałych 2.

1 użytkowników online, w tym zalogowanych: 0, gości: 1