python - data.norm() < 1000 在 PyTorch 中有什么作用?
问题描述
我在这里关注 PyTorch 教程。它说
x = torch.randn(3, requires_grad=True)
y = x * 2
while y.data.norm() < 1000:
y = y * 2
print(y)
Out:
tensor([-590.4467, 97.6760, 921.0221])
有人可以解释一下 data.norm() 在这里做什么吗?当我改变.randn
它.ones
的输出是 tensor([ 1024., 1024., 1024.])
.
解决方案
它只是张量的 L2 范数(又名欧几里得范数)。下面是一个可重现的插图:
In [15]: x = torch.randn(3, requires_grad=True)
In [16]: y = x * 2
In [17]: y.data
Out[17]: tensor([-1.2510, -0.6302, 1.2898])
In [18]: y.data.norm()
Out[18]: tensor(1.9041)
# computing the norm using elementary operations
In [19]: torch.sqrt(torch.sum(torch.pow(y, 2)))
Out[19]: tensor(1.9041)
解释:首先,它取输入张量中每个元素的平方x
,然后将它们相加,最后取结果和的平方根。总而言之,这些操作计算所谓的L2 或欧几里得范数。
推荐阅读
- php - PHP SQL JOIN - 将辅助字段添加到结果
- video - 将 MPEG4 转换为 H264
- python - 时区感知日期
- java - 重新加载组合框值时,箭头键选择对自动完成的组合框不起作用 java Fx
- r - R - 迄今为止的数字给出错误的值
- pyspark - PySpark - 保存 Hive 表 - org.apache.spark.SparkException:无法识别配置单元类型字符串
- java - Java 文件未打开 Eclipse
- python - 计算一个样本中某个比例的置信区间
- python - Windows 上 Python IDLE v3.5 的 elif 语句缩进语法错误
- reactjs - 动态地将 props 应用到组件