Notas de aprendizaje profundo: proceso de creación de redes neuronales (ANN) + código python

Tabla de contenido

1. Operaciones con arreglos multidimensionales

(1) matriz multidimensional

(2) Multiplicación de matrices

(3) Producto interno de la red neuronal

Implementación de red neuronal de 2.3 capas

 (1) La suma ponderada de la primera capa

 (2) Transmisión de señal desde la capa de entrada a la primera capa

(3) Transmisión de señal de capa 1 a capa 2

(4) Código completo


1. Operaciones con arreglos multidimensionales

(1) matriz multidimensional

Las dimensiones de las matrices multidimensionales se pueden obtener con la función np.ndim(). Además, la forma de la matriz se puede obtener a través de la variable de instancia forma.

Una matriz bidimensional también se denomina matriz , y la disposición horizontal de la matriz se denomina fila (fila) , y la disposición vertical se denomina columna (columna)

código:

import numpy as np
A=np.array([1,2,3,4])
print("一维数组A的维数、形状、第一维度形状:")
print(A)
print(np.ndim(A))
print(A.shape)
print(A.shape[0])
B=np.array([[1,2],[3,4],[5,6]])
print("二维数组B的维数、形状、第一维度形状:")
print(B)
print(np.ndim(B))
print(B.shape)
print(B.shape[0])

resultado de la operación:

(2) Multiplicación de matrices

El método de cálculo del producto matricial se muestra en la siguiente figura.

 El producto de matrices se puede calcular mediante la función np.dot() de NumPy (el producto también se denomina producto escalar)

código:

(cálculo del producto escalar de matriz 2*2)

A = np.array([[1,2],[3,4]])
print(A.shape)
B = np.array([[5,6],[7,8]])
print(B.shape)
print(np.dot(A,B))

resultado de la operación:

(Operación de producto punto de matriz 2*3 y matriz 3*2)

A = np.array([[1,2,3],[4,5,6]])
print(A.shape)
B = np.array([[1,2],[3,4],[5,6]])
print(B.shape)
print(np.dot(A,B))

resultado de la operación:

 (matriz 2*3 y 2*2 para operación de producto escalar)

A = np.array([[1,2,3],[4,5,6]])
print(A.shape)
B = np.array([[1,2],[3,4],[5,6]])
C = np.array([[1,2],[3,4]])
print(C.shape)
print(np.dot(A,C))

resultado de la operación:

 Aparece un mensaje de error "ValueError: formas (2,3) y (2,2) no alineadas: 3 (dim 1) != 2 (dim 0)", porque en las operaciones de matriz multidimensional, dos operaciones de producto de punto El número de correspondientes las dimensiones en la matriz deben ser las mismas .

(3) Producto interno de la red neuronal

Implemente una red neuronal simple usando matrices numpy (se omite el sesgo y las funciones de activación, solo pesos)

La siguiente figura muestra la estructura de la red neuronal simple

 código:

X = np.array([1,2])
print(X.shape)
W = np.array([[1,3,5],[2,4,6]])
print(W)
print(W.shape)
Y = np.dot(X,W)
print(Y)

resultado de la operación:

Implementación de red neuronal de 2.3 capas

La estructura de la red neuronal de 3 capas es la siguiente:

 Entre ellos, la red neuronal: la capa de entrada (capa 0) tiene 2 neuronas, la primera capa oculta (capa 1) tiene 3 neuronas, y la segunda capa oculta (capa 2) tiene 2 neuronas, la capa de salida (capa 3) tiene 2 neuronas

Aumente la neurona "1" que representa el sesgo, como se muestra en la siguiente figura:

 (1) La suma ponderada de la primera capa

Usando la multiplicación de matrices, la suma ponderada de la primera capa se puede expresar como:

A=XW+B

Implementación de código (aquí establezca la señal de entrada, el peso y el sesgo en cualquier valor)

X = np.array([1.0,0.5])
W1 = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
B1 = np.array([0.1,0.2,0.3])

A1 = np.dot(X,W1) + B1

Después de usar la función de activación sigmoide:

def sigmoid(x):
    return 1 / (1 + np.exp(-x))
X = np.array([1.0,0.5])
W1 = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
B1 = np.array([0.1,0.2,0.3])

A1 = np.dot(X,W1) + B1
Z1 = sigmoid(A1)

 (2) Transmisión de señal desde la capa de entrada a la primera capa

    código:

W2 = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
B2 = np.array([0.1,0.2])

A2 = np.dot(Z1,W2) + B2
Z2 = sigmoid(A2)

(3) Transmisión de señal de capa 1 a capa 2

   Aquí definimos la función Identity_function() (función de identidad) y la usamos como la función de activación de la capa de salida.

(Nota: la función de activación utilizada en la capa de salida debe determinarse de acuerdo con la naturaleza del problema a resolver. Generalmente, la función de identidad se puede usar para problemas de regresión, la función sigmoidea se puede usar para problemas de clasificación binaria y la La función softmax se puede usar para problemas de clasificación de clases múltiples )

def identity_function(x):
    return x
W3 = np.array([[0.1,0.3],[0.2,0.4]])
B3 = np.array([0.1,0.2])

A3 = np.dot(Z2,W3) + B3
Y = identity_function(A3) 

(4) Código completo

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 sigmoid(x):
     return 1 / (1 + np.exp(-x))

def identity_function(x):
     return x

import numpy as np

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

if __name__ == '__main__':
    network = init_network()
    x = np.array([1.0,0.5])
    y = forward(network,x)
    print(y)

Resultado de ejecución (salida y):

Supongo que te gusta

Origin blog.csdn.net/weixin_52135595/article/details/127621243
Recomendado
Clasificación