[PYTHON] Lernrekord Nr. 27 (31. Tag)

Lernaufzeichnung (31. Tag)

Beginn des Studiums: Samstag, 7. Dezember

Unterrichtsmaterialien usw.: ・ Miyuki Oshige "Details! Python3 Introductory Note ”(Sotech, 2017): 12/7 (Sa) -12/19 (Do) gelesen ・ Progate Python-Kurs (insgesamt 5 Kurse): Ende 12/19 (Donnerstag) -12/21 (Samstag) ・ Andreas C. Müller, Sarah Guido "(japanischer Titel) Maschinelles Lernen ab Python" (O'Reilly Japan, 2017): 21.12. (Sa) - 23. Dezember (Sa) ・ Kaggle: Real or Not? NLP mit Katastrophen-Tweets: Veröffentlicht am Samstag, 28. Dezember, bis Freitag, 3. Januar Einstellung ・ Wes Mckinney "(japanischer Titel) Einführung in die Datenanalyse von Python" (O'Reilly Japan, 2018): 1/4 (Mittwoch) bis 1/13 (Montag) gelesen ・ Yasuki Saito "Tiefes Lernen von Null" (O'Reilly Japan, 2016): 1/15 (Mi) -1/20 (Mo) ・ ** François Chollet „Tiefes Lernen mit Python und Keras“ (Queep, 2018): 1/21 (Di) ~ **

"Deep Learning mit Python und Keras"

S.186 Kapitel 5 Fertiges Lesen bis zum tiefen Lernen für Computer Vision.

Klassifizierung von Iris nach neuronalen Netzen

Obwohl das Buch das neuronale Netzwerk anhand der handgeschriebenen Zeichen des Keras-Datensatzes erklärte, wagte ich es, es anhand des Iris-Datensatzes des sklearn zu klassifizieren.

Import verschiedener Module


from keras import models, layers
from keras.utils.np_utils import to_categorical
from sklearn import datasets
from sklearn.model_selection import train_test_split

Vorbereitung


#Spielzeugdaten lesen
iris = datasets.load_iris()

#Überprüfen Sie den Inhalt des Verzeichnisses.'data'Wann'target'Definieren Sie jeweils
dir(iris)
x = iris.data
y = iris.target

#Überprüfen Sie die Datenform
print([x.shape, y.shape])
print(iris.fearture_names)
print(x[0])

x.shape = (150, 4), y.shape = (150, )

Überprüfen Sie das Element x in iris.feature_names.

Stellen Sie sicher, dass die vier Spalten von x ['Kelchblattlänge (cm)', 'Kelchblattbreite (cm)', 'Blütenblattlänge (cm)', 'Blütenblattbreite (cm)'] entsprechen.

y ist 0 bis 2 und entspricht 3 Arten von Iris.


Normalisierung


def normalization(x):
    mean = x.mean(axis = 0)
    std = x.std(axis = 0)
    x -= mean
    x /= std
    return x

x = normalization(x)
y = to_categorical(y)

Durch Subtrahieren des Durchschnitts von x und Dividieren durch die Standardabweichung wird jedes Element so normalisiert, dass "die Mitte 0 und die Standardabweichung 1 ist". y vektorisiert auch 0 oder 1 mit to_categorical.


Für Training und Test getrennt


x_train, x_test, y_train, y_test = 
train_test_split(x, y, train_size = 0.7, random_state = 3)

print([x_train.shape, x_test.shape, y_train.shape, y_test.shape])

Geteilt für Training und Test um 7: 3. Da Shuffle standardmäßig True ist, wird nur random_state festgelegt.

Die Elemente sind [(105, 4), (45, 4), (105, 3), (45, 3)], und es wird bestätigt, dass sie richtig unterteilt werden können.


Modellbau: 2 Schichten


model = models.Sequential()

model.add(layers.Dense(64, activation = 'relu', input_shape = (x.shape[1], )))
model.add(layers.Dense(64, activation = 'relu'))
model.add(layers.Dense(3, activation = 'softmax'))

model.summary()

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

ReLU wird für die Aktivierungsfunktion jeder Schicht verwendet, und Softmax wird für die Aktivierungsfunktion der letzten Schicht verwendet. (Siehe S.119 Tabelle 4-1)

Visualisiere jede Ebene mit model.summary () last image.png

Für den Optimierer habe ich dies aus der Beschreibung ausgewählt, dass rmsprop fast ausreicht.


Lernen und Bewerten


model.fit(x_train, y_train, epochs = 100, batch_size = 1, verbose=0)

result = model.evaluate(x_test, y_test)

print(result)
#[0.15816927485995821, 0.9555555582046509]

Epochen sind vorerst 100, batch_size ist selbstverständlich 1.

Wie oben erwähnt, war das Ergebnis, obwohl es eine einfache Struktur war, eine Genauigkeit von 96%.

Aktion 1: Geben Sie die letzte Ebene des Modells aus

value error.png Da es drei Arten von Iris gibt, sollte der Fehler, der aufgetreten ist, weil ** Schichten.Dichte (3) ** in ** Schichten.Dichte (1) ** geändert werden. Es muss entsprechend der Anzahl der erforderlichen Ausgänge geändert werden. (** 10 Stück von 0 bis 9 für handschriftliche Zeichen **)

Maßnahme 2: Aufzeichnung des Lernens

log.png Dies ist kein Fehler, aber wenn keine Aufzeichnung erforderlich ist, kann dies durch Setzen des Arguments verbose = 0 behoben werden.

Recommended Posts

Lernrekord Nr. 17 (21. Tag)
Lernrekord Nr. 27 (31. Tag)
Lernrekord Nr. 21 (25. Tag)
Lernrekord Nr. 10 (14. Tag)
Lernrekord Nr. 24 (28. Tag)
Lernrekord Nr. 19 (23. Tag)
Lernrekord Nr. 29 (33. Tag)
Lernrekord Nr. 23 (27. Tag)
Lernrekord Nr. 25 (29. Tag)
Lernrekord Nr. 26 (30. Tag)
Lernrekord Nr. 20 (24. Tag)
Lernrekord Nr. 14 (18. Tag) Kaggle4
Lernrekord Nr. 15 (19. Tag) Kaggle5
Lernrekord 4 (8. Tag)
Lernrekord 3 (7. Tag)
Lernrekord 5 (9. Tag)
Lernrekord 6 (10. Tag)
Programmieren des Lernprotokolls 2. Tag
Lernrekord 8 (12. Tag)
Lernrekord 1 (4. Tag)
Lernrekord 7 (11. Tag)
Lernrekord 2 (6. Tag)
Lernrekord 16 (20. Tag)
Lernrekord 22 (26. Tag)
Lernrekord 13 (17. Tag) Kaggle3
Lernrekord 12 (16. Tag) Kaggle2
Lernaufzeichnung
Lernrekord Nr. 3
Lernrekord Nr. 1
Lernrekord Nr. 2
Lernrekord 11 (15. Tag) Kaggle-Teilnahme
Python-Lerntag 4
Lernaufzeichnung (2. Tag) Scraping von #BeautifulSoup
Bisherige Lernbilanz
Linux-Lernprotokoll ① Planen
<Kurs> Tiefes Lernen: Day2 CNN
Lernaufzeichnung (3. Tag) # CSS-Selektorbeschreibungsmethode #Scraping with BeautifulSoup
<Kurs> Tiefes Lernen: Tag 1 NN
Themen> Deep Learning: Tag 3 RNN
Erster Monat des Programmierlernens
Studiere gründlich Deep Learning [DW Tag 0]
Lernaufzeichnung (4. Tag) #Wie man den absoluten Pfad vom relativen Pfad erhält