[PYTHON] Deep Learning / Deep Learning von Grund auf neu Kapitel 3 Memo

1. Zuallererst

Ich lese ein Meisterwerk, ** "Deep Learning from Zero" **. Diesmal ist ein Memo von Kapitel 3. Um den Code auszuführen, laden Sie den gesamten Code von Github herunter und verwenden Sie das Jupiter-Notizbuch in Kapitel 03.

Neuronales Netzwerk mit 2,3 Schichten

Betrachten Sie ein dreischichtiges neuronales Netzwerk. Unter der Annahme, dass die Anzahl der Neuronen die Eingangsschicht 2, die erste Schicht 3, die zweite Schicht 2 und die Ausgangsschicht 2 ist, kann die Vorwärtsausbreitung durch die folgende Matrixberechnung durchgeführt werden. スクリーンショット 2020-04-28 10.52.24.png スクリーンショット 2020-04-28 10.52.38.png

import numpy as np

def sigmoid(x):
    return 1/(1+np.exp(-x))

def identity_function(x):
    return x

def init_network():
    network={}
    network['W1']=np.array([[0.1, 0.3, 0.5],[0.2, 0.4, 0.6]])
    network['b1']=np.array([0.1, 0.2, 0.3])
    network['W2']=np.array([[0.1, 0.4],[0.2, 0.5],[0.3, 0.6]])
    network['b2']=np.array([0.1, 0.2])
    network['W3']=np.array([[0.1, 0.3],[0.2, 0.4]])
    network['b3']=np.array([0.1, 0.2])    
    return network

def forward(network, x):
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    a1 = np.dot(x, W1)+b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1, W2)+b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3)+b3
    y = identity_function(a3)    
    return y
        
network=init_network()
x = np.array([1.0, 0.5])
y = forward(network, x)
print(y)

#Ausgabe
[0.31682708 0.69627909]

3. Argumentation mit einem trainierten Modell

Der Text speichert die trainierten Parameter des Netzwerks, die die Zahlen 0-9 (MNIST) identifizieren, und wird verwendet, um Rückschlüsse zu ziehen.

Die Anzahl der Neuronen im Netzwerk beträgt 784 in der Eingangsschicht, 50 in der ersten Schicht, 100 in der zweiten Schicht und 10 in der Ausgangsschicht. Wie zuvor kann die Vorwärtsausbreitung durch die folgende Matrixoperation ausgedrückt werden. スクリーンショット 2020-04-28 11.18.37.png スクリーンショット 2020-04-28 11.16.02.png

import sys, os
sys.path.append(os.pardir)  #Einstellungen zum Importieren von Dateien in das übergeordnete Verzeichnis
import numpy as np
import pickle
from dataset.mnist import load_mnist
from common.functions import sigmoid, softmax

def get_data():
    (x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=False)
    return x_test, t_test

def init_network():
    with open("sample_weight.pkl", 'rb') as f:
        network = pickle.load(f)
    return network

def predict(network, x):
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    y = softmax(a3)
    return y

x, t = get_data()
network = init_network()
accuracy_cnt = 0
pred = []  #Bereiten Sie eine Liste vor, um das Inferenzergebnis zu speichern
for i in range(len(x)):
    y = predict(network, x[i])
    p = np.argmax(y) #Holen Sie sich den Index des wahrscheinlichsten Elements
    pred.append(p)  #Inferenzergebnisse speichern
    if p == t[i]:
        accuracy_cnt += 1

print("Accuracy:" + str(float(accuracy_cnt) / len(x)))

#Ausgabe
Accuracy:0.9352

Da ich die Inferenzergebnisse später einzeln sehen möchte, habe ich eine Liste hinzugefügt, um die Inferenzergebnisse "pred = []" und die Inferenz "pred.append (p)" im Code zu speichern.

Schauen wir uns nun an, wie wir individuelle Vorhersagen treffen. Da die Variable x das Bild enthält und die Variable pred das Inferenzergebnis enthält,

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10, 12))
for i in range(50):
    ax = fig.add_subplot(10, 10, i+1, xticks=[], yticks=[])
    ax.imshow(x[i].reshape((28, 28)), cmap='gray')
    ax.set_xlabel('pred='+str(pred[i]))

スクリーンショット 2020-04-28 10.03.36.png Die Inferenzergebnisse der 50 Bilder vom Anfang der Bilddaten werden angezeigt. Ich habe nur mit den beiden Bildern im roten Rahmen einen Fehler gemacht, was sehr gut ist.

4. Stapelverarbeitung

Übrigens ist es effizient, 100 Blätter gleichzeitig zu stapeln, auch wenn Sie dies beim Ableiten nicht einzeln tun. In diesem Fall müssen Sie nur den Inferenzteil des vorherigen Codes ändern.

batch_size = 100 #Anzahl der Chargen
accuracy_cnt = 0
pred = np.array([])  #Feld zum Speichern von Inferenzergebnissen(numpy)Bereiten
for i in range(0, len(x), batch_size):
    x_batch = x[i:i+batch_size]
    y_batch = predict(network, x_batch)
    p = np.argmax(y_batch, axis=1)
    pred = np.append(pred, p) #Inferenzergebnisse speichern
    accuracy_cnt += np.sum(p == t[i:i+batch_size])

print("Accuracy:" + str(float(accuracy_cnt) / len(x)))
pred = pred.astype(int)  #Inferenzergebnisse von float in int konvertieren

Nach wie vor haben wir Code hinzugefügt, um die Inferenzergebnisse zu speichern. Dieses Mal wird das Inferenzergebnis für die Stapelverarbeitung im Numpy-Format zurückgegeben. Bereiten Sie also das Feld zum Speichern von "pred = np.array ([])" und zum Speichern von "pred = np.append (pred, p)" vor. , Wenn es so bleibt wie es ist, wird es als" 1.0 "angezeigt. Um es am Ende auf eine Ganzzahl zurückzusetzen, wird pred = pred.astype (int) `gesetzt.

Der Punkt hier ist nun "y_batch = Vorhersagen (Netzwerk, x_Batch)". Dies bedeutet, dass wir 100 Daten in den Netzwerkeingang einfügen, sodass wir 100 Ausgänge erhalten. Apropos Bild der Matrixoperation früher,

スクリーンショット 2020-04-28 11.14.38.png

Recommended Posts

Deep Learning / Deep Learning von Grund auf neu 2 Kapitel 4 Memo
Deep Learning / Deep Learning von Grund auf neu Kapitel 3 Memo
Deep Learning / Deep Learning von Null 2 Kapitel 5 Memo
Deep Learning / Deep Learning von Null 2 Kapitel 7 Memo
Deep Learning / Deep Learning von Null 2 Kapitel 8 Memo
Deep Learning / Deep Learning von Grund auf neu Kapitel 5 Memo
Deep Learning / Deep Learning von Grund auf neu Kapitel 4 Memo
Deep Learning / Deep Learning von Grund auf neu 2 Kapitel 3 Memo
Deep Learning / Deep Learning von Null 2 Kapitel 6 Memo
[Lernnotiz] Deep Learning von Grund auf neu gemacht [Kapitel 7]
Deep Learning / Deep Learning von Grund auf neu Kapitel 6 Memo
[Lernnotiz] Deep Learning von Grund auf neu gemacht [Kapitel 5]
[Lernnotiz] Deep Learning von Grund auf neu gemacht [Kapitel 6]
Deep Learning / Deep Learning von Grund auf neu Kapitel 7 Memo
[Lernnotiz] Deep Learning von Grund auf neu gemacht [~ Kapitel 4]
Deep Learning von Grund auf neu Kapitel 2 Perceptron (Memo lesen)
Verbessertes Lernen, um von null bis tief zu lernen
"Deep Learning from Grund" Memo zum Selbststudium (Teil 12) Deep Learning
Deep Learning von Grund auf neu
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 9) MultiLayerNet-Klasse
Deep Learning von Grund auf neu ① Kapitel 6 "Lerntechniken"
[Lernnotiz] Deep Learning von Grund auf ~ Implementierung von Dropout ~
"Deep Learning from Grund" Memo zum Selbststudium (10) MultiLayerNet-Klasse
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 11) CNN
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 19) Datenerweiterung
Python-Lernnotiz für maschinelles Lernen von Chainer aus Kapitel 2
Deep Learning 2 von Grund auf 1.3 Verarbeitung natürlicher Sprache 1.3 Zusammenfassung
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 1
Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 5
Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 2
Tiefes Lernen von Grund auf neu (Kostenberechnung)
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 3
Ein Amateur stolperte in Deep Learning von Grund auf neu. Hinweis: Kapitel 7
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 5
Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 1
Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 4
Selbststudien-Memo "Deep Learning from Grund" (Nr. 18) Eins! Miau! Grad-CAM!
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 4
Deep Learning Memo von Grund auf neu gemacht
Tiefes Lernen
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 2
Selbststudien-Memo "Deep Learning from Grund" (Nr. 15) TensorFlow-Anfänger-Tutorial
Deep Learning Tutorial aus dem Umgebungsbau
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 14) Führen Sie das Programm in Kapitel 4 in Google Colaboratory aus
"Deep Learning from Grund" Memo zum Selbststudium (Teil 8) Ich habe die Grafik in Kapitel 6 mit matplotlib gezeichnet
Selbststudien-Memo "Deep Learning from Grund" (Nr. 13) Verwenden Sie Google Colaboratory
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 10-2) Anfangswert des Gewichts
Tiefes Lernen von Grund auf neu (Vorwärtsausbreitung)
Tiefes Lernen / Tiefes Lernen von Grund auf 2-Versuchen Sie, GRU zu bewegen
Bildausrichtung: von SIFT bis Deep Learning
"Deep Learning von Grund auf neu" mit Haskell (unvollendet)
[Windows 10] Aufbau einer "Deep Learning from Scratch" -Umgebung
Lernbericht über das Lesen von "Deep Learning von Grund auf neu"
[Deep Learning von Grund auf neu] Über die Optimierung von Hyperparametern
Deep Learning aus den mathematischen Grundlagen (während der Teilnahme)
LPIC201 Studiennotiz
Django Lernnotiz