Pytorch使用张量特定条件判断索引的方法

  介绍

本篇内容介绍了“Pytorch使用张量特定条件判断索引的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

torch.where()用于将两个broadcastable的张量组合成新的张量,类似于c++中的三元操作符”?:“

区别于python numpy中的地方()直接可以找到特定条件元素的指数

 Pytorch使用张量特定条件判断索引的方法

想要实现numpy中,()的功能,可以借助非零()

 Pytorch使用张量特定条件判断索引的方法

对应numpy中的地方()操作效果:

 Pytorch使用张量特定条件判断索引的方法

<强>补充:Pytorch torch.Tensor.detach()方法的用法及修改指定模块权重的方法

分离的分离中文意思是分离,官方解释是返回一个新的张量,从当前的计算图中分离出来

 Pytorch使用张量特定条件判断索引的方法

需要注意的是,返回的张量和原张量共享相同的存储空间,但是返回的张量永远不会需要梯度

 Pytorch使用张量特定条件判断索引的方法

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 () 

Pytorch使用张量特定条件判断索引的方法