I denne bloggposten skal vi følge opp vår tidligere post, hvor vi demonstrerte hvordan man setter opp en funksjonelt AI-miljø. Som nevnt i posten «Setting a Deep Learning Working Enviroment» skal vi bruke Keras Deep Learning Library.
Jeg er en stor tilhenger av Keras. Det er et høynivå, veldig kraftig, intuitivt og enkelt Python-bibliotek for å bygge nevrale nettverk og implementere deep learning-arkitektur. Vi skal kjøre den oppå TensorFlow (som også ble installert om du fulgte instruksjonene i forrige post).
Et av fokusområdene til Keras sine utviklere er å tillate rask eksperimentering, så data scientists kan gå raskt fra ide til resultat. Kort fortalt: Du kan bruke Keras om du ser etter et bibliotek som:
- Gir deg enkel og rask prototyping (gjennom brukervennlighet, modularitet og utvidelsesmuligheter)
- Støtter både konvolusjonelle nettverk og tilbakevendende nettverk (convolutional / recurrent networks).
- Kjører sømløst på CPU og GPU.
Vil du ha mer informasjon om Keras, kan du besøke nettsidene deres.
I denne posten skal vi demonstrere hvordan man lager dyp læring (deep learning) sitt svar på «Hello World». Vi skal lage vår aller første nevrale nettverk-modell i Python med Keras. Vi skal jobbe med å klassifisere Fashion-MNIST-datasettet, ved å bruke en konvolusjonell nevralt nettverk-arkitektur.
![Utdrag fra Fashion-MNIST fra Zalando. 📸: Zalando Utdrag fra Fashion-MNIST fra Zalando. 📸: Zalando](https://www.kode24.no/images/70338395.jpg?imageId=70338395&x=15.064935064935&y=0&cropw=83.376623376623&croph=100&width=321&height=386)
Datasettet Fashion-MNIST kommer fra nettbutikken Zalando, og består av 70.000 merkede bilder. Bildene er artikkelbilder som inneholder ti klasser:
- T-shirt/top
- Trouser
- Pullover
- Dress
- Coat
- Sandal
- Shirt
- Sneaker
- Bag
- Ankle boot
Vil du vite mer om datasettet kan du lese detaljene på GitHub-sidene deres.
Målet vårt blir å, med få linjer kode, definere og trene en modell som skal klassifisere datasettet med en akseptabel nøyaktighet (akseptabel for en «Hello World»-guide!) uten å bruke så mye tid på å optimalisere modellen.
Vi skal ikke fokusere på gjennomganger av de matematiske detaljene rundt hvordan et dypt nevralt nettverk fungerer. Det betyr ikke at disse detaljene ikke er viktige, tvert i mot; de er så viktige at vi vil gjennomgå dem i en framtidig post.
![image: Slik utforsker du åpen data med R](https://www.kode24.no/images/70329820.jpg?imageId=70329820&x=0&y=11.049723756906&cropw=95.833333333333&croph=88.950276243094&width=202&height=101&compression=80 640w, https://www.kode24.no/images/70329820.jpg?imageId=70329820&x=0&y=11.049723756906&cropw=95.833333333333&croph=88.950276243094&width=322&height=161&compression=80 1024w, https://www.kode24.no/images/70329820.jpg?imageId=70329820&x=0&y=11.049723756906&cropw=95.833333333333&croph=88.950276243094&width=404&height=202&compression=70 320w)
Slik utforsker du åpen data med R
Gjennomgang av guiden
Det å bruke Keras-biblioteket kommer til å forenkle koden vi skal bruke i denne guiden. Selv om koden blir relativt enkel, skal vi gi den en hel del detaljer så du kan tilpasse den, og kanskje bruke den for å lage modeller til dine egne datasett i framtida.
Vi skal dele guiden opp i følgende seksjoner:
- Laste data
- Definere modellen
- Kompilere modellen
- Tilpasse modellen
- Evaluere modellen
- Visualisere forutsigelsene
Etter å ha fulgt instruksjonene i «Setting a deep learning working environment», trenger vi ikke bekymre oss over konfigurasjon eller avhengighetene vi trenger. Vi kan starte med én gang!
Laste data
La oss starte med å importere datasettet vårt. Etter dette skal vi gjøre noen pre-prosesseringer for å forberede dataen for treningen, valideringen og testingen.
For å laste Fashion-MNIST-datasettet bruker vi Keras, og bare én linje med kode. Så skal vi laste trene-og-teste-datasettet. Men før vi gjør dette, må vi importere et par viktige biblioteker:
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
# input image dimensions
img_rows, img_cols = 28, 28
# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()
Hvordan ser dataen vi nettopp lastet ut? La oss først se på formen til datasettet:
print("x_train shape:", x_train.shape, "y_train shape", y_train.shape)
Som du ser har vi 60.000 treningsbilder som er 28x28 punkter, sammen med de korresponderende 60.000 merkelappene.
En fin ting med å jobbe med JupyterLab, er visualiseringen. La oss se på hvordan bildene i datasettet ser ut:
fig=plt.figure(figsize=(8, 8))
columns = 4
rows = 5
for i in range(1, columns*rows +1):
img = x_train[i]
fig.add_subplot(rows, columns, i)
ax.set_title(str(y_train[i]))
plt.axis('off')
plt.imshow(img)
plt.show()
Da skal du få se noe som dette:
![📸: Arturo Amador 📸: Arturo Amador](https://www.kode24.no/images/70338155.jpg?imageId=70338155&x=0&y=0&cropw=100&croph=100&width=643&height=655)
Før vi definerer modellen vår; la oss forberede dataen litt mer ved å normalisere den:
if K.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
Da er vi klare til å gå videre til å definere modellen.
Definere modellen
La oss definere modellen og starte treningen. Vi har et par valg for å definere modeller med Keras:
- «Sequential model API»
- «Functional API»
Vi skal bruke «Sequential model API» i denne guiden. Som du får se, trenger vi bare å definere formen til input-dataen i første lag. I det siste laget får vi et tett lag med «softmax activation», så vi kan klassifisere de 10 kategoriene vi har i datasettet.
num_classes = 10
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(32, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape))
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Dropout(0.25))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(num_classes, activation='softmax'))
Med dette er vi klare for å kompilere modellen i neste steg.
Kompilere modellen
Dette er steget hvor vi bruker model.compile() for å konfigurere treningsprosessen (før den faktiske treningen). Her kan vi definere «loss»-funksjonen, optimalisereren vi vil bruke og beregningene for evalueringen av modellen.
model.compile(loss=tf.keras.losses.categorical_crossentropy,
optimizer=tf.keras.optimizers.Adadelta(),
metrics=['accuracy'])
Trene modellen
Nå skal vi trene modellen med en «batch size» på 128, over 20 epoker.
batch_size = 128
epochs = 12
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_split=0.1)
Teste nøyaktighet
Og vipps, så har vi en nøyaktighet på over 90 prosent. Du kan teste den slik:
score = model.evaluate(x_test, y_test, verbose=0)
print('\n', 'Validation accuracy:', score[1])
Visualisere forutsigelsene
Til slutt skal vi visualisere forutsigelsene som den trenede modellen vår gjør. For dette kan vi bruke model.predict(data, batch_size=1). I guidens siste visuaslisering skal vi se to farger for bildeemnene. Om vi ser et rødt emne, betyr det at forutsigelsen ikke passet sannheten (det faktiske emnet).
![📸: Arturo Amador 📸: Arturo Amador](https://www.kode24.no/images/70338316.jpg?imageId=70338316&x=0&y=0&cropw=100&croph=100&width=643&height=368)
Som du merker, gjorde vi denne guiden som en oppskrift. Vi gravde oss ikke ned i detaljer rundt hvordan algoritmene fungerer.
Det skal vi lære i vår neste bloggpost!
![image: Norske selskaper ansetter egne robot-trenere](https://www.kode24.no/images/70293782.jpg?imageId=70293782&x=0&y=9.3124065420561&cropw=100&croph=75.233644859813&width=403&height=202&compression=80 640w, https://www.kode24.no/images/70293782.jpg?imageId=70293782&x=0&y=9.3124065420561&cropw=100&croph=75.233644859813&width=643&height=322&compression=80 1024w, https://www.kode24.no/images/70293782.jpg?imageId=70293782&x=0&y=9.3124065420561&cropw=100&croph=75.233644859813&width=402&height=202&compression=70 320w)