用python写一个神经网络向前传播:1.实现dense函数以及sequential函数的编写 2.通过dense函数初始化神经网络的隐藏层以及sequential函数将隐藏层之间链接起来
时间: 2023-12-23 08:02:36 浏览: 65
好的,我可以帮你回答这个问题。
首先,我们需要定义一个dense函数,它将计算输入x和权重w的矩阵乘积,并添加偏置b。该函数可以用以下代码实现:
```python
import numpy as np
def dense(x, w, b):
"""
计算输入x和权重w的矩阵乘积,并添加偏置b
"""
return np.dot(x, w) + b
```
接下来,我们将使用这个dense函数来初始化我们的神经网络的隐藏层。我们可以使用一个字典来存储神经网络的参数(权重和偏置),并使用一个列表来存储每个隐藏层的大小。
```python
params = {
'W1': np.random.randn(input_size, hidden_size) * np.sqrt(1. / input_size),
'b1': np.zeros(hidden_size),
'W2': np.random.randn(hidden_size, output_size) * np.sqrt(1. / hidden_size),
'b2': np.zeros(output_size)
}
hidden_sizes = [64, 32, 16]
```
接下来,我们可以使用sequential函数将隐藏层之间链接起来。该函数将接受输入x和参数params,并计算前向传播。代码如下:
```python
def sequential(x, params, hidden_sizes):
"""
将隐藏层之间链接起来
"""
# 遍历隐藏层并计算前向传播
for i, h in enumerate(hidden_sizes):
# 初始化权重和偏置
w = params[f'W{i+1}']
b = params[f'b{i+1}']
# 计算前向传播
x = dense(x, w, b)
# 使用ReLU激活函数
x = np.maximum(0, x)
# 计算输出层的前向传播
w = params['W2']
b = params['b2']
y_pred = dense(x, w, b)
# 返回预测结果
return y_pred
```
现在,我们已经实现了一个简单的神经网络前向传播的框架。我们可以使用以下代码测试它:
```python
# 定义输入、输出和隐藏层的大小
input_size = 784
output_size = 10
hidden_size = 128
# 生成随机输入数据和参数
x = np.random.randn(1, input_size)
params = {
'W1': np.random.randn(input_size, hidden_size) * np.sqrt(1. / input_size),
'b1': np.zeros(hidden_size),
'W2': np.random.randn(hidden_size, output_size) * np.sqrt(1. / hidden_size),
'b2': np.zeros(output_size)
}
# 计算前向传播
y_pred = sequential(x, params, [64, 32])
print(y_pred)
```
这应该会输出一个大小为(1, 10)的数组,其中包含神经网络的输出。
阅读全文