将 BooleanTensor 打包到 ByteTensor 会影响 LSTM(或其他 ML 模型)的训练吗?
Does packing BooleanTensor's to ByteTensor's affect training of LSTM (or other ML models)?
我正在研究 LSTM 来生成音乐。我的输入数据将是大小为 88xLx3
的 BooleanTensor
,88
是可用音符的数量,L
是将按顺序排列的每个“片段”的长度1k - 10k(待定),3
是“主旋律”、“伴奏”和“低音”的部分。 0
的值表示该部分(乐器)当时未播放该特定音符,而 1
表示它正在播放。
问题是BooleanTensor
的每个条目在内存中占用space的1字节而不是1位,这浪费了很多宝贵的GPU内存。
作为解决方案,我考虑将每个 BooleanTensor
打包到大小为 11xLx3
或 88x(L/8)x3
.
的 ByteTensor
(uint8)
我的问题是:这样打包数据是否会对 LSTM 的学习和生成产生影响,或者基于 ByteTensor
的数据和模型是否等同于基于 BooleanTensor
的数据和模型?实践中的同行?
我不会真正关心输入采用 X 而不是 Y 位数这一事实,至少在涉及 GPU 内存时是这样。它的大部分被网络的权重和中间输出占用,无论如何这可能是 float32
(如果你真的需要它,可能 float16). There is active research on training with lower precision (even binary training), but based on your question, it seems completely unnecessary. Lastly, you can always try Quantization 到你的生产模型。
关于包装:它可能会产生影响,尤其是如果您天真地进行包装。您建议的分组似乎不是自然分组,因此从分组数据中学习模式可能比其他方式更难。总会有变通办法,但随后这个答案就变成了一种意见,因为几乎不可能预测什么是可行的;基于意见的 questions/answer 在这里是题外话:)
我正在研究 LSTM 来生成音乐。我的输入数据将是大小为 88xLx3
的 BooleanTensor
,88
是可用音符的数量,L
是将按顺序排列的每个“片段”的长度1k - 10k(待定),3
是“主旋律”、“伴奏”和“低音”的部分。 0
的值表示该部分(乐器)当时未播放该特定音符,而 1
表示它正在播放。
问题是BooleanTensor
的每个条目在内存中占用space的1字节而不是1位,这浪费了很多宝贵的GPU内存。
作为解决方案,我考虑将每个 BooleanTensor
打包到大小为 11xLx3
或 88x(L/8)x3
.
ByteTensor
(uint8)
我的问题是:这样打包数据是否会对 LSTM 的学习和生成产生影响,或者基于 ByteTensor
的数据和模型是否等同于基于 BooleanTensor
的数据和模型?实践中的同行?
我不会真正关心输入采用 X 而不是 Y 位数这一事实,至少在涉及 GPU 内存时是这样。它的大部分被网络的权重和中间输出占用,无论如何这可能是 float32
(如果你真的需要它,可能 float16). There is active research on training with lower precision (even binary training), but based on your question, it seems completely unnecessary. Lastly, you can always try Quantization 到你的生产模型。
关于包装:它可能会产生影响,尤其是如果您天真地进行包装。您建议的分组似乎不是自然分组,因此从分组数据中学习模式可能比其他方式更难。总会有变通办法,但随后这个答案就变成了一种意见,因为几乎不可能预测什么是可行的;基于意见的 questions/answer 在这里是题外话:)