神经网络原理
神经网络是一种模拟人类神经系统工作方式的机器学习算法。它由多个称为神经元的基本单元组成,这些神经元相互连接并传递信息。神经网络广泛应用于图像和语音识别、自然语言处理、预测和分类等领域。
神经元
神经元是神经网络的基本单元。它接收输入信号,并通过激活函数对输入进行加权和处理,然后将输出传递给下一层的神经元。神经元的结构如下所示:
class Neuron:
def __init__(self, weights, bias):
self.weights = weights
self.bias = bias
def activate(self, inputs):
total = 0
for i in range(len(inputs)):
total += inputs[i] * self.weights[i]
total += self.bias
return self.sigmoid(total)
def sigmoid(self, x):
return 1 / (1 + math.exp(-x))
在上面的代码中,weights
表示神经元的权重,bias
表示偏置项。activate
方法对输入进行加权求和并通过sigmoid
函数进行激活。
神经网络结构
神经网络由多个神经元组成,这些神经元按层次结构排列。通常包括输入层、隐藏层和输出层。输入层接收外部输入,隐藏层和输出层根据权重和偏置项进行计算和传递。
class NeuralNetwork:
def __init__(self, layer_sizes):
self.layers = []
for i in range(1, len(layer_sizes)):
self.layers.append(self.create_layer(layer_sizes[i - 1], layer_sizes[i]))
def create_layer(self, input_size, output_size):
layer = []
for _ in range(output_size):
weights = [random.uniform(-1, 1) for _ in range(input_size)]
bias = random.uniform(-1, 1)
layer.append(Neuron(weights, bias))
return layer
def feedforward(self, inputs):
for layer in self.layers:
outputs = []
for neuron in layer:
outputs.append(neuron.activate(inputs))
inputs = outputs
return outputs
在上面的代码中,NeuralNetwork
类接受一个整数列表layer_sizes
作为参数,该列表定义了每个层次的神经元数量。create_layer
方法用于创建每个层次的神经元,并随机初始化权重和偏置项。
feedforward
方法用于将输入信号传递到网络中的每个层次,最终返回输出层的输出。
训练神经网络
为了让神经网络能够进行预测和分类,我们需要对其进行训练。训练过程主要包括前向传播和反向传播。
前向传播通过将输入信号传递到网络中的每个层次并计算输出。然后,通过计算预测值与真实值之间的误差来评估网络的性能。
反向传播用于更新权重和偏置项,以减小误差并改善网络的性能。它通过计算误差梯度并反向传递到每个神经元来实现。
class NeuralNetwork:
...
def train(self, inputs, targets, learning_rate):
outputs = self.feedforward(inputs)
errors = [targets[i] - outputs[i] for i in range(len(targets))]
for i in range(len(self.layers) - 1, -1, -1):
layer = self.layers[i]
next_layer = self.layers[i + 1] if i < len(self.layers) - 1 else None
for j, neuron in enumerate(layer):
if next_layer:
error = 0
for next_neuron in next_layer:
error += next_neuron.weights[j] * errors[next_layer.index(next_neuron)]
errors[j] = error
for k in range(len(neuron.weights)):
neuron.weights[k] += learning_rate * errors[j] * outputs[j] * (1 - outputs[j]) * inputs[k]
neuron.bias += learning_rate * errors[j] * outputs[j] * (1 - outputs[j])
在上面的代码中,train
方法接受输入数据、目标输出和学习率作