我想用 LSTM 層構建一個自動編碼器。但是,在編碼器的第一步,我得到了一個錯誤。你能幫我解決這個問題嗎?這是我嘗試構建的模型:
import numpy
import torch.nn as nn
r_input = torch.nn.LSTM(1, 1, 28)
activation = nn.functional.relu
mu_r = nn.Linear(22, 6)
log_var_r = nn.Linear(22, 6)
y = np.random.rand(1, 1, 28)
def encode_r(y):
y = torch.reshape(y, (-1, 1, 28)) # torch.Size([batch_size, 1, 28])
hidden = torch.flatten(activation(r_input(y)), start_dim = 1)
z_mu = mu_r(hidden)
z_log_var = log_var_r(hidden)
return z_mu, z_log_var
但是我的代碼中出現了這個錯誤:
RuntimeError: input.size(-1) must be equal to input_size. Expected 1, got 28.
uj5u.com熱心網友回復:
您沒有以正確的方式創建圖層。
torch.nn.LSTM需要input_size作為第一個引數,但是您的張量的維度為 28。似乎您希望編碼器輸出維度為 22 的張量。您還將批次作為第一個維度傳遞,所以您需要batch_first=True作為引數包含在內。
r_input = torch.nn.LSTM(28, 22, batch_first=True)
這應該適用于您的特定設定。您還應該注意 LSTM 回傳 2 個專案,第一個是您要使用的專案。
hidden = torch.flatten(activation(r_input(y)[0]), start_dim=1)
請閱讀官方 wiki 上的宣告以獲取更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/465897.html
