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
反向传播
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(反馈)→更新