用numpy写出实现RNN
时间: 2024-02-28 09:25:36 浏览: 74
以下是一个简单的用numpy实现RNN的示例:
```python
import numpy as np
# 输入数据
X = [1, 2, 3, 4, 5]
# 定义参数
hidden_size = 4 # 隐藏层大小
input_size = 1 # 输入数据大小
output_size = 1 # 输出数据大小
# 初始化权重
Wxh = np.random.randn(hidden_size, input_size) * 0.01
Whh = np.random.randn(hidden_size, hidden_size) * 0.01
Why = np.random.randn(output_size, hidden_size) * 0.01
# 初始化偏置
bh = np.zeros((hidden_size, 1))
by = np.zeros((output_size, 1))
# 定义前向传播函数
def forward(inputs, hprev):
# 存储中间值
hs = {}
ys = {}
# 初始化当前隐藏层状态
hs[-1] = np.copy(hprev)
# 遍历输入数据
for t in range(len(inputs)):
# 将输入数据转化为列向量
xs = np.array([[inputs[t]]]).T
# 计算当前隐藏层状态
hs[t] = np.tanh(np.dot(Wxh, xs) + np.dot(Whh, hs[t-1]) + bh)
# 计算当前输出
ys[t] = np.dot(Why, hs[t]) + by
return hs, ys
# 测试
hprev = np.zeros((hidden_size, 1))
hs, ys = forward(X, hprev)
# 输出结果
print("输入数据:", X)
print("隐藏层状态:", hs)
print("输出数据:", ys)
```
该代码实现了一个简单的RNN,其中用numpy实现了前向传播函数。在该示例中,输入数据是一组数字序列,RNN可以根据前一个隐藏层状态和当前输入数据计算出下一个隐藏层状态和输出数据。
阅读全文