深度学习--Pytorch(一)

PyTorch深度学习实践

python基础知识

##设置变量范围
numpy.arrange(0.0,4.0,1.0)  # 表示0,1,2,3
##2D画图
import matplotlib.pyplot as plt
plt.plot(x,y)
plt.xlabel('x轴名称')
plt.ylabel('y轴名称')
plt.show()
##3D画图
https://blog.csdn.net/guduruyu/article/details/78050268
##训练过程中实时绘图,Visdom可视化,创建一个web服务,在代码里访问
##训练过程中断点重开,定期存盘
https://zhuanlan.zhihu.com/p/133250753

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

def function(*args,**kwargs)  # *args表示不限制输入参数的个数function(1,2,3,x=4)中的1,2,3,**kwargs表示不限制x=4这类的个数

梯度下降

对cost求梯度:采用for循环,对所有样本求梯度(效率高)
对loss求梯度:对一个样本求梯度,加入随机噪声避免陷入鞍点(性能好,耗时)
折中:采用batch,即mini-batch
深度学习--Pytorch(一)深度学习--Pytorch(一)

反向传播

w=torch.Tensor([1.0])  # 创建一个张量
w.requires_grad=True  # 该张量需要计算梯度,默认不计算
#计算图越多,容易吃光内存
## 权重更新
w.data=w.data-0.01*w.grad.data  # 因为w是tensor,w.grad也是tensor,如果直接计算就要建立计算图,所以要取tensor里面的值进行计算
w.grad.item()  # 把w.grad中的值拿出来变成标量,防止产生计算图
w.grad.data.zero_()  # 每次更新完梯度需要清零,防止被累加

线性回归

定义一个类

#必须继承于nn.Module或者自己的function封装成一个module
#必须有构造函数__init__,初始化
#必须有forward函数,前馈过程中要执行的计算
class 类名称(torch.nn.Module)
	def __init__(self):
		super(类名称,self).__init__()  #super赋类
		self.XX=torch.nn.Linear(1,1)  #Linear表示y=wx+b,数字代表权重和偏置
	def forward(self,x)  #前向传播
		out=self.XX(x)
		return out
model=类名称()  #实例化,继承
y=model(x)
optimizer.zero_grad()  #清零
loss.backward()  #求梯度
optimizer.step()  #更新

步骤:求预测值(前馈)→求损失→梯度清零→backward(反馈)→更新

上一篇:PHP流程控制语句下


下一篇:【小白学习PyTorch教程】一、PyTorch基本操作