import torch
import numpy as np
from torch.autograd import Variable as V
#定义一个可进行反向传播计算,能够梯度下降的张量对象
n = [[1.0,2.0],[3.0,4]]
p = torch.tensor(n)
m = p.clone().detach().requires_grad_(True) # 对于已经定义的非可梯度变化的tensor,否则会出现警告
print(m)
# 若创建的torch中的原始数据是整型,必须使用float()
x=V(torch.arange(0,3).float(),requires_grad=True)
print(x)
print(x.data)
对于可反向传播,可以梯度下降计算的对象:.data取出变量中张量部分的数据
对于不要求梯度下降的变量对象:.data属性就是它本身
x=V(torch.arange(0,3).float(),requires_grad=True)
print(x) # 可进行梯度下降计算的变量
print(x.data) # 取出变量中的张量tensor部分
print(x.detach()) #将可梯度下降的对象转换为不可梯度下降计算的张量
print(x)
参考:https://blog.csdn.net/qq_27825451/article/details/95498211
1、返回一个新的tensor,从当前计算图中分离下来的,但是仍指向原变量的存放位置,不同之处只是requires_grad为false,得到的这个tensor永远不需要计算其梯度,不具有grad
2、在新的计算中,不会再对其值的梯度进行修改
3、如果对返回张量进行backwark()计算,会出现错误
x=V(torch.arange(0,3).float(),requires_grad=True)
print(x) # 可进行梯度下降计算的变量
print(x.data) # 取出变量中的张量tensor部分
x_detach = x.detach()
print(x_detach) #将可梯度下降的对象转换为不可梯度下降计算的张量
print(x_detach.data)
