sieci.md
This commit is contained in:
parent
0b6b08f7ae
commit
ec0d6b9aa0
174
sieci.md
174
sieci.md
@ -1,89 +1,85 @@
|
|||||||
# Temat podptojektu:
|
# Temat podptojektu:
|
||||||
Stworzenie sieci neuronowej, która rozpoznaje odręcznie napisaną na paczce liczbę, która oznacza producenta paczki.
|
Stworzenie sieci neuronowej, która rozpoznaje odręcznie napisaną na paczce liczbę, która oznacza producenta paczki.
|
||||||
|
|
||||||
# Uczenie modelu
|
# Uczenie modelu
|
||||||
## Dane wejściowe:
|
## Dane wejściowe:
|
||||||
### Pakiet Keras MNIST:
|
### Pakiet Keras MNIST:
|
||||||
- dwa pliki:
|
- dwa pliki:
|
||||||
- Plik z obrazkami
|
- Plik z obrazkami
|
||||||
- Plik z poprawnymi odpowiedziami
|
- Plik z poprawnymi odpowiedziami
|
||||||
### Format obrazków:
|
### Format obrazków:
|
||||||
- rozmiar 28x28
|
- rozmiar 28x28
|
||||||
- odcienie szarości (0-biały, 255- czarny)
|
- odcienie szarości (0-biały, 255- czarny)
|
||||||
- obrazki w postaci binarnej są zapisane w jeden plik
|
- obrazki w postaci binarnej są zapisane w jeden plik
|
||||||
## Praca z pakietem:
|
## Praca z pakietem:
|
||||||
1. Zdefiniowano dane treningowe: tensory wejściowe i tensory wartości docelowych.
|
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.
|
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.
|
3. Skonfigurowano proces uczenia, wybierając funkcję straty, optymalizator i monitorowane metryki.
|
||||||
4. Wykonano iteracje procesu uczenia na danych treningowych, wywołując metodę
|
4. Wykonano iteracje procesu uczenia na danych treningowych, wywołując metodę
|
||||||
fit() zdefiniowanego modelu
|
fit() zdefiniowanego modelu
|
||||||
|
|
||||||
# Proces uczenia
|
# Proces uczenia
|
||||||
-ustawiam seed, aby powtarzać wyniki
|
-ustawiam seed, aby powtarzać wyniki
|
||||||
-pobieram dane
|
-pobieram dane
|
||||||
- konwertuję wymiary obrazu
|
- konwertuję wymiary obrazu
|
||||||
- normalizuję dane
|
- normalizuję dane
|
||||||
- konwertuję etykiety w kategorie
|
- konwertuję etykiety w kategorie
|
||||||
## Inicjalizuję sieć neuronową (sieć sekwencyjna).
|
## Inicjalizuję sieć neuronową (sieć sekwencyjna).
|
||||||
model = Sequential()
|
model = Sequential()
|
||||||
model.add(Conv2D(75, kernel_size=(5, 5),
|
model.add(Conv2D(75, kernel_size=(5, 5),
|
||||||
activation='relu',
|
activation='relu',
|
||||||
input_shape=input_shape))
|
input_shape=input_shape))
|
||||||
model.add(MaxPooling2D(pool_size=(2, 2)))
|
model.add(MaxPooling2D(pool_size=(2, 2)))
|
||||||
model.add(Dropout(0.2))
|
model.add(Dropout(0.2))
|
||||||
model.add(Conv2D(100, (5, 5), activation='relu'))
|
model.add(Conv2D(100, (5, 5), activation='relu'))
|
||||||
model.add(MaxPooling2D(pool_size=(2, 2)))
|
model.add(MaxPooling2D(pool_size=(2, 2)))
|
||||||
model.add(Dropout(0.2))
|
model.add(Dropout(0.2))
|
||||||
model.add(Flatten())
|
model.add(Flatten())
|
||||||
model.add(Dense(500, activation='relu'))
|
model.add(Dense(500, activation='relu'))
|
||||||
model.add(Dropout(0.5))
|
model.add(Dropout(0.5))
|
||||||
model.add(Dense(10, activation='softmax'))
|
model.add(Dense(10, activation='softmax'))
|
||||||
### Dołączam kolejno warstwy:
|
### Dołączam kolejno warstwy:
|
||||||
- Conv2D - mnoży obrazek przez macierz 2x2
|
- Conv2D - mnoży obrazek przez macierz 2x2
|
||||||
- activation='relu' - zeruje negatywne wyniki (funkcja aktuwacji)
|
- activation='relu' - zeruje negatywne wyniki (funkcja aktuwacji)
|
||||||
- MaxPooling2D - zmienia rozdzielczość zdjęcia
|
- MaxPooling2D - zmienia rozdzielczość zdjęcia
|
||||||
- Droupout - ogranicza nadmierne dopasowanie
|
- Droupout - ogranicza nadmierne dopasowanie
|
||||||
- Flatten - spłaszcza macierz do wektora
|
- Flatten - spłaszcza macierz do wektora
|
||||||
- Dense(10) - decyduje o przynależności zdjęcia do kategorii (cyfry od 0 do 9)
|
- 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
|
Activation='soft-max' - zwraca rozkład prawdopodobieństwa 10 różnych klas
|
||||||
|
|
||||||
## Kompilacja modelu:
|
## Kompilacja modelu:
|
||||||
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
|
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
|
||||||
Funkcja straty - "catecorical_crossentropy"
|
Funkcja straty - "catecorical_crossentropy"
|
||||||
Optymalizator - "Adam"
|
Optymalizator - "Adam"
|
||||||
Monitorowanie dokładności - "accuracy"
|
Monitorowanie dokładności - "accuracy"
|
||||||
|
|
||||||
## Trenowanie modelu:
|
## Trenowanie modelu:
|
||||||
model.fit(X_train, Y_train, batch_size=200, epochs=10, validation_split=0.2, verbose=1)
|
model.fit(X_train, Y_train, batch_size=200, epochs=10, validation_split=0.2, verbose=1)
|
||||||
trenuję model za pomocą funkcji fit()
|
trenuję model za pomocą funkcji fit()
|
||||||
### Pokazuję dokładność pracy na testowanych rannych
|
### Pokazuję dokładność pracy na testowanych rannych
|
||||||
scores = model.evaluate(X_test, Y_test, verbose=0)
|
scores = model.evaluate(X_test, Y_test, verbose=0)
|
||||||
print("Dokadnosc na testowanych dannych: %.2f%%" % (scores[1]*100))
|
print("Dokadnosc na testowanych dannych: %.2f%%" % (scores[1]*100))
|
||||||
|
|
||||||
# Integracja z projektem
|
# Integracja z projektem
|
||||||
Tworzę model i ładuję wagi nauczonego modelu.
|
Tworzę model i ładuję wagi nauczonego modelu.
|
||||||
|
|
||||||
image_cl = Sequential()
|
nmodel = Sequential()
|
||||||
ImageClass(image_cl)
|
imageClass(nmodel)
|
||||||
image_cl.load_weights('model_weights.h5')
|
nmodel.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.
|
Po podniesieniu paczki odpalana jest funkcja imgSkan(), która z czytuje ręcznie napisaną cyfrę i wpisuje nr producenta paczki.
|
||||||
|
|
||||||
def imgSkan():
|
def imgSkan():
|
||||||
img = files.upload()
|
img_width, img_height = 28, 28
|
||||||
!ls
|
new_image = load_img('cyfra.png', target_size=(img_width, img_height), color_mode = "grayscale")
|
||||||
img_path = '2.png'
|
new_image = img_to_array(new_image)
|
||||||
img = image.load_img(img_path, target_size=(28, 28), color_mode = "grayscale")
|
new_image = new_image.reshape((1,) + new_image.shape)
|
||||||
plt.imshow(img.convert('RGBA'))
|
|
||||||
plt.show()
|
prediction = nmodel.predict(new_image)
|
||||||
x = image.img_to_array(img)
|
prediction = numpy.argmax(prediction)
|
||||||
x = np.expand_dims(x, axis=0)
|
print("Producent:", prediction)
|
||||||
x = 255 - x
|
producent.append(prediction)
|
||||||
x /= 255
|
|
||||||
prediction = model.predict(x)
|
|
||||||
prediction = np.argmax(prediction)
|
|
||||||
print("Cyfra:", prediction)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user