當輸入是批次主要而不是時間主要時,RNN是否學習不同的依賴模式?批次與時間主要LSTM
回答
(編輯:對不起,我最初的論點就是爲什麼它有道理但我意識到,這不所以這是一個有點OT)。
我還沒有發現有TF的羣體推理在這之後,但它確實不使計算有意義,因爲操作系統是用C++編寫的。直觀地說,我們想要在相同的時間步上混合(乘法/加等)不同的特徵。不同的時間步長不能並行完成,而批量/序列可以按照特徵>批次/序列>時間步長進行。
default Numpy and C++ uses row-major通過(C狀)的存儲器佈局,使
[[ 0. 1. 2.]
[ 3. 4. 5.]
[ 6. 7. 8.]]
在存儲器是鋪設等[0,1,2,3,4,5,6,7,8]
。這意味着,如果我們有
x = np.zeros([time,batch,feature])
(在tensorflow time_major=True
)
行主內存,我們得到這樣x[0,0,0],x[0,0,1],x[0,0,2],…,x[0,1,0],...
如此前的佈局。來自相同序列和時間步(w*x[t,b,:]
)的權重和向量的點積是最接近的操作,然後是下一個序列w*x[t,b+1,:]
等。這是我們在培訓期間想要的。
隨着time_major=False
它是默認我們有[批次,時間,功能]距離相同的序列,但不同的時間步長,以便前特性是多個連續的即w*x[batch,t,:]
隨後w*x[batch,t+1,:]
等等,這可能在如果時間是用於一個序列的預測更快RNN已經推出,但這是猜測。
如果您因爲同樣的原因來到這個問題上,我學會了小心不直觀的Numpy索引,它是pythonic,不一定是Row Major。看這個。正如預期的那樣:
x = np.zeros([3,3])
x[0:9].flat = np.arange(10)
print x
> [[ 0. 1. 2.]
> [ 3. 4. 5.]
> [ 6. 7. 8.]]
我們也期望x[1] == x[0,1]
但
print x[1]
> [ 3. 4. 5.]
print x[np.arange(10)<=4]
> IndexError: index 3 is out of bounds for axis 0 with size 3
沒有在模型中嚐到了沒有什麼區別。
在時間步t,RNNs需要t-1的結果,因此我們需要計算時間主要的東西。如果是time_major=False
,則TensorFlow會將批次序列號從(batch_size, max_sequence_length)
轉換爲(max_sequence_length, batch_size)
*。它一次處理轉置的批次一行:在t = 0時,處理每個序列的第一個元素,計算隱藏狀態和輸出;在t = max_sequence_length時,處理每個序列的最後一個元素。
因此,如果您的數據已經非常耗時,請使用time_major=True
,這樣可以避免轉置。但在將數據提供給TensorFlow之前,手動調換數據沒有多大意義。
*如果您有多維輸入(例如,字嵌入序列:(batch_size, max_sequence_length, embedding_size)
),座標軸0和座標軸1被換位,導致(max_sequence_length, batch_size, embedding_size)
- 1. LSTM批次與時間步長
- 2. 需要一些主要批次fu
- 3. TensorFlow:記住下一批次的LSTM狀態(有狀態的LSTM)
- 4. 批次/ F與語法%的時間%
- 5. 與多個批次批次
- 6. LSTM時間序列分類
- 7. D3的主要和次要蜱與D3?
- 8. JAVA GC主要GC與次要GC
- 9. 星火流:長時間排隊/主動批次
- 10. Tensorflow LSTM網絡輸出整個批次的相同值
- 11. 批次檢查日期和時間
- 12. 批次選擇時間設置
- 13. 在某些時間安排批次
- 14. 時間序列的tensorflow lstm模型
- 15. RNN-LSTM時間序列Tensorflow 0.12錯誤
- 16. 使用PyTorch生成LSTM時間序列
- 17. LSTM的反向傳播時間(BPTT)
- 18. Keras:嵌入層+ LSTM:時間維度
- 19. 主要和次要目標
- 20. AltBeacon次要和主要
- 21. 批次:計算時間從時間戳經過
- 22. LSTM與Keras進行小批量培訓和在線測試
- 23. Keras LSTM預測1個時間步長在一個時間
- 24. 批次空間問題
- 25. 中間層與coreos的主要區別
- 26. 批次 - 刪除與FORFILES
- 27. 卡蒙與Datadog引發java.lang.UnsupportedClassVersionError主要/次要51.0
- 28. 主要升級與次要升級版本號碼
- 29. sniff ibeacon包與接近UUID主要次要
- 30. 繪製與主要和次要y軸c線圖#
我沒有具體的答案,但它是依賴於上下文的,例如批次的矩陣相乘在一起想要批次存儲(因爲每個matmul都是獨立的),同樣也適用於對多個圖像應用相同的卷積。圖像處理是TensorFlow的一個主要用途,所以這個公約滲透到可能不是最佳的地方並不令人感到意外。 –
在靜態LSTM的情況下怎麼樣。我想也許在一批中的時間步驟中有一些突出的屬性,但我想這些也會以時間主要形式被發現。 – ssjadon
我認爲LSTMs總是需要時間專業,因爲他們會根據時間進行切片以獲取他們的輸入。其他類型的RNN可能是例外情況,也許像WaveNet之類的需要批次專業。效率分解爲 –