Tabla de contenido
1. Operaciones con arreglos multidimensionales
(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
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:
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):