From 62dbc4fd7f0f7ab897bf9e927b22213f1eceb5ed Mon Sep 17 00:00:00 2001 From: Daria Vodzinska Date: Mon, 8 Jun 2020 11:58:53 +0000 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sieci.md | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 sieci.md diff --git a/sieci.md b/sieci.md new file mode 100644 index 0000000..5445256 --- /dev/null +++ b/sieci.md @@ -0,0 +1,89 @@ +# Temat podptojektu: +Stworzenie sieci neuronowej, która rozpoznaje odręcznie napisaną na paczce liczbę, która oznacza producenta paczki. + +# Uczenie modelu +## Dane wejściowe: +### Pakiet Keras MNIST: +- dwa pliki: + - Plik z obrazkami + - Plik z poprawnymi odpowiedziami +### Format obrazków: +- rozmiar 28x28 +- odcienie szarości (0-biały, 255- czarny) +- obrazki w postaci binarnej są zapisane w jeden plik +## Praca z pakietem: +1. Zdefiniowano dane treningowe: tensory wejściowe i tensory wartości docelowych. +2. Zdefiniowano warstwy sieci (lub modelu) przypisującej dane wejściowe do docelowych wartości. +3. Skonfigurowano proces uczenia, wybierając funkcję straty, optymalizator i monitorowane metryki. +4. Wykonano iteracje procesu uczenia na danych treningowych, wywołując metodę +fit() zdefiniowanego modelu + +# Proces uczenia +-ustawiam seed, aby powtarzać wyniki +-pobieram dane +- konwertuję wymiary obrazu +- normalizuję dane +- konwertuję etykiety w kategorie +## Inicjalizuję sieć neuronową (sieć sekwencyjna). + model = Sequential() + model.add(Conv2D(75, kernel_size=(5, 5), + activation='relu', + input_shape=input_shape)) + model.add(MaxPooling2D(pool_size=(2, 2))) + model.add(Dropout(0.2)) + model.add(Conv2D(100, (5, 5), activation='relu')) + model.add(MaxPooling2D(pool_size=(2, 2))) + model.add(Dropout(0.2)) + model.add(Flatten()) + model.add(Dense(500, activation='relu')) + model.add(Dropout(0.5)) + model.add(Dense(10, activation='softmax')) +### Dołączam kolejno warstwy: +- Conv2D - mnoży obrazek przez macierz 2x2 +- activation='relu' - zeruje negatywne wyniki (funkcja aktuwacji) +- MaxPooling2D - zmienia rozdzielczość zdjęcia +- Droupout - ogranicza nadmierne dopasowanie +- Flatten - spłaszcza macierz do wektora +- Dense(10) - decyduje o przynależności zdjęcia do kategorii (cyfry od 0 do 9) +Activation='soft-max' - zwraca rozkład prawdopodobieństwa 10 różnych klas + +## Kompilacja modelu: + model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"]) +Funkcja straty - "catecorical_crossentropy" +Optymalizator - "Adam" +Monitorowanie dokładności - "accuracy" + +## Trenowanie modelu: + model.fit(X_train, Y_train, batch_size=200, epochs=10, validation_split=0.2, verbose=1) +trenuję model za pomocą funkcji fit() +### Pokazuję dokładność pracy na testowanych rannych + scores = model.evaluate(X_test, Y_test, verbose=0) + print("Dokadnosc na testowanych dannych: %.2f%%" % (scores[1]*100)) + +# Integracja z projektem +Tworzę model i ładuję wagi nauczonego modelu. + + image_cl = Sequential() + ImageClass(image_cl) + image_cl.load_weights('model_weights.h5') + +Po podniesieniu paczki odpalana jest funkcja imgSkan(), która z czytuje ręcznie napisaną cyfrę i wpisuje nr producenta paczki. + + def imgSkan(): + img = files.upload() + !ls + img_path = '2.png' + img = image.load_img(img_path, target_size=(28, 28), color_mode = "grayscale") + plt.imshow(img.convert('RGBA')) + plt.show() + x = image.img_to_array(img) + x = np.expand_dims(x, axis=0) + x = 255 - x + x /= 255 + prediction = model.predict(x) + prediction = np.argmax(prediction) + print("Cyfra:", prediction) + + + +