当输入是批次主要而不是时间主要时,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之类的需要批次专业。效率分解为 –