请用python写出这道题的代码并生成可视化图
时间: 2024-10-10 13:06:29 浏览: 25
python 数据分析与可视化
5星 · 资源好评率100%
依据提供的信息,您需要构建一个简单的前馈神经网络来学习给定的数据集,并使用均方误差作为损失函数。下面是一个基本的Python实现示例,该示例使用了`numpy`进行数学运算和`matplotlib`来绘制决策边界(可视化的部分假设我们是在二维空间中观察这个简单的问题):
首先安装必要的库:
```shell
pip install numpy matplotlib
```
然后编写以下代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义sigmoid激活函数及其导数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(x):
return x * (1 - x)
# 初始化权重
np.random.seed(1)
weights_input_to_hidden = 2 * np.random.random((2, 2)) - 1 # w11,w21;w12,w22
weights_hidden_to_output = 2 * np.random.random((2, 1)) - 1 # v1,v2
# 输入和输出数据
inputs = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
expected_outputs = np.array([0, 1, 1, 0]).reshape(4,1) # y
learning_rate = 0.5
epochs = 10000
for epoch in range(epochs):
# 前向传播
hidden_layer = sigmoid(np.dot(inputs, weights_input_to_hidden))
output_layer = sigmoid(np.dot(hidden_layer, weights_hidden_to_output))
# 计算损失
loss = expected_outputs - output_layer
# 反向传播
adjustment_output = loss * sigmoid_derivative(output_layer)
adjustment_hidden = sigmoid_derivative(hidden_layer) * np.dot(adjustment_output, weights_hidden_to_output.T)
# 更新权重
weights_hidden_to_output += learning_rate * np.dot(hidden_layer.T, adjustment_output)
weights_input_to_hidden += learning_rate * np.dot(inputs.T, adjustment_hidden)
print("Output After Training:")
print(output_layer)
# 绘制决策边界
h = .02 # 决策边界步长
x_min, x_max = inputs[:, 0].min() - 1, inputs[:, 0].max() + 1
y_min, y_max = inputs[:, 1].min() - 1, inputs[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
Z = np.dot(sigmoid(np.c_[xx.ravel(), yy.ravel()] @ weights_input_to_hidden), weights_hidden_to_output)
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
plt.scatter(inputs[:, 0], inputs[:, 1], c=expected_outputs.flatten(), edgecolors='k', cmap=plt.cm.Paired)
plt.xlabel('Input X1')
plt.ylabel('Input X2')
plt.title('Decision Boundary of the Trained Network')
plt.show()
```
请注意,上述代码仅为示意性质,实际应用可能需要对参数调整以获得更好的结果。此外,由于缺少具体的任务描述或更详细的模型架构要求(例如隐藏层的确切大小),这里仅提供了一个基础版本的解决方案。如果您的项目有特定的需求或者想要优化的地方,请提供更多详细信息以便进一步定制化解答。
阅读全文