Ten samouczek demonstruje proste szkolenie convolutional neural network (CNN) do klasyfikacji obrazów cifar. Ponieważ ten samouczek wykorzystuje sekwencyjne API Keras, stworzenie i szkolenie naszego modelu zajmie tylko kilka linijek kodu.,
Import TensorFlow
import tensorflow as tffrom tensorflow.keras import datasets, layers, modelsimport matplotlib.pyplot as plt
Pobierz i przygotuj zbiór danych CIFAR10
zbiór danych CIFAR10 zawiera 60 000 kolorowych obrazów w 10 klasach, z 6000 obrazów w każdej klasie. Zbiór danych jest podzielony na 50 000 obrazów treningowych i 10 000 obrazów testowych. Klasy wzajemnie się wykluczają i nie ma na siebie nakładania się między nimi.
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz170500096/170498071 - 11s 0us/step
zweryfikuj dane
aby zweryfikować, czy zbiór danych wygląda poprawnie, narysujmy pierwsze 25 obrazów z zestawu treningowego i wyświetlmy nazwę klasy pod każdym obrazem.,
Utwórz bazę convolutional
6 linii kodu poniżej definiuje bazę convolutional za pomocą wspólnego wzorca: stosu warstw Conv2D i MaxPooling2D.
jako wejście, CNN przyjmuje tensory kształtu (image_height, image_width, color_channels), ignorując rozmiar wsadu. Jeśli nie znasz tych wymiarów, color_channels odnosi się do (R,G,B). W tym przykładzie skonfigurujesz nasz CNN do przetwarzania wejść kształtu (32, 32, 3), który jest formatem obrazów CIFAR. Możesz to zrobić przekazując argument input_shape
do naszej pierwszej warstwy.,
pokażmy architekturę naszego modelu do tej pory.
model.summary()
powyżej widać, że wyjście każdej warstwy Conv2D i MaxPooling2D jest tensorem 3D kształtu (wysokość, szerokość, kanały). Wymiary szerokości i wysokości zmniejszają się w miarę wchodzenia głębiej w sieć. Liczba kanałów wyjściowych dla każdej warstwy Conv2D jest kontrolowana przez pierwszy argument(np. Zazwyczaj, gdy szerokość i wysokość kurczą się, można sobie pozwolić (obliczeniowo) na dodanie większej liczby kanałów wyjściowych w każdej warstwie Conv2D.,
Dodaj gęste warstwy na górze
aby ukończyć nasz model, będziesz podawał ostatni tensor wyjściowy z bazy konwolucyjnej (o kształcie (4, 4, 64)) do jednej lub więcej gęstych warstw, aby wykonać klasyfikację. Gęste warstwy przyjmują wektory jako wejście (które są 1D), podczas gdy prąd wyjściowy jest tensorem 3D. Najpierw spłaszcz (lub rozwiń) wyjście 3D do 1D, a następnie dodaj jedną lub więcej gęstych warstw na górze. CIFAR ma 10 klas wyjściowych, więc używasz ostatecznej gęstej warstwy z 10 wyjściami.
model.add(layers.Flatten())model.add(layers.Dense(64, activation='relu'))model.add(layers.Dense(10))
oto pełna Architektura naszego modelu.,
model.summary()
jak widać, nasze wyjścia (4, 4, 64) zostały spłaszczone do wektorów kształtu (1024) przed przejściem przez dwie gęste warstwy.
Skompiluj i wytrenuj model
Oceń model
313/313 - 1s - loss: 0.8840 - accuracy: 0.7157
print(test_acc)
Dodaj komentarz