激活函数

激活函数在神经网络中扮演着至关重要的角色,它们决定了神经元的输出。常见的激活函数包括 Sigmoid 和 ReLU。

Sigmoid 激活函数

Sigmoid 函数将输入值映射到 0 到 1 之间的范围,其公式如下:

def sigmoid(x):
    return 1.0 / (1.0 + np.exp(-x))

ReLU 激活函数

ReLU 函数将输入值映射到 0 或输入值本身,其公式如下:

def ReLU(x):
    return np.maximum(0,x)

神经网络实现

以下代码展示了使用 Sigmoid 和 ReLU 作为激活函数的神经网络实现:

# 定义神经网络函数
class neuralNetwork:
    # 初始化神经网络
    def __init__(self,inputnodes,hiddennodes,outputnodes,learnrate,activation_function):
        # 设立每个神经网络的输入、隐藏、输出层的节点数
        self.inodes = inputnodes
        self.hnodes = hiddennodes
        self.onodes = outputnodes
        # 设置学习率
        self.lrate = learnrate
        self.activation_function = activation_function
        self.wi_h = (np.random.rand(self.hnodes,self.inodes)-0.5)
        self.wh_o = (np.random.rand(self.onodes,self.hnodes)-0.5)

    # 训练神经网络
    def train(self,inputs_list,targets_list):
        # 输入与标准结果
        inputs = np.array(inputs_list,ndmin=2).T
        targets= np.array(targets_list, ndmin=2).T
        # 计算隐藏层的信号值
        hidden_inputs = np.dot(self.wi_h,inputs)
        hidden_outputs = self.activation_function(hidden_inputs)
        # 计算输出层的信号值
        outputs_inputs  = np.dot(self.wh_o, hidden_outputs)
        outputs_outputs = self.activation_function(outputs_inputs)
        # 计算误差:精确值-实际值
        output_errors = targets - outputs_outputs
        hidden_errors = np.dot(self.wh_o.T,output_errors)
        if self.activation_function == sigmoid:
            self.wh_o += self.lrate * np.dot((output_errors*outputs_outputs*(1.0-outputs_outputs)),
                     np.transpose(hidden_outputs))
            self.wi_h += self.lrate * np.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)),
                     np.transpose (inputs))
        elif self.activation_function == ReLU:
            self.wh_o += self.lrate * np.dot((output_errors*(outputs_outputs>0)),
                     np.transpose(hidden_outputs))
            self.wi_h += self.lrate * np.dot((hidden_errors * (hidden_outputs > 0)),
                     np.transpose(inputs))

    # 接受输入,返回输出
    # 将输出进行激活,归一化
    def query(self,input_list):
        inputs = np.array(input_list,ndmin=2).T
        hidden_inputs = np.dot(self.wi_h, inputs)
        hidden_outputs = self.activation_function(hidden_inputs)
        outputs_inputs = np.dot(self.wh_o,hidden_outputs)
        outputs_outputs = self.activation_function(outputs_inputs)
        return outputs_outputs

# 使用 sigmoid 作为激活函数
input_nodes = 3
hidden_nodes = 3
output_nodes = 3
learning_rate = 0.3
activation_function = sigmoid
n = neuralNetwork(input_nodes,hidden_nodes,output_nodes,learning_rate,activation_function)

# 使用 ReLU 作为激活函数
input_nodes = 3
hidden_nodes = 3
output_nodes = 3
learning_rate = 0.3
activation_function = ReLU
n = neuralNetwork(input_nodes,hidden_nodes,output_nodes,learning_rate,activation_function)

本文展示了如何实现 Sigmoid 和 ReLU 激活函数,并将其应用于神经网络模型。你可以根据实际需求选择合适的激活函数来构建你的神经网络模型。

神经网络中的激活函数:Sigmoid 和 ReLU 实现

原文地址: https://www.cveoy.top/t/topic/k4WZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录