2017-08-14 111 views
0

我已經根據變量的變量維度更新了我的問題。PyTorch支持動態維度的變量嗎?

假設輸入張量存儲維度爲10x3的3d點,10表示#點,3表示特徵維度(比如x,y,z座標)。變量的維數取決於輸入張量,稱其維數爲10x10。當輸入張量將其尺寸更改爲50x3時,變量的尺寸也必須更改爲50x50。

我知道在Tensorflow中,如果輸入維度變化/未知,我們可以聲明它爲tf.placeholder(None,3)。但是,我從來沒有遇到變量大小變化/未知的情況,似乎變量總是會有固定的維度。

我目前在學習PyTorch,不知道PyTorch是否支持這個功能。任何信息,將不勝感激!

=========原始問題========

我有一個變量,其中所述尺寸是可改變的輸入尺寸的變化時。例如,如果輸入是10x2,那麼變量應該是10x10。如果輸入是25x2,那麼變量應該是25x25。根據我的理解,變量用於存儲通常具有固定維度的權重。但在我的情況下,變量的維數取決於輸入數據,這些數據可能會發生變化。 PyTorch目前是否支持這種功能?

謝謝!

+0

給輸入變量提供更多上下文有助於縮小問題的含糊性。 –

回答

1

你的問題有點模棱兩可。當你說,你的輸入是說,10x2,你需要定義輸入張量包含什麼。

我假設你正在談論torch.autograd.Variable。如果你想使用PyTorch的功能,你需要做的是通過目標函數所需形狀的張量提供你的輸入。例如,如果要使用在PyTorch中實現的RNN來輸入一個長度爲10的輸入句子,其中每個單詞都由一個300維矢量(例​​如,單詞嵌入)表示,那麼您可以執行以下操作。

rnn = nn.RNN(300, 256, 2) # emb_size=300,hidden_size=256,num_layers=2 
input = Variable(torch.randn(10, 1, 300)) # sent_length=10,batch_size=1,emb_size=300 
h0 = Variable(torch.randn(2, 1, 256)) # num_layers=2,batch_size=1,hidden_size=256 
output, hn = rnn(input, h0) 

如果您有超過1個句子,那麼您可以批量提供它們。在這種情況下,您需要填充它們以處理可變長度。正如你所看到的,RNN不關心句子長度,它可以處理可變長度,但是批量提供很多句子,你需要填充。您可以在official documentation中探索相關功能。


因爲你沒有提到什麼是您的輸入實際上,我假設你需要可變數量的時間步長的,在這種情況下PyTorch可以成爲你的目的變量。實際上,PyTorch的開發是爲了滿足構建深度神經網絡架構所需的所有基本功能。

+0

嗨瓦西,感謝您的評論!實際上輸入張量是3d點,而不是時間步長。我已更新了我的問題,並請檢查問題中的詳細信息。謝謝! –