介绍
本篇内容介绍了“Pytorch使用张量特定条件判断索引的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
torch.where()用于将两个broadcastable的张量组合成新的张量,类似于c++中的三元操作符”?:“
区别于python numpy中的地方()直接可以找到特定条件元素的指数
想要实现numpy中,()的功能,可以借助非零()
对应numpy中的地方()操作效果:
<强>补充:Pytorch torch.Tensor.detach()方法的用法及修改指定模块权重的方法强>
分离的分离中文意思是分离,官方解释是返回一个新的张量,从当前的计算图中分离出来
需要注意的是,返回的张量和原张量共享相同的存储空间,但是返回的张量永远不会需要梯度
import torch as t 时间=a t.ones (10) 时间=b a.detach () 打印(b) 张量([1。,,1,,1,,1,,1,,1,,1,,1,,1,,1。])
那么这个函数有什么作用吗?
——假如一个网络输出了一个张量类型的变量,一个要作为输入传入到B网络中,如果我想通过损失函数反向传播修改B网络的参数,但是不想修改一个网络的参数,这个时候就可以使用detcah()方法
a =,(输入) 时间=a 分离() 时间=b B (a) 时间=loss 标准(b,,目标) loss.backward ()
来看一个实际的例子:
import torch as t 时间=x t.ones (1, requires_grad=True) x.requires_grad ,, #真正的 时间=y t.ones (1, requires_grad=True) y.requires_grad ,, #真正的 时间=x x.detach (),#分离之后 x.requires_grad ,, #假 时间=y x + y ,,,,,,,, #张量([2])。 y.requires_grad ,, #我还是正确的 y.retain_grad (),,, # y不是叶子张量,要加上这一行 时间=z t.pow (y), 2) z.backward (),,#反向传播 y.grad ,#张量((4)) x.grad ,#没有
以上代码就说明了反向传播到y就结束了,没有到达x,所以x的毕业生属性为
既没有然谈到了修改模型的权重问题,那么还有一种情况是:
——假如一个网络输出了一个张量类型的变量,一个要作为输入传入到B网络中,如果我想通过损失函数反向传播修改一个网络的参数,但是不想修改B网络的参数,这个时候又应该怎么办了?
这时可以使用Tensor.requires_grad属性,只需要将requires_grad修改为假即可。
for param 拷贝B.parameters (): ,param.requires_grad =False a =,(输入) 时间=b B (a) 时间=loss 标准(b,,目标) loss.backward ()