我可以将字节张量输入到我的 RNN/LSTM 模型吗?
Can I input a Byte Tensor to my RNN/LSTM model?
我正在开发一个 RNN/LSTM 模型,我想在 ByteTensor 中对序列进行编码以节省内存,因为我的内存有限。但是,当我这样做时,模型 returns 出现以下错误:
Expected object of scalar type Byte but got scalar type Float for argument #2 'mat2'
因此,似乎还有其他需要字节张量的东西,但我不知道它是什么,因为控制台仅在以下行显示错误:
output = model(predictor)
这意味着在 model
中有浮点张量用于对字节张量进行运算(很可能是矩阵乘法、加法等操作数)。我相信您可以通过执行 model.type(torch.uint8)
在技术上将它们转换为字节,但您的方法迟早会失败 - 因为整数是离散的,所以无法在反向传播所需的梯度计算中使用它们。 uint8
值可用于深度学习,以提高已训练网络中 推理 的性能和内存占用,但这是一项高级技术。对于此任务,您最好的选择是常规 float32
s。如果您的 GPU 支持它,您也可以使用 float16
又名 half
,但它会带来额外的复杂性,我不建议初学者使用它。
我正在开发一个 RNN/LSTM 模型,我想在 ByteTensor 中对序列进行编码以节省内存,因为我的内存有限。但是,当我这样做时,模型 returns 出现以下错误:
Expected object of scalar type Byte but got scalar type Float for argument #2 'mat2'
因此,似乎还有其他需要字节张量的东西,但我不知道它是什么,因为控制台仅在以下行显示错误:
output = model(predictor)
这意味着在 model
中有浮点张量用于对字节张量进行运算(很可能是矩阵乘法、加法等操作数)。我相信您可以通过执行 model.type(torch.uint8)
在技术上将它们转换为字节,但您的方法迟早会失败 - 因为整数是离散的,所以无法在反向传播所需的梯度计算中使用它们。 uint8
值可用于深度学习,以提高已训练网络中 推理 的性能和内存占用,但这是一项高级技术。对于此任务,您最好的选择是常规 float32
s。如果您的 GPU 支持它,您也可以使用 float16
又名 half
,但它会带来额外的复杂性,我不建议初学者使用它。