Files
obsidian_sycn/编程经验/Pytorch/个人总结/Pytorch中GRU模型的关键参数及输入输出维度.md
T
2026-07-31 15:28:08 +08:00

47 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 一、GRU模型的关键参数
1. input_size:输入的特征数,代表输入序列数据中每个值由多少个特征表示,比如NLP中,每个单次由几维的词向量表示;
> 个人经验:在氢燃料电池系统性能均值预测模型中,input_size代表了输入序列中每个值有多少个特征维度;
2. hidden_size:隐藏层特征数;
3. num_layers:代表GRU的层数;
4. bias:是否带有偏置, False则没有偏置,即$b_{ih}=0, b_{hh}=0$. 默认为True
5. batch_first:输入序列中,第一个维度是否为batch. 默认为False;
6. dropout:除最后一层,每一层的输出都进行dropout,默认为: 0
7. bidirectional:是否为双向GRU,默认为False;
## 二、GRU模型的输入和输出及维度
### 2.1 输入
1. GRU模型的输入为input和$h_0$,其中input是输入的序列数据,$h_0$是第一个GRU cell的隐藏层在每个batch中的初始值,$h_0$可以不提供,系统会默认生成一个符合维度要求的全零tensor。
2. 输入维度:
1. input,当参数batch_first为False时,input的维度为(seq_size, batch_size, feature_size),当batch_first为True时,input的维度为(batch_size, seq_size, feature_size)
2. $h_0$的维度为(num_layers×GRU方向数,batch_sizehidden_size)
### 2.2 输出
1. GRU模型的输出为output和$h_n$,其中output为模型输出值,$h_n$为模型最后一个GRU cell的隐藏层状态;
2. 输出维度:
1. output的维度为(seq_sizebatch_sizenum_layers×GRU方向数)
2. $h_n$的维度为(num_layers×GRU方向数,batch_sizehidden_size)
> 1. GRU方向数:当bidirectional为True时,GRU方向数为2,当bidirectional为False时,GRU方向数为1
> 2. seq_size为输入的单个序列长度,对于NLP代表了每个句子的长度,对于氢燃料电池系统性能均值预测模型中,seq_size代表了序列的时间窗口长度;
## 三、对应关系
1. GRU设置参数中input_size与输入序列input的最后一个维度即feature_size对应;
2. GRU设置参数中hidden_size与输入$h_0$、输出output和$h_n$的最后一个维度对应;
3. GRU设置参数中num_layers与输入$h_0$、输出$h_n$的第一个维度中num_layers对应;
4. GRU设置参数中bidirectional与输入$h_0$、输出output和$h_n$的第一个维度中GRU方向数对应;
5. GRU输入和输出中seq_size、batch_size不变,但是最后一个维度由输入的feature_size变为输出的hidden_size
> 由于上述对应关系,在encoder-decoder架构中,decoder和encoder的hidden_size必须保持一致,否则会出现维度不匹配的问题;
## 参考文献
1. [循环神经网络 - torch.nn.GRU()参数详解](https://blog.51cto.com/u_11299290/4727876)
2. [RNN, LSTM, GRU中输入输出维度](https://blog.csdn.net/sophicchen/article/details/108005115)