神经元的python实现

  • 可能用到的激活函数
In [6]:
import numpy as np 
# sigmoid函数
def sigmoid(x):
    return 1/(1+np.exp(-x))

与书中不同,这里我按类实现

In [4]:
import numpy as np
def sigmoid(x):
    '''
    sigmoid激活函数
    '''
    return 1/(1+np.exp(-x))

def fn(x):
    return x

class trimind:
    '''
    输出层神经元为两个
    '''
    def __init__(self):
        '''
        权重和偏置的初始化
        '''
        self.network={}
        # 第一层
        self.network['w1']=np.array([[0.1,0.2,0.3],[0.2,0.4,0.6]])
        self.network['b1']=np.array([0.1,0.2,0.3])
        # 第二层
        self.network['w2']=np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
        self.network['b2']=np.array([0.1, 0.2])
        # 第三层
        self.network['w3']=np.array([[0.1,0.3],[0.2,0.4]])
        self.network['b3']=np.array([0.1, 0.2])
    
    def forward(self,x:np.array):
        '''
        神经元的正向传播
        '''
        w1,w2,w3=self.network['w1'],self.network['w2'],self.network['w3']
        b1,b2,b3=self.network['b1'],self.network['b2'],self.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=fn(a3)
        return y

network3=trimind()
in_x=np.array([0.1,0.5])

print(network3.forward(in_x))
[0.31215871 0.68589541]