我正在开发一个RNN / LSTM模型,我想在ByteTensor中对该序列进行编码以节省内存,因为我限于非常紧凑的内存。但是,当我这样做时,模型将返回以下错误:
标量类型为Byte的预期对象,但参数#2'mat2'的标量类型为Float
因此,似乎还需要字节张量,但是我不知道这是什么,因为控制台仅在该行显示错误:
output = model(predictor)
答案 0 :(得分:1)
这意味着model
内有用于对字节张量进行操作的浮点张量(矩阵乘法,加法等中最有可能的操作数)。我相信您可以通过执行model.type(torch.uint8)
从技术上将其转换为字节,但是您的方法迟早都会失败-由于整数是离散的,因此无法在反向传播所需的梯度计算中使用它们。 uint8
值可用于深度学习中,以改善已经受过训练的网络中推理的性能和内存占用,但这是一种高级技术。对于此任务,最好的选择是常规的float32
。如果您的GPU支持它,那么您也可以使用float16
或half
,尽管它引入了额外的复杂性,我不建议初学者使用。