Pytorch_auto_gradient
在深度学习中,我们经常需要对函数求梯度(gradient)。PyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图,并执行反向传播。本节将介绍如何使用autograd包来进行自动求梯度的有关操作。
基本概念介绍
1.1 Variable 和 Tensor Variable是 torch.autograd中的数据类型,主要用于封装 Tensor,进行自动求导。
data : 被包装的Tensor grad : data的梯度 grad_fn : 创建 Tensor的 Function,是自动求导的关键 requires_grad:指示是否需要梯度 is_leaf : 指示是否是叶子结点
Pytorch 0.4.0版开始,Variable并入Tensor。
dtype:张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor
shape:张量的形状,如(64,3,224,224)
device:张量所在设备,GPU/CPU
Tensor是PyTorch实现多维数组计算和自动微分的关键数据结构。一方面,它类似于numpy的ndarray,用户可以对Tensor进行各种数学运算;另一方面,当设置.requires_grad = True之后,在其上进行的各种操作就会被记录下来,它将开始追踪在其上的所有操作,从而利用链式法则进行梯度传播。完成计算后,可以调用.backward()来完成所有梯度计算。此Tensor的梯度将累积到.grad属性中。
如果不想要被继续追踪,可以调用.detach()将其从追踪记录中分离出来,可以防止将来的计算被追踪,这样梯度就传不过去了。此外,还可以用with torch.no_grad()将不想被追踪的操作代码块包裹起来,这种方法在评估模型的时候很常用,因为在评估模型时,我们并不需要计算可训练参数(requires_grad=True)的梯度。
1.2 Function类 Function是另外一个很重要的类。Tensor和Function互相结合就可以构建一个记录有整个计算过程的有向无环图(Directed Acyclic Graph,DAG)。每个Tensor都有一个.grad_fn属性,该属性即创建该Tensor的Function,就是说该Tensor是不是通过某些运算得到的,若是,则grad_fn返回一个与这些运算相关的对象,否则是None。
我们已经知道PyTorch使用有向无环图DAG记录计算的全过程,那么DAG是怎样建立的呢?DAG的节点是Function对象,边表示数据依赖,从输出指向输入。 每当对Tensor施加一个运算的时候,就会产生一个Function对象,它产生运算的结果,记录运算的发生,并且记录运算的输入。Tensor使用.grad_fn属性记录这个计算图的入口。反向传播过程中,autograd引擎会按照逆序,通过Function的backward依次计算梯度。
1.3 代码示例 创建一个Tensor并设置requires_grad=True:
1 2 3 x = torch.ones(2, 2, requires_grad=True) print(x) print(x.grad_fn) 输出:
1 2 3 tensor([[1., 1.], [1.
Pytorch basic usage
JUSTCTF 新生杯Write Up
JUSTCTF 新生杯 Write Up [TOC]
Misc Easy SignIn 题目给出二维码,扫描二维码即可获得Flag
Can you see me ? 打开文档为空,全选发现隐藏东西,根据长度判断可能为二进制。
1 2 3 4 5 6 7 8 9 10 11 12 with open("can_you_see_me.txt") as f: str = f.readlines() k = '' for i in str: if len(i)==17: k+='0' elif len(i)==33: k+='1' #注意一个字符长度为32 print(k) print(len(k)) 抽象带师 利用搜索引擎,搜索 emoji密码
https://emojicipher.com/zh-CN
PUZZLE 题目给出 240张图片 拼接
1 identify JUST_ZSZZ.jpg #查看图片尺寸 58 * 58 1 montage JUST*.
Pytorch
Genetic
遗传算法 通过编码、设置种群、设置适应度函数、遗传操作、解码产生需要的解。f(x)=x*sin(x)+1,x[0,2],求f(x)的最大值、最小值。
定义函数 (即 适应度函数) 1 2 3 4 import math import numpy as np import matplotlib.pyplot as plt import random 1 2 def f(x): return x * np.sin(x) + 1 绘制函数图像 1 2 3 4 plt.rc_context({'axes.edgecolor':'orange', 'xtick.color':'green', 'ytick.color':'green', 'figure.facecolor':'white'}) x = np.arange(0,2,0.1) plt.plot(x,f(x)) plt.show() png
随机产生种群 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def product_origin(population_size, length): """ :population_size: 种群大小, :length: DNA长度 """ population = np.