我正在开发一个RNN/LSTM模型,我想在ByteTensor中对序列进行编码,以节省内存,因为我的内存非常紧张。然而,当我这样做时,模型返回以下错误:
应为标量类型Byte的对象,但为参数#2"mat2"获得了标量类型Float
所以,似乎还有其他东西需要成为Byte张量,但我不知道它是什么,因为控制台只在以下行显示错误:
output = model(predictor)
这意味着在model
内部有用于对字节张量进行运算的浮点张量(很可能是矩阵乘法、加法等中的操作数(。我相信,从技术上讲,您可以通过执行model.type(torch.uint8)
将它们强制转换为字节,但无论如何,您的方法迟早会失败——由于整数是离散的,因此无法在反向传播所需的梯度计算中使用它们。uint8
值可以用于深度学习,以提高已经训练的网络中推理的性能和内存占用,但这是一项高级技术。对于这项任务,你最好的选择是常规的float32
。如果你的GPU支持它,你也可以使用float16
,也就是half
,尽管它会带来额外的复杂性,我不建议初学者使用。