深度学习入门,一些函数,变量名称

MSE:Mean Square Error 平均 平方 误差
numpy/matplotlib b两个绘图的包 常用方式:import matplotlib.pyplot as plt
forward()前馈函数,前馈运算,沿着图的方向直到算出最后的loss
loss()损失函数
for a,b in zip(data_a,data_b): 将data_a和data_b里面对应的信息一组一组的输出
plt.plot(a,b):以a为横坐标,b为纵坐标
plt.xlabel("a")横坐标标识为a
plt.ylabel("b")纵坐标标识为b
plt.show()图像展示
梯度下降:w(参数)=w-a(学习率)*(cost函数或者损失函数lost对w的偏导)   一般找到局部最优
epoch:训练的轮数  for epoch in range(100)训练100轮
绘图可以使用指数加权均值,这样的话可以让震荡的曲线光滑
随机梯度下降和梯度下降的区别:
1.梯度下降 所有数据的损失函数对参数的求导的均值,随机是拿人一个数据的损失函数对参数求导
2.有效的可能避免停滞在鞍点,因为噪声的原因,跨越平滑曲线,实践中更有效
3.随机梯度每一组数据更改一下参数w,效率低,效果好,梯度下降所有数据求完算平均值再更改参数w,这样的话,效率高,效果差,所以一般使用批量的进行,会综合两种情况,用batch即mini-batch
cost:平均损失
loss:单个损失
Linear Model:线性模型
Backward  反向传播 求loss对参数w的偏导,然后乘以学习率,可以改变w了
非线性函数充当激活函数
Tensor是一个类,可以表示标量、向量、矩阵、高维数据
里面有两个成员:data:w权重/参数  grad:损失函数对权重的导数   tensor类型具有传递性
    变成tenor类型:w=torch.Tensor([1.0])
    w.requires_grad = True 指定要计算梯度
    l=loss(x,y)计算出损失
    l.backward()这个函数就可以自动的求出之前要求计算梯度的参数,每次进行backward后loss函数计算图就会被释放了,下一次计算图可能不一样,解决内存问题
    w.data=w.data-0.01*w.grad.data//     w是tensor类型也就是张量而且计算梯度,也就是使用w会造成建立计算图,对训练产生一定的困扰,w.data也是一个tensor类型但是不产生计算图,w.data.item()是一个标量,可以直接读出来或者处理梯度
    w.grad.data.zero()对loss对w的偏导清零,防止出现偏导值累加,比如得出的loss值其实是加上前面的loss值得累加和

训练过程,四个步骤:
1.准备数据集
2.设计模型(计算y-hat)
3.构造损失函数和优化器
4.训练周期(前馈计算损失,反馈计算梯度,更新参数)


构建模型模板(使用Module不用自定义backward,Module中自定义有)
class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel,self).__init__()
        self.linear = torch.nn.Linear(1,1)(构造对象,(权重/模型参数,偏置值) nn是neural network)
    def forward(self,x):(必须要有,重写父类)
        y_pred = self.linear(x)
        return y_pred
model = LinearModel()(实例化,model(x)直接想forward函数传入x)

def func(*args,**kwargs):
    pass
func(a,b,c,d,x=4,y=5)(这样可以传入不定量元素和字典)

构造损失函数:
criterion = torch.nn.MSELoss(size_average=False)
优化器:
optimizer = torch.optim.SGD(model.parameters(), lr=0.01) //model.parameters()可以找到模型中的变量,lr为学习率


训练:

for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print(epoch, loss)
       
    optimizer.zero_grad()
    loss.backward()
    optimizer.step() 
print('w =',model.linear.weight.item()) 
print('b =',model.linear.bias.item())

测试:
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred',y_test.data)


 

猜你喜欢

转载自blog.csdn.net/likunpengjiayou/article/details/125722511