Deep Learning von Grund auf - die Theorie und Implementierung des in Python erlernten Deep Learning Kapitel 3 Code
#Anzahl der Spalten in der ersten Dimension der Matrix A.(3)Und die Anzahl der Zeilen in der 0. Dimension der Matrix B.(3)Ist dasselbe
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[1,2],[3,4],[5,6]])
print(a.shape) # (2, 3)Mit der Anzahl der Spalten in der ersten Dimension
print(b.shape) # (3, 2)Es ist erforderlich, die Anzahl der Zeilen in der 0. Dimension abzugleichen
c = np.dot(a,b)
print(c)
print(c.shape) # (2, 2)Anzahl der Zeilen in A, Anzahl der Spalten in B.
>>
[[22 28]
[49 64]]
Ausgabe
e = np.dot(b,a)
print(e)
>>
[[ 9 12 15]
[19 26 33]
[29 40 51]]
a = np.array([1,2,3,4,5])
b = np.exp(a)
>>>
array([ 2.71828183, 7.3890561 , 20.08553692, 54.59815003,
148.4131591 ])
Napier Nummer e=2.71828183
Glättungsschrittfunktion
Implementierung
def sigmoid(x):
return 1 / (1 + np.exp(-x))
Ausgabe
x = np.arange(-10,10,1)
y = sigmoid(x)
>>>
array([ 4.53978687e-05, 1.23394576e-04, 3.35350130e-04,
9.11051194e-04, 2.47262316e-03, 6.69285092e-03,
1.79862100e-02, 4.74258732e-02, 1.19202922e-01,
2.68941421e-01, 5.00000000e-01, 7.31058579e-01,
8.80797078e-01, 9.52574127e-01, 9.82013790e-01,
9.93307149e-01, 9.97527377e-01, 9.99088949e-01,
9.99664650e-01, 9.99876605e-01])
Implementierung
def softmax(a):
c = np.max(a) #Überlaufmaßnahmen
exp_a = np.exp(a - c)
sum_a = np.sum(exp_a)
return exp_a / sum_a
Ausgabe
a = np.array([1,2,3,4,5])
softmax(a)
>>>
array([ 0.01165623, 0.03168492, 0.08612854, 0.23412166, 0.63640865])
Einfach zu bedienende Funktionen ・ Regressionsproblem: konstante Funktion ・ Klassifizierungsproblem: Softmax-Funktion
load_mnist
ist eine der unten zusammengefassten Generalisierungsfunktionen
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/dataset/mnist.py
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():
# flatten :Erstellen Sie ein eindimensionales Array
# normalize : 0 - 1
# one-hot :1 wenn wahr Zuweisen zu 0 wenn falsch
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=False)
# (Trainingsdaten,Trainingsetikett) (Testdaten,Testetikett)
return x_test, t_test
def init_network():
#pickle Speichert ein laufendes Objekt als Datei
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()
#Eingabeebene: 784->Ausgabeschicht: 10
print(x.shape) # (10000, 784)
print(network['W1'].shape) # (784, 50)
print(network['W2'].shape) # (50, 100)
print(network['W3'].shape) # (100, 10)
print(network['b1'].shape) # (50,)
print(network['b2'].shape) # (100,)
print(network['b3'].shape) # (10,)
batch_size = 100 #Anzahl der Chargen
accuracy_cnt = 0
#Nehmen Sie jeweils 100 Abzeichen heraus (beschleunigen Sie die Berechnung)
for i in range(0, len(x), batch_size):
x_batch = x[i:i+batch_size] # x[0:100], x[100:200] ...
y_batch = predict(network, x_batch)
p = np.argmax(y_batch, axis=1) #Vom wahrscheinlichsten Faktor'Index'Erhalten
accuracy_cnt += np.sum(p == t[i:i+batch_size])
print("Accuracy:" + str(float(accuracy_cnt) / len(x)))
Referenz Maschinelles Lernen, das selbst Abiturienten verstehen können (2) Einfaches Perzeptron Einführung in das neuronale Netz Versuchen Sie, ein einfaches Perzeptron mit Python zu erstellen