《python深度学习》第六章
6.2 理解循环神经网络
首先,用numpy自己写一个简单的神经网络来认识神经网络
import numpy as np
timesteps = 10
input_features = 32
output_features = 64
# 输入数据,随机噪声,仅作示例
inputs = np.random.random((timesteps,input_features))
# 输出数据,初始状态,全零向量
state_t = np.zeros((output_features,))
# 创建随机的权重矩阵
W = np.random.random((output_features,input_features))
U = np.random.random((output_features,output_features))
b = np.random.random((output_features,))
successive_outputs = []
for input_t in inputs:
output_t = np.tanh(np.dot(W,input_t) + np.dot(U,state_t) + b)
successive_outputs.append(output_t)
# 更新网络的状态,用于下一个时间步
state_t = output_t
final_output_sequence = np.stack(successive_outputs,axis = 0)
# print(final_output_sequence)
简单理解:本层的输入,与上一层的输出有关,还有之前的状态有关
6.2.1 keras中的循环层
# 6.2.1 keras中的循环层
from keras.layers import SimpleRNN
# SimpleRNN 不仅可以处理单个输入,也可以处理批量输入
# SimpleRNN 的输出有两种模式,一种是输出每一步的结果,一种是只输出最终结果,
from keras.models import Sequential
from keras.layers import Embedding,SimpleRNN
model = Sequential()
# 举一个例子,,只输出最终结果
model.add(Embedding(10000,32))
model.add(SimpleRNN(32))
model.summary()
Layer (type) Output Shape Param #
=================================================================
embedding_1 (Embedding) (None, None, 32) 320000
_________________________________________________________________
simple_rnn_1 (SimpleRNN) (None, 32) 2080
=================================================================
Total params: 322,080
Trainable params: 322,080
Non-trainable params: 0
_________________________________________________________________
# 举一个例子,输出每一步的结果
model = Sequential()
model