python神经网络代码
时间: 2023-07-22 11:02:13 浏览: 98
以下是一个基本的 Python 神经网络代码:
```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
# 初始化权重矩阵,权重范围为 -0.5 到 0.5
self.weights_input_hidden = np.random.uniform(-0.5, 0.5, (self.hidden_nodes, self.input_nodes))
self.weights_hidden_output = np.random.uniform(-0.5, 0.5, (self.output_nodes, self.hidden_nodes))
# 初始化学习率
self.learning_rate = learning_rate
def train(self, inputs_list, targets_list):
# 将输入和目标转换为 2D 数组
inputs = np.array(inputs_list, ndmin=2).T
targets = np.array(targets_list, ndmin=2).T
# 计算隐藏层输入
hidden_inputs = np.dot(self.weights_input_hidden, inputs)
# 计算隐藏层输出
hidden_outputs = sigmoid(hidden_inputs)
# 计算输出层输入
final_inputs = np.dot(self.weights_hidden_output, hidden_outputs)
# 计算输出层输出
final_outputs = sigmoid(final_inputs)
# 计算输出层误差
output_errors = targets - final_outputs
# 计算隐藏层误差
hidden_errors = np.dot(self.weights_hidden_output.T, output_errors)
# 更新输出层权重
self.weights_hidden_output += self.learning_rate * np.dot((output_errors * final_outputs * (1 - final_outputs)), hidden_outputs.T)
# 更新隐藏层权重
self.weights_input_hidden += self.learning_rate * np.dot((hidden_errors * hidden_outputs * (1 - hidden_outputs)), inputs.T)
def query(self, inputs_list):
# 将输入转换为 2D 数组
inputs = np.array(inputs_list, ndmin=2).T
# 计算隐藏层输入
hidden_inputs = np.dot(self.weights_input_hidden, inputs)
# 计算隐藏层输出
hidden_outputs = sigmoid(hidden_inputs)
# 计算输出层输入
final_inputs = np.dot(self.weights_hidden_output, hidden_outputs)
# 计算输出层输出
final_outputs = sigmoid(final_inputs)
return final_outputs
```
这个神经网络包含一个输入层、一个隐藏层和一个输出层,使用 sigmoid 激活函数,并且使用反向传播算法进行训练。你可以根据需要修改其节点数、学习率等参数。
阅读全文