深度学习入门笔记2 梯度下降

简介: 深度学习入门笔记2 梯度下降

梯度下降

概念


image.png

image.png

import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.family"] = "SimHei"
mpl.rcParams["axes.unicode_minus"] = False
import numpy as np
%matplotlib tk
# 给定一个初始值(是什么不重要),然后根据梯度来对该值(x)进行调整。使得
# x的值令y值最小。
# 定义原函数
def f(x):
    return x ** 2 - 2 * x + 1
# 定义导函数(梯度函数)
def gradient(x):
    return 2 * x - 2
# 定义一个列表,来保存x的更新轨迹。
x_list = []
# 定义一个列表,来保存y的更新轨迹。
y_list = []
# 定义学习率。
eta = 0.1
# 定义x的初始值。
x = 10
# 进行循环迭代,在循环中,不管根据x的梯度值更新x,使得更新后的x值,令y值更小。
for i in range(10):
    # 将x与y值加入到轨迹列表中。
    x_list.append(x)
    y_list.append(f(x))
    # 对自变量x进行调整。(根据梯度)
    x = x - eta * gradient(x)
# display(x_list)
# display(y_list)
# 绘制图像
x = np.arange(-9, 11, 0.1)
y = f(x)
plt.plot(x, y)
# 画出x,y点的移动轨迹。
plt.plot(x_list, y_list, "ro--")
# title等方法中,也同样支持latex语法。
plt.title("函数$y=x^{2} -2x + 1$")

二维梯度下降

image.png

from mpl_toolkits.mplot3d import Axes3D
# 定义原函数
def f(x1, x2):
    return 0.2 * (x1 + x2) ** 2 - 0.3 * x1 * x2 + 0.4
# 定义梯度函数(导函数)
def gradient_x1(x1, x2):
    return 0.4 * (x1 + x2) - 0.3 * x2
def gradient_x2(x1, x2):
    return 0.4 * (x1 + x2) - 0.3 * x1
# 定义学习率
eta = 1.5
# 定义x1,x2与y的轨迹列表。
x1_list = []
x2_list = []
y_list = []
# 定义初始位置
x1, x2 = 4.5, 4.5
for i in range(50):
    # 轨迹列表加入相应的轨迹
    x1_list.append(x1)
    x2_list.append(x2)
    y_list.append(f(x1, x2))
    x1 = x1 - eta * gradient_x1(x1, x2)
    x2 = x2 - eta * gradient_x2(x1, x2)
# display(x1_list)
# display(x2_list)
# display(y_list)
X1 = np.arange(-5, 5, 0.1)
X2 = np.arange(-5, 5, 0.1)
# 网状结构。
# X1看做一个列向量,会沿着行进行扩展。扩展的行数与X2元素的个数相同。
# X2看做一个行向量,会沿着列进行扩展。扩展的列数与X1元素的个数相同。
# 返回扩展之后的X1与X2。(经过扩展之后,X1与X2的形状是相同的。)
# meshgrid扩展的目的:经过扩展之后,我们就可以获得任意X1与X2中元素的组合。(例如Ptyhon zip)
X1, X2 = np.meshgrid(X1, X2)
Y = f(X1, X2)
fig = plt.figure()
# 创建3D绘图对象,在参数(figure)上进行绘图。
ax = Axes3D(fig)
# 绘制曲面图。
ax.plot_surface(X1, X2, Y, rstride=5, cstride=5, cmap="rainbow")
ax.plot(x1_list, x2_list, y_list, "bo--")
f(X1, X2)


相关文章
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
3月前
|
机器学习/深度学习 算法 测试技术
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
本文是关于如何搭建深度学习环境,特别是使用mmdetection进行CPU安装和训练的详细指南。包括安装Anaconda、创建虚拟环境、安装PyTorch、mmcv-full和mmdetection,以及测试环境和训练目标检测模型的步骤。还提供了数据集准备、检查和网络训练的详细说明。
167 5
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
|
3月前
|
机器学习/深度学习 数据可视化 计算机视觉
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
这篇文章详细介绍了如何通过可视化深度学习中每层特征层来理解网络的内部运作,并使用ResNet系列网络作为例子,展示了如何在训练过程中加入代码来绘制和保存特征图。
70 1
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
|
1月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
82 3
|
2月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
|
3月前
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
325 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
3月前
|
机器学习/深度学习 并行计算 PyTorch
深度学习环境搭建笔记(一):detectron2安装过程
这篇博客文章详细介绍了在Windows环境下,使用CUDA 10.2配置深度学习环境,并安装detectron2库的步骤,包括安装Python、pycocotools、Torch和Torchvision、fvcore,以及对Detectron2和PyTorch代码的修改。
612 1
深度学习环境搭建笔记(一):detectron2安装过程
|
3月前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
458 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
3月前
|
机器学习/深度学习 自然语言处理 并行计算
深度学习笔记(十四):Transormer知识总结
关于深度学习中Transformer模型的知识总结,涵盖了Self-attention机制、QKV、Multi-head attention、位置编码和并行运算等关键概念,以及如何在PyTorch中实现Self-attention。
74 1
|
3月前
|
机器学习/深度学习 编解码 计算机视觉
深度学习笔记(十一):各种特征金字塔合集
这篇文章详细介绍了特征金字塔网络(FPN)及其变体PAN和BiFPN在深度学习目标检测中的应用,包括它们的结构、特点和代码实现。
482 0