机器学习神经网络例题
时间: 2025-01-03 08:25:07 浏览: 5
### 关于机器学习中神经网络的示例题目及解答
#### 题目一:实现Sigmoid函数及其梯度
在构建神经网络的过程中,激活函数的选择至关重要。Sigmoid函数作为一种常见的激活函数,在早期的神经网络设计中有广泛应用。
定义如下:
\[ g(z) = \frac{1}{1 + e^{-z}} \]
对于给定的一组输入值 \( z \),编写Python代码以计算这些值经过Sigmoid变换后的输出以及相应的梯度:
```python
import numpy as np
def sigmoid(z):
"""
计算sigmoid函数.
参数:
z (numpy array): 输入数组
返回:
s (numpy array): 经过sigmoid转换后的结果
"""
s = 1 / (1 + np.exp(-z))
return s
def sigmoid_gradient(z):
"""
对sigmoid函数求导数.
参数:
z (numpy array): 输入数组
返回:
grad (numpy array): 导数值
"""
sig = sigmoid(z)
grad = sig * (1 - sig)
return grad
```
此段代码实现了基本的Sigmoid函数及其梯度计算[^3]。
#### 题目二:卷积操作的具体应用——边缘检测
考虑到图像处理领域内的实际应用场景之一即为边缘检测。利用简单的\(3\times3\)大小的滤波器(也叫作内核),可以通过执行卷积运算来突出显示原始图片中的边界信息。
假设存在一个灰度图像是由矩阵形式给出,则可采用特定模式下的卷积核来进行边缘增强效果展示:
```python
from scipy import signal
image_matrix = [[0, 0, 0],
[0, 1, 0],
[0, 0, 0]]
edge_detector_kernel = [[-1,-1,-1],
[-1,8,-1],
[-1,-1,-1]]
output_image = signal.convolve2d(image_matrix, edge_detector_kernel, mode='same', boundary='fill')
print(output_image)
```
上述代码片段展示了如何使用`scipy.signal.convolve2d()`函数完成二维离散线性卷积过程,并选择了与边缘检测相关的卷积核作为参数传递进去[^4]。
#### 题目三:基于反向传播算法调整权重
当涉及到训练一个多层感知机时,核心在于通过不断迭代更新各层之间的连接权值使得整个系统的预测误差逐渐减小直至收敛至局部最优解附近。这里提供了一个简化版的例子用于说明这一机制的工作流程。
假设有这样一个小型的人工神经网络架构,其中包含了两个隐藏单元和单个输出节点。为了使该模型能够更好地拟合目标标签y的真实分布情况,需要依据链式法则推导出针对每一个待估参数\(\theta_{ij}\)所对应的偏微分表达式并据此指导后续优化方向上的选择。
```python
X = np.array([[0.5], [0.7]]) # 输入样本特征向量
Y = np.array([0.9]) # 输出样本真实标签
alpha = 0.5 # 学习率设定
# 初始化随机初始权重
Theta1 = np.random.rand(2, 2)
Theta2 = np.random.rand(2)
for epoch in range(1000):
a1 = X.T.dot(Theta1).T # 第一层前馈传播
z2 = sigmoid(a1)[0]
a2 = z2.dot(Theta2) # 第二层前馈传播
h_theta = sigmoid(a2)
delta_2 = h_theta - Y # 输出层残差项
Delta2 = z2.T.dot(delta_2)# 权重变化量估计
Theta2 -= alpha * Delta2 # 更新第二层到输出层间的权重
delta_1 = delta_2.dot(Theta2.T) * sigmoid_gradient(a1)
Delta1 = X.dot(delta_1.T)
Theta1 -= alpha * Delta1.T # 更新输入层到隐含层间权重
```
这段伪代码描述了一次完整的正向传播加一次反向传播的过程,以此为基础反复循环直到满足停止条件为止[^5]。
阅读全文