- 卷积神经网络与循环神经网络简单对比
- CNN: 借助卷积核(kernel)提取特征后,送入后续网络(如全连接网络 Dense),进行分类、目标检测等操作。CNN 借助卷积核从空间维度提取信息,卷积核参数空间共享。
- RNN: 借助循环核(cell)提取特征后,送入后续网络(如全连接网络 Dense),进行预测等操作。RNN 借助循环核从时间维度提取信息,循环核参数时间共享。
- TF描述循环计算层:送入RNN之前,x_train维度是[送入样本数, 循环核时间展开步数, 每个时间步输入特征个数]
1、tf.keras.layers.SimpleRNN
tf.keras.layers.SimpleRNN(记忆体个数, activation=‘激活函数’ , return_sequences=是否每个时刻输出ht到下一层)
activation=‘激活函数’ (不写,默认使用tanh)
return_sequences=True 各时间步输出ht,return_sequences=False 仅最后时间步输出ht(默认)
# 举例如下
SimpleRNN(3, return_sequences=True)
2、tf.keras.layers.Embedding
tf.keras.layers.Embedding:词向量空间编码层
tf.keras.layers.Embedding(词汇表大小,编码维度)
词汇表大小:编码一共要表示多少个单词;
编码维度:用几个数字表达一个单词;
输入维度:二维张量[送入样本数,循环核时间展开步数]
输出维度:三维张量[送入样本数,循环核时间展开步数,编码维度]
# 举例如下
tf.keras.layers.Embedding(100, 3)
#对数字 1-100 进行编码,词汇表大小就是 100 ;每个自然数用三个数字表示,编码维度就是 3;所以 Embedding层的参数是 100 和 3。
# 比如数字[4] embedding 为 [0.25, 0.1, 0.11]。
送入RNN中,我们可以这么写
x_train = np.reshape(x_train, (len(x_train), 1))
# 之后送入代码块中,在model=tf.keras.Sequential中,首先写如下代码
Embedding(5, 2) # 表示一共有5个元素,每个元素用2个维度表示
3、tensorflow.keras.layers.LSTM
tensorflow.keras.layers.LSTM(记忆体个数, activation=‘激活函数’ , return_sequences=是否每个时刻输出ht到下一层)
activation=‘激活函数’ (不写,默认使用tanh)
return_sequences=True 各时间步输出ht,return_sequences=False 仅最后时间步输出ht(默认)
# 举例如下
model = tf.keras.Sequential([
LSTM(80, return_sequences=True),
Dropout(0.2),
LSTM(100),
Dropout(0.2),
Dense(1)
])
4、tensorflow.keras.layers.GRU
tensorflow.keras.layers.GRU(记忆体个数, activation=‘激活函数’ , return_sequences=是否每个时刻输出ht到下一层)
activation=‘激活函数’ (不写,默认使用tanh)
return_sequences=True 各时间步输出ht,return_sequences=False 仅最后时间步输出ht(默认)
# 举例如下
model = tf.keras.Sequential([
GRU(80, return_sequences=True),
Dropout(0.2),
GRU(100),
Dropout(0.2),
Dense(1)
])