西夷运已绝大汉如中天 2023-10-14 09:41 采纳率: 75%
浏览 10
已结题

张量的除法运算为什么一定要把数据转为float?

张量的除法运算为什么一定要把数据转为float?

import torch
# 基础运算
data = torch.randint(1, 10, [2, 3])
print(data)
print(type(data))
print(data.add_(100))
print(type(data))
print(data.mul_(100))
print(type(data))
print(data.sub_(100))
print(type(data))
print(data.div_(100))
print(type(data))
print(data)
print(type(data))

结果报错:
RuntimeError: result type Float can't be cast to the desired output type Long

添加float类型转换后就不报错了

import torch

# 基础运算
data = torch.randint(1, 10, [2, 3])
print(data)
print(type(data))
**data = data.float()**
print(data.add_(100))
print(type(data))
print(data.mul_(100))
print(type(data))
print(data.sub_(100))
print(type(data))
print(data.div_(100))
print(type(data))
print(data)
print(type(data))

求解:为什么加减乘法都不需要转换,只有除法需要,而且数学计算结果也不是浮点数

  • 写回答

2条回答 默认 最新

  • TJUTCM-策士之九尾 人工智能领域新星创作者 2023-10-14 11:21
    关注

    这不是很容易想到么
    除法会产生多余的小数位数,加减法就不说了,乘法我举个例子吧。2.5*1.2结果是3,这个3是整数,而两个乘数是一位小数,相当于小数点后小数位数减少了;当然更普遍的现象是小数位数不变,但小数位数是不可能增加的(你要是能看懂这句,就接着向下看。看不懂再想想,很容易的)
    除法会造成小数位数的增加,比如2÷3=0.6666667,这样小数位数就增加了

    而你说的张量的除法运算为什么一定要把数据转为float,因为如果不将数据转换为浮点数类型,可能会导致精度损失和数据截断啊!你不这么做模型的准确性和精度就会打折扣,就是这么个道理

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月22日
  • 已采纳回答 10月14日
  • 创建了问题 10月14日

悬赏问题

  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题
  • ¥15 使用dify通过OpenAI 的API keys添加OpenAI模型时报了“Connection Error”错误