【问题标题】:what does nn.Linear() do in pytorch's last, and why is it necessary?nn.Linear() 在 pytorch 的最后一个中做了什么,为什么有必要?
【发布时间】:2020-01-23 17:53:17
【问题描述】:

我正在使用一些代码来训练 lstm 以生成序列。训练模型后,调用 lstm() 方法:

x = some_input
lstm_output, (h_n, c_n) = lstm(x, hc) 
funcc = nn.Linear(in_features=lstm_num_hidden,
                  output_features=vocab_size,
                  bias=True)
func_output = func(lstm_output)

我查看了nn.Linear() 的文档,但我仍然不明白这种转换在做什么以及为什么它是必要的。如果 lstm 已经经过训练,那么它给出的输出应该已经具有预先确定的维度。这个输出(lstm_output)将是生成的序列,或者在我的例子中是一个向量数组。我在这里遗漏了什么吗?

【问题讨论】:

  • 是在模型训练完成后添加的?您能否提供上下文,即训练循环。如果模型已经被训练过,那就很奇怪了。

标签: neural-network pytorch lstm recurrent-neural-network


【解决方案1】:

在这里,线性层将 LSTM 生成的隐藏状态表示 (lstm_output) 转换为大小为 vocab_size 的向量。你的理解可能是错误的。 Linear 层应与 LSTM 一起训练。

我猜你正在尝试生成一系列标记(单词),因此线性层后面应该跟一个Softmax 操作来预测词汇表上的概率分布。

【讨论】:

  • 这是有道理的,因为缺乏架构
  • lstm_output 是 logit 输出。必须在这些 logit 分数之上应用 softmax 操作才能获得概率。分布在词汇表上。
  • kmario23 你能详细说明“逻辑输出”吗?我找不到任何我能理解的文档。就我而言,我有一个使用预训练 word2vec 向量训练的 lstm。我正在尝试将该模型用作序列生成器,并且我希望我的输出是词汇表中的 word2vec 向量。 `起初我以为我可以将 nn.Linear 的 output_features 的维度设置为与 w2v 嵌入相同,但生成的序列最终过长,我认为这是由于全连接层造成的。将 Linear 的输出特征设置为我的 w2v 向量的大小是一个好方法吗?
猜你喜欢
  • 2018-12-28
  • 2019-07-21
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 2020-10-14
  • 2018-08-01
  • 2021-07-31
相关资源
最近更新 更多