请给出使用Python语言编写的神经网络的学习算法代码
时间: 2023-05-27 17:06:40 浏览: 122
以下是使用Python语言编写的简单神经网络学习算法代码:
```
import numpy as np
# 定义sigmoid函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义神经网络类
class NeuralNetwork:
def __init__(self, input_nodes, hidden_nodes, output_nodes, learning_rate):
# 初始化神经网络参数
self.input_nodes = input_nodes
self.hidden_nodes = hidden_nodes
self.output_nodes = output_nodes
self.learning_rate = learning_rate
# 初始化权重矩阵
self.weights_input_hidden = np.random.normal(0.0, pow(self.hidden_nodes, -0.5), (self.hidden_nodes, self.input_nodes))
self.weights_hidden_output = np.random.normal(0.0, pow(self.output_nodes, -0.5), (self.output_nodes, self.hidden_nodes))
# 初始化偏置项
self.bias_hidden = np.zeros((self.hidden_nodes, 1))
self.bias_output = np.zeros((self.output_nodes, 1))
# 定义前向传播函数
def forward(self, inputs):
# 计算隐藏层输入
hidden_inputs = np.dot(self.weights_input_hidden, inputs) + self.bias_hidden
# 计算隐藏层输出
hidden_outputs = sigmoid(hidden_inputs)
# 计算输出层输入
output_inputs = np.dot(self.weights_hidden_output, hidden_outputs) + self.bias_output
# 计算输出层输出
output_outputs = sigmoid(output_inputs)
return hidden_outputs, output_outputs
# 定义反向传播函数
def backward(self, inputs, hidden_outputs, output_outputs, targets):
# 计算输出层误差
output_errors = targets - output_outputs
# 计算隐藏层误差
hidden_errors = np.dot(self.weights_hidden_output.T, output_errors) * hidden_outputs * (1 - hidden_outputs)
# 更新输出层权重和偏置项
self.weights_hidden_output += self.learning_rate * np.dot(output_errors * output_outputs * (1 - output_outputs), hidden_outputs.T)
self.bias_output += self.learning_rate * output_errors * output_outputs * (1 - output_outputs)
# 更新隐藏层权重和偏置项
self.weights_input_hidden += self.learning_rate * np.dot(hidden_errors, inputs.T)
self.bias_hidden += self.learning_rate * hidden_errors
# 定义训练函数
def train(self, inputs_list, targets_list):
# 将输入和目标值转化为二维数组
inputs = np.array(inputs_list, ndmin=2).T
targets = np.array(targets_list, ndmin=2).T
# 前向传播
hidden_outputs, output_outputs = self.forward(inputs)
# 反向传播
self.backward(inputs, hidden_outputs, output_outputs, targets)
# 定义预测函数
def predict(self, inputs_list):
# 将输入转化为二维数组
inputs = np.array(inputs_list, ndmin=2).T
# 前向传播
_, output_outputs = self.forward(inputs)
return output_outputs
```
该代码实现了一个简单的全连接前馈神经网络,包括初始化网络参数、前向传播、反向传播、训练和预测等功能。其中,`sigmoid`函数用于激活神经元,`NeuralNetwork`类用于定义神经网络结构和实现学习算法。在训练过程中,将输入和目标值分别传入神经网络中进行前向传播和反向传播;在预测过程中,只需要将输入传入神经网络中进行前向传播即可得到输出值。
阅读全文