神经网络模型python案例
时间: 2024-12-29 18:22:09 浏览: 5
### Python 神经网络模型实例教程
#### 创建简单神经网络结构
为了展示如何使用Python编写一个基本的神经网络,可以考虑从最基础的部分开始——定义网络架构。这通常涉及到初始化权重以及设置激活函数等操作。
```python
import numpy as np
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.weights_input_to_hidden = np.random.normal(0.0, self.hidden_nodes ** -0.5,
(self.hidden_nodes, self.input_nodes))
self.weights_hidden_to_output = np.random.normal(0.0, self.output_nodes ** -0.5,
(self.output_nodes, self.hidden_nodes))
self.lr = learning_rate
#### 设置激活函数为sigmoid####
self.activation_function = lambda x : 1 / (1 + np.exp(-x))
```
这段代码展示了如何建立一个多层感知器(MLP),其中包含了输入层、隐藏层和输出层之间的连接权值,并设定了Sigmoid作为默认激活函数[^3]。
#### 训练过程中的前向传播与反向传播机制
当有了上述的基础框架后,下一步就是实现前馈计算流程并加入误差梯度下降来优化参数:
```python
def train(self, features, targets):
n_records = features.shape[0]
delta_weights_i_h = np.zeros(self.weights_input_to_hidden.shape)
delta_weights_h_o = np.zeros(self.weights_hidden_to_output.shape)
final_outputs, hidden_outputs = self.forward_pass_train(features) # 前向传递
error = targets[:, None] - final_outputs # 输出层误差
backprop_error_term = error * final_outputs * (1 - final_outputs)
hidden_error = np.dot(backprop_error_term.T, self.weights_hidden_to_output).T
hidden_backprop_error_term = hidden_error * hidden_outputs * (1 - hidden_outputs)
# 更新权重增量
delta_weights_i_h += hidden_backprop_error_term @ features.values.reshape(n_records,-1).T
delta_weights_h_o += backprop_error_term.T @ hidden_outputs.T
# 应用梯度下降法则调整权重
self.weights_hidden_to_output += self.lr * delta_weights_h_o / n_records
self.weights_input_to_hidden += self.lr * delta_weights_i_h / n_records
def forward_pass_train(self, X):
''' 实现一次完整的前向传播 '''
hidden_inputs = np.dot(X, self.weights_input_to_hidden.T) # 隐藏层线性组合信号
hidden_outputs = self.activation_function(hidden_inputs) # 经过激活后的隐藏节点输出
final_inputs = np.dot(hidden_outputs, self.weights_hidden_to_output.T) # 输出层线性组合信号
final_outputs = final_inputs # 对于回归问题可以直接取线性输出
return final_outputs, hidden_outputs
```
此部分实现了基于均方差损失函数下的BP算法,即先执行正向传播得到预测结果;再依据实际标签计算残差;最后按照链式求导原则逆序更新各层间的链接强度[^4]。
#### 测试与评估性能表现
完成以上两步之后就可以准备一些测试样本验证所设计系统的有效性了。这里假设已经准备好了一组特征`X_test`及其对应的真值`y_true`:
```python
nn = NeuralNetwork(input_nodes=features.shape[1], hidden_nodes=hidden_size, \
output_nodes=output_size, learning_rate=learning_rate)
losses = {'train':[], 'validation':[]}
for epoch in range(epochs):
nn.train(X_train_scaled, y_train_encoded)
train_loss = MSE(y_train_encoded, nn.run(X_train_scaled))
val_loss = MSE(y_val_encoded, nn.run(X_validation_scaled))
print('Final training loss:', train_loss)
print('Final validation loss:', val_loss)
```
通过循环迭代的方式逐步降低整体成本直至收敛至局部最优解附近为止。同时记录下每次epoch结束时的表现情况以便后续分析调参[^2]。
阅读全文