首页 > 其他分享 >《PyTorch深度学习实践》-刘二大人 第三讲

《PyTorch深度学习实践》-刘二大人 第三讲

时间:2022-10-19 19:33:40浏览次数:49  
标签:loss 刘二 grad list epoch PyTorch cost 深度 data

#梯度下降法
from matplotlib import pyplot as plt

# prepare the training set
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

# initial guess of weight
w = 1.0

# define the model linear model y = w*x
def forward(x):
    return x * w

#define the cost function MSE(均方差)
def cost(xs, ys):
    cost = 0
    for x, y in zip(xs, ys):
        y_pred = forward(x)
        cost += (y_pred - y) ** 2
    return cost / len(xs)

# define the gradient function  gd
def gradient(xs, ys):
    grad = 0
    for x, y in zip(xs, ys):
        grad += 2 * x * (x * w - y)
    return grad / len(xs)

epoch_list = []
cost_list = []
print('Predict (before training)', 4, forward(4))
for epoch in range(100):
    cost_val = cost(x_data, y_data)
    grad_val = gradient(x_data, y_data)
    w -= 0.01 * grad_val
    print('Epoch:', epoch, 'w=', w, 'loss=', cost_val)
    epoch_list.append(epoch)
    cost_list.append(cost_val)

print('Predict (after training)', 4, forward(4))
plt.plot(epoch_list, cost_list)
plt.xlabel('Epoch')
plt.ylabel('cost')
plt.show()

 

#随机梯度下降法,代码中没有体现哪里随机,差评,在网上找了一下随机怎么加,加了一个随机
'''随机梯度下降法在神经网络中被证明是有效的。效率较低(时间复杂度较高),学习性能较好。
(梯度下降法计算时可以并行,所以效率好,但是容易进入鞍点;
随机梯度下降需要等待上一个值运行完才能更新下一个值,无法并行计算,但是某种程度上能解决鞍点问题;
因此,有种折中的办法叫batch。)

随机梯度下降法和梯度下降法的主要区别在于:
1、损失函数由cost()更改为loss()。cost是计算所有训练数据的损失,loss是计算一个训练函数的损失。对应于源代码则是少了两个for循环。
2、梯度函数gradient()由计算所有训练数据的梯度更改为计算一个训练数据的梯度。
'''
import random
import matplotlib.pyplot as plt

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

w = 1.0

def forward(x):
    return x * w

# calculate loss function
def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) ** 2

# define the gradient function  sgd(随机梯度下降)
def gradient(x, y):
    return 2 * x * (x * w - y)

epoch_list = []
loss_list = []
print('predict (before training)', 4, forward(4))
for epoch in range(100):
    #原代码
    # for x, y in zip(x_data, y_data):
    #     grad = gradient(x, y)
    #     w = w - 0.01 * grad  # update weight by every grad of sample of training set
    #     print("\tgrad:", x, y, grad)
    #     l = loss(x, y)
    # print("progress:", epoch, "w=", w, "loss=", l)
    #加随机
    rc = random.randrange(0,3)
    x1 = x_data[rc]
    y1 = y_data[rc]
    grad = gradient(x1, y1)
    w = w - 0.01 * grad
    l = loss(x1, y1)

    epoch_list.append(epoch)
    loss_list.append(l)

print('predict (after training)', 4, forward(4))
plt.plot(epoch_list, loss_list)
plt.ylabel('loss')
plt.xlabel('epoch')
plt.show()

 

标签:loss,刘二,grad,list,epoch,PyTorch,cost,深度,data
From: https://www.cnblogs.com/zhouyeqin/p/16807458.html

相关文章

  • C语言之走迷宫深度和广度优先(利用堆栈和队列)
     完成以下迷宫 利用二维数组储存每一个数组里的值,若是不能走则为1,若是可行就是0,走过了就设为2。一般是再复制一个数组,用来记录。堆栈的思想就是将一个点的上下左右......
  • 深度学习中的patch是什么?和block的区别?
    patch就是输入图像中的一个小块而block像ResNet中的ResBlock这种块,块里面包括了卷积、归一化层、激活函数等,如下图所示patch和block本质上是不同的概念,只是中文翻译都可......
  • 基于深度学习的自动车牌识别(详细步骤+源码)
    作者| Sanyam翻译 |OpenCV与AI深度学习导读本文将重点介绍ALPR的端到端实现。它将侧重于两个过程:车牌检测和检测到的车牌的OCR。(公众号:OpenCV与AI深度学习) 背景介......
  • 深度理解Redux原理并实现一个redux
    Redux的作用是什么Redux的作用在于实现状态传递、状态管理。在这里你可能会说了,如果是状态传递,那我props的传递不也是可以达到这样的效果吗?context上下文方案不也是可以达......
  • 李沐老师深度学习安装环境-2022.10.19
    先把anaconda安装好打开PowershellPrompt首先是创建虚拟环境conda create-n(环境名字)python=(python版本号)接下来......
  • 《PyTorch深度学习实践》-刘二大人 第二讲
    刘二大人的Pytorch保姆式教程。我觉得算0基础学Pytorch吧,从我现在的基础看就是比较easy的程度,正和我意~课堂练习:importnumpyasnpimportmatplotlib.pyplotasplt......
  • 深度学习基础课:全连接层的前向和后向传播推导(上)
    大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序线上课程资料:本节课录像回放1加QQ群,获......
  • 深度学习笔记
    本篇文章是深度学习的一个学习记录qwq,主要用来记录深度学习的相关知识,也可以探测Nickel的摸鱼情况。\[\newcommand{\bbm}{\begin{bmatrix}}\newcommand{\ebm}{\end{bm......
  • 目前最强判别能力的深度人脸识别(文末附有源码)
    计算机视觉研究院专栏作者:Edison_G利用深度卷积神经网络进行大规模人脸识别的特征学习面临的主要挑战之一:设计合适的增强识别能力的损失函数。​CVPR已经告一段落,但是好的文......
  • 安装Pytorch
    下面三种需求都是可以尝试的:错误1:AssertionError:TorchnotcompiledwithCUDAenabled错误2:torch.cuda.is_available() 输出false需求3:就是想安装Pytorch 请......