Deep Learning from scratch - la théorie et la mise en œuvre du deep learning appris en Python Code du chapitre 3
#Nombre de colonnes dans la première dimension de la matrice A(3)Et le nombre de lignes dans la 0ème dimension de la matrice B(3)Est le même
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[1,2],[3,4],[5,6]])
print(a.shape) # (2, 3)Avec le nombre de colonnes dans la première dimension
print(b.shape) # (3, 2)Faire correspondre le nombre de lignes dans la 0ème dimension est obligatoire
c = np.dot(a,b)
print(c)
print(c.shape) # (2, 2)Nombre de lignes dans A, nombre de colonnes dans B
>>
[[22 28]
[49 64]]
production
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 ])
Numéro Napier e=2.71828183
Fonction d'étape lissée
la mise en oeuvre
def sigmoid(x):
return 1 / (1 + np.exp(-x))
production
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])
la mise en oeuvre
def softmax(a):
c = np.max(a) #Mesures de débordement
exp_a = np.exp(a - c)
sum_a = np.sum(exp_a)
return exp_a / sum_a
production
a = np.array([1,2,3,4,5])
softmax(a)
>>>
array([ 0.01165623, 0.03168492, 0.08612854, 0.23412166, 0.63640865])
Fonctions faciles à utiliser ・ Problème de régression: fonction constante ・ Problème de classification: fonction Softmax
load_mnist
est l'une des fonctions de généralisation résumées ci-dessous
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/dataset/mnist.py
import sys, os
sys.path.append(os.pardir) #Paramètres d'importation des fichiers dans le répertoire parent
import numpy as np
import pickle
from dataset.mnist import load_mnist
from common.functions import sigmoid, softmax
def get_data():
# flatten :Créer un tableau à une dimension
# normalize : 0 - 1
# one-hot :1 si vrai Attribuer à 0 si faux
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=False)
# (Données d'entraînement,Label de formation) (données de test,Étiquette de test)
return x_test, t_test
def init_network():
#pickle Enregistrer un objet en cours d'exécution sous forme de fichier
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()
#Couche d'entrée: 784->Couche de sortie: 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 #Nombre de lots
accuracy_cnt = 0
#Retirez 100 badges à la fois (accélérez le calcul)
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) #Du facteur le plus probable'indice'Avoir
accuracy_cnt += np.sum(p == t[i:i+batch_size])
print("Accuracy:" + str(float(accuracy_cnt) / len(x)))
Référence Apprentissage automatique que même les diplômés du secondaire peuvent comprendre (2) Perceptron simple Introduction au réseau neuronal Essayez de créer un perceptron simple avec Python