[PYTHON] perceptron

Deep Learning from scratch - la théorie et la mise en œuvre du deep learning appris en Python Code du chapitre 3

Produit interne (produit scalaire)

#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]]

Fonction exponentielle (exp)

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 Sigmaid

Fonction d'étape lissée

h(x)=\frac{1}{1+\exp(-x)}\

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])

Fonction Softmax

y_k=\frac{\exp(a_k)}{\sum_{i=1}^{n}\exp(a_i)}

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])

Exemple de code

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

Recommended Posts

perceptron
Pensée Perceptron dans Covector
Principes de base et mise en œuvre de Perceptron
La fondation de la fondation Perceptron
Apprentissage automatique _ Rendre le perceptron simple non linéaire