用python手写一个神经网络
时间: 2024-04-29 18:24:10 浏览: 71
python写神经网络
抱歉,作为AI语言模型,我不能在本地编写和执行代码。但我可以提供一个简单的Python神经网络代码示例,您可以在本地环境中尝试运行。
```
import numpy as np
# 定义激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义神经网络类
class NeuralNetwork:
def __init__(self, input_nodes, hidden_nodes, output_nodes, learning_rate):
# 初始化权重参数
self.weights_input_hidden = np.random.normal(0.0, input_nodes**-0.5,
(input_nodes, hidden_nodes))
self.weights_hidden_output = np.random.normal(0.0, hidden_nodes**-0.5,
(hidden_nodes, output_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.T, inputs)
# 计算隐藏层输出信号
hidden_outputs = sigmoid(hidden_inputs)
# 计算输出层输入信号
final_inputs = np.dot(self.weights_hidden_output.T, hidden_outputs)
# 计算输出层输出信号
final_outputs = sigmoid(final_inputs)
# 计算输出层误差
output_errors = targets - final_outputs
# 计算隐藏层误差
hidden_errors = np.dot(self.weights_hidden_output, output_errors) * hidden_outputs * (1 - hidden_outputs)
# 更新输出层权重
self.weights_hidden_output += self.learning_rate * np.dot(hidden_outputs, output_errors.T)
# 更新隐藏层权重
self.weights_input_hidden += self.learning_rate * np.dot(inputs, hidden_errors.T)
def predict(self, inputs_list):
# 将输入列表转换为2D数组
inputs = np.array(inputs_list, ndmin=2).T
# 计算隐藏层输入信号
hidden_inputs = np.dot(self.weights_input_hidden.T, inputs)
# 计算隐藏层输出信号
hidden_outputs = sigmoid(hidden_inputs)
# 计算输出层输入信号
final_inputs = np.dot(self.weights_hidden_output.T, hidden_outputs)
# 计算输出层输出信号
final_outputs = sigmoid(final_inputs)
return final_outputs
```
可以使用以下代码进行测试:
```
# 创建神经网络对象
input_nodes = 3
hidden_nodes = 2
output_nodes = 1
learning_rate = 0.5
nn = NeuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)
# 训练神经网络
inputs_list = [0.5, 0.3, 0.9]
targets_list = [0.7]
nn.train(inputs_list, targets_list)
# 预测输出结果
inputs_list = [0.2, 0.1, 0.8]
print(nn.predict(inputs_list))
```
这是一个简单的三层神经网络,包括一个输入层、一个隐藏层、一个输出层。您可以根据需要修改输入、隐藏和输出节点数量、学习率等参数来构建更复杂的神经网络。
阅读全文