что делает nn.Linear () в последнем pytorch и зачем это нужно? - PullRequest
1 голос
/ 23 сентября 2019

Я работаю с некоторым кодом, который обучает 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) будет сгенерированной последовательностью или, в моем случае, массивом векторов.Я что-то здесь упускаю?

1 Ответ

3 голосов
/ 23 сентября 2019

Здесь линейный слой преобразует скрытые представления состояний (lstm_output), создаваемые LSTM, в вектор размером vocab_size.Ваше понимание, возможно, неправильно.Слой Linear должен быть обучен вместе с LSTM.

И я предполагаю, что вы пытаетесь сгенерировать последовательность токенов (слов), поэтому за линейным слоем должна следовать операция Softmax , чтобы предсказать распределение вероятностей по словарю.

...