PyTorch平方根报错怎么办
导读:本文共2806字符,通常情况下阅读需要9分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 问题描述初步使用PyTorch进行平方根计算,通过range()创建一个张量,然后对其求平方根。a=torch.tensor(list(range(9)))b=torch.sqrt(a)报出以下错误:RuntimeError: sqrt_vml_cpu not implemented for 'Long'原因Long类型的数据不支持log对数运... ...
目录
(为您整理了一些要点),点击可以直达。初步使用PyTorch进行平方根计算,通过range()创建一个张量,然后对其求平方根。
报出以下错误:
RuntimeError: sqrt_vml_cpu not implemented for 'Long'
Long类型的数据不支持log对数运算, 为什么Tensor是Long类型? 因为创建List数组时默认使用的是int, 所以从List转成torch.Tensor后, 数据类型变成了Long。
torch.int64
提前将数据类型指定为浮点型, 重新执行:
tensor([0.0000, 1.0000, 1.4142, 1.7321, 2.0000, 2.2361, 2.4495, 2.6458, 2.8284], dtype=torch.float64)
补充:pytorch20 pytorch常见运算详解
这个是矩阵(张量)每一个元素与标量进行操作。
这个就是两个相同尺寸的张量相乘,然后对应元素的相乘就是这个哈达玛积,也成为element wise。
这个torch.mul()和*是等价的。
当然,除法也是类似的:
我们可以发现的torch.div()其实就是/, 类似的:torch.add就是+,torch.sub()就是-,不过符号的运算更简单常用。
如果我们想实现线性代数中的矩阵相乘怎么办呢?
这样的操作有三个写法:
torch.mm()
torch.matmul()
@,这个需要记忆,不然遇到这个可能会挺蒙蔽的
这是对二维矩阵而言的,假如参与运算的是一个多维张量,那么只有torch.matmul()可以使用。等等,多维张量怎么进行矩阵的乘法?在多维张量中,参与矩阵运算的其实只有后两个维度,前面的维度其实就像是索引一样,举个例子:
这样也是可以相乘的,因为这里涉及一个自动传播Broadcasting机制,这个在后面会讲,这里就知道,如果这种情况下,会把b的第一维度复制3次 ,然后变成和a一样的尺寸,进行矩阵相乘。
和上面一样,不多说了。开方运算可以用torch.sqrt(),当然也可以用a**(0.5)。
在上学的时候,我们知道ln是以e为底的,但是在pytorch中,并不是这样。
pytorch中log是以e自然数为底数的,然后log2和log10才是以2和10为底数的运算。
.ceil() 向上取整
.floor()向下取整
.trunc()取整数
.frac()取小数
.round()四舍五入
.ceil() 向上取整.floor()向下取整.trunc()取整数.frac()取小数.round()四舍五入
这个是让一个数,限制在你自己设置的一个范围内[min,max],小于min的话就被设置为min,大于max的话就被设置为max。这个操作在一些对抗生成网络中,好像是WGAN-GP,通过强行限制模型的参数的值。
PyTorch平方根报错怎么办的详细内容,希望对您有所帮助,信息来源于网络。