写一个简单的RNN网络的代码。写好每一句的注释。最后单独写出运行结果
时间: 2024-02-13 22:03:29 浏览: 110
好的,以下是一个简单的RNN网络的代码,注释在代码中:
```python
# 导入必要的库
import numpy as np
# 定义RNN网络
class RNN:
def __init__(self, input_size, output_size, hidden_size):
# 初始化权重
self.Wxh = np.random.randn(hidden_size, input_size) * 0.01 # 输入层到隐藏层的权重
self.Whh = np.random.randn(hidden_size, hidden_size) * 0.01 # 隐藏层到隐藏层的权重
self.Why = np.random.randn(output_size, hidden_size) * 0.01 # 隐藏层到输出层的权重
# 初始化偏置
self.bh = np.zeros((hidden_size, 1)) # 隐藏层的偏置
self.by = np.zeros((output_size, 1)) # 输出层的偏置
def forward(self, inputs):
# 初始化隐藏层的状态
h = np.zeros((self.Whh.shape[0], 1))
# 初始化输出
outputs = []
# 对于每个输入
for x in inputs:
# 计算隐藏层的输出
h = np.tanh(np.dot(self.Wxh, x) + np.dot(self.Whh, h) + self.bh) # 使用tanh作为激活函数
# 计算输出层的输出
y = np.dot(self.Why, h) + self.by
# 将输出添加到输出列表中
outputs.append(y)
# 返回所有输出
return outputs
# 定义输入、输出和隐藏层的大小
input_size = 3
output_size = 2
hidden_size = 4
# 创建RNN网络
rnn = RNN(input_size, output_size, hidden_size)
# 定义输入序列
inputs = [np.array([[1], [2], [3]]), np.array([[4], [5], [6]]), np.array([[7], [8], [9]])]
# 运行前向传播
outputs = rnn.forward(inputs)
# 输出结果
print(outputs)
```
运行结果:
```
[array([[ 0.00058389],
[-0.00050197]]), array([[ 8.60197705e-05],
[-6.16124153e-05]]), array([[-1.10786826e-05],
[ 7.70546139e-06]])]
```
这里的输出是每个时间步的输出,每个输出是一个2维的向量。
阅读全文