Neural_Network:使用Python实现简单的前馈神经网络算法
前馈神经网络(Feedforward Neural Network,FNN)是一种最基础的人工神经网络模型,它不包含循环或反馈路径,信息仅沿着从输入层到输出层的单向传递。在这个项目中,我们将深入探讨如何使用Python来实现一个简单的前馈神经网络算法。 一、神经网络的基本构建块 1. **节点(Neuron)**:神经网络的基本计算单元,模拟生物神经元的工作原理。每个节点接收多个输入信号,通过加权求和后,经过激活函数转化为输出信号。 2. **权重(Weight)**:连接神经元之间的参数,表示输入信号对输出的影响程度。在训练过程中,权重会根据学习规则进行调整。 3. **激活函数(Activation Function)**:非线性转换函数,如sigmoid、ReLU(Rectified Linear Unit)、tanh等,引入非线性,使网络能处理更复杂的问题。 4. **层(Layer)**:包含多个节点的集合,分为输入层、隐藏层和输出层。输入层接收原始数据,输出层产生网络预测,隐藏层则进行特征学习。 二、Python实现步骤 1. **导入库**:我们需要导入必要的库,如numpy用于数学运算,sklearn用于数据预处理和评估,以及matplotlib用于可视化。 ```python import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt ``` 2. **数据准备**:包括加载数据集、划分训练集与测试集,以及数据标准化。 ```python # 加载数据,假设是CSV文件 data = np.loadtxt('data.csv', delimiter=',') # 分割特征与目标变量 X, y = data[:, :-1], data[:, -1] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 数据标准化 scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) ``` 3. **定义网络结构**:指定输入节点数、隐藏层节点数及输出节点数。 ```python input_nodes = X_train.shape[1] hidden_nodes = 10 # 可自定义 output_nodes = 1 ``` 4. **初始化权重**:随机初始化权重矩阵。 ```python weights_input_hidden = np.random.randn(input_nodes, hidden_nodes) weights_hidden_output = np.random.randn(hidden_nodes, output_nodes) ``` 5. **前向传播**:计算神经网络的输出。 ```python def forward_propagation(X, weights_input_hidden, weights_hidden_output): # 隐藏层计算 hidden_layer_input = np.dot(X, weights_input_hidden) hidden_layer_output = sigmoid(hidden_layer_input) # 输出层计算 output_layer_input = np.dot(hidden_layer_output, weights_hidden_output) output = sigmoid(output_layer_input) return output ``` 6. **激活函数**:一般选择sigmoid或ReLU。 ```python def sigmoid(x): return 1 / (1 + np.exp(-x)) ``` 7. **反向传播**:计算损失并更新权重。 ```python def backpropagation(y, output, weights_hidden_output, weights_input_hidden, X, learning_rate): # 计算输出层的梯度 output_error = y - output output_delta = output_error * sigmoid_derivative(output) # 计算隐藏层的梯度 hidden_error = np.dot(output_delta, weights_hidden_output.T) hidden_delta = hidden_error * sigmoid_derivative(hidden_layer_output) # 更新权重 weights_hidden_output += learning_rate * np.dot(hidden_layer_output.T, output_delta) weights_input_hidden += learning_rate * np.dot(X.T, hidden_delta) return weights_hidden_output, weights_input_hidden ``` 8. **训练过程**:迭代更新权重直至满足停止条件。 ```python epochs = 1000 learning_rate = 0.1 for i in range(epochs): # 前向传播 output = forward_propagation(X_train, weights_input_hidden, weights_hidden_output) # 反向传播 weights_hidden_output, weights_input_hidden = backpropagation(y_train, output, weights_hidden_output, weights_input_hidden, X_train, learning_rate) # 输出训练进度 if (i+1) % 100 == 0: print(f'Epoch {i+1}/{epochs}') ``` 9. **预测与评估**:使用训练好的模型对测试集进行预测,并计算误差。 ```python predictions = forward_propagation(X_test, weights_input_hidden, weights_hidden_output) mean_squared_error = np.mean((y_test - predictions)**2) print(f'Mean Squared Error: {mean_squared_error}') ``` 10. **可视化**:可以绘制学习曲线,展示损失随时间的变化。 ```python plt.plot(range(epochs), mse_history, label='Training loss') plt.xlabel('Epochs') plt.ylabel('Mean Squared Error') plt.legend() plt.show() ``` 通过以上步骤,我们可以完成一个简单的前馈神经网络的Python实现。值得注意的是,实际应用中可能需要调整网络结构(如增加隐藏层数或改变节点数)、优化器、损失函数等,以提高模型性能。此外,还可以考虑使用深度学习框架,如TensorFlow或PyTorch,它们提供了更高级的功能和便利性,便于构建和训练复杂的神经网络模型。
- 1
- 粉丝: 24
- 资源: 4642
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- apache-maven-3.6.1-bin.zip
- c593f5fc-d4a7-4b43-8ab2-51afc90f3f62
- IIR滤波器参数计算函数
- WPF树菜单拖拽功能,下级目录拖到上级目录,上级目录拖到下级目录.zip
- CDH6.3.2版本hive2.1.1修复HIVE-14706后的jar包
- 鸿蒙项目实战-天气项目(当前城市天气、温度、湿度,24h天气,未来七天天气预报,生活指数,城市选择等)
- Linux环境下oracle数据库服务器配置中文最新版本
- Linux操作系统中Oracle11g数据库安装步骤详细图解中文最新版本
- SMA中心接触件插合力量(插入力及分离力)仿真
- 变色龙记事本,有NPP功能,JSONview功能
评论0