神经网络中的激活函数:Sigmoid 和 ReLU 实现
激活函数
激活函数在神经网络中扮演着至关重要的角色,它们决定了神经元的输出。常见的激活函数包括 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 激活函数,并将其应用于神经网络模型。你可以根据实际需求选择合适的激活函数来构建你的神经网络模型。
原文地址: https://www.cveoy.top/t/topic/k4WZ 著作权归作者所有。请勿转载和采集!