function - 如何使用函数防止初始 pytorch 变量发生变化?
问题描述
我想将函数应用于变量x
并保存为y
. 但是为什么x
也改变了?如何预防?
import torch
def minus_min(raw):
for col_i in range(len(raw[0])):
new=raw
new[:,col_i] = (raw[:,col_i] - raw[:,col_i].min())
return new
x=torch.tensor([[0,1,2,3,4],
[2,3,4,0,8],
[0,1,2,3,4]])
y=minus_min(x)
print(y)
print(x)
输出:
tensor([[0, 0, 0, 3, 0],
[2, 2, 2, 0, 4],
[0, 0, 0, 3, 0]])
tensor([[0, 0, 0, 3, 0],
[2, 2, 2, 0, 4],
[0, 0, 0, 3, 0]])
解决方案
因为这个任务:
new[:,col_i] = (raw[:,col_i] - raw[:,col_i].min())
是就地操作。因此,x
将y
共享底层.data
。
解决此问题的最小更改是x
在函数内部制作副本:
def minus_min(raw):
new = raw.clone() # <--- here
for col_i in range(len(raw[0])):
new[:,col_i] = raw[:,col_i] - raw[:,col_i].min()
return new
如果你愿意,你可以简化你的功能(并删除for
循环):
y = x - x.min(dim=0).values
推荐阅读
- dart - Aqueduct ORM ManagedObject 的瞬态属性被持久化
- sql - 计算每个 ID 在一个零和运行余额中最后一个零之后的第一笔交易之间的中位数天数
- mysql - 使用 Liquibase 从模型和 Db 中删除唯一键约束
- dplyr - 使用 dplyr 从多个回归模型中提取斜率
- chart.js - Chartjs:为什么我有 2 个 Y 轴标签?
- r - 使表格宽度相同
- reactjs - ajax 请求后显示确认消息
- r - 闪亮的 updateSelectizeInput 返回错误的值
- html - 如何在按钮元素上使用 display: grid?
- swift - 如何解决swiftUI中的“使用未解析的标识符'PresentationLink'”错误?