全连接神经网络、不同激活函数和梯度下降法的区别、神经网络批量标准化
前言 全连接神经网络(又称前馈神经网络或多层感知机)是最基础的神经网络结构,由众多带有参数的神经元组成,常用语对图像进行分类 博主会经常分享自己在人工智能阶段的学习笔记,欢迎大家访问我滴个人博客!(养成系Blog!) 小牛壮士滴Blog~ - 低头赶路 敬事如仪https://kukudelin.top/ 一、人工神经元(全连接神经网络的最小单位)神经元中的核心公式,本质上就是在每个神经元上进行一次逻辑回归,得到下一层的输入值: 构成人工神经元的三个关键因素,这里比较重要的是激活函数,如果没有激活函数的话本质上模型还是线性的。 神经元需要激活函数,核心原因在于引入非线性变换,从而突破线性模型的表达能力限制,如果神经元上全是Wx+b的运算,最终合成的网络都可以做矩阵合并成一个大的线性网络,而异或分类、图像识别等复杂任务是非线性问题,前面的文章我们已经对机器学习算法中的激活函数sigma,以及梯度下降法BGD,SGD和MGD进行了介绍,后续我们将继续介绍深度学习领域中涉及到的一些激活函数以及梯度下降算法。 二、全连接神经网络的组成在介绍激活函数和梯度下降之前,我们...
pytorch基本组件的使用以及神经网络完整训练流程介绍
前言:本篇文章是为后续更进一步学习经典神经网络,以及更先进的技术筑基,一定要牢牢掌握,年薪百万不是梦!! 一、Dataset1234from torch.utils.data import Datasetfrom PIL import Imageimport osimport random 用torch.utils.data中的Dataset组件来实现图片数据集的的合并以及标记标签的功能 1.1 MyData类这里需要我们自己来写一个MyData类用于初始化根目录,图片目录,并将他们拼接。以及实现取出单条数据和获取数据长度的方法 12345678910111213141516171819202122232425262728293031323334353637383940class MyData(Dataset): def __init__(self,root_dir,label_dir): """ 获取根目录和标签目录图片地址 将他们拼接后输出成图片相对路径地址列表 "&...
pytorch基础操作
前言: 此篇主要涉及pytorch的入门内容,主要是张量的基础操作以及使用pytorch进行反向传播,最后还简要介绍了pytorch的一系列常用的基础组件,以便对后续更深层次的学习任务奠定基础。 一、创建张量1.1 简单张量根据已有数据创建张量,torch.tensor默认数字类型是float32 123456789101112131415def test0(): # 创建标量 data = torch.tensor(10) print(data) # 使用numpy数组创建张量 data = np.random.randn(2,3) data = torch.tensor(data) print(data) # 使用列表创建多维张量 data = [[[i for i in range(10)],[j for j in range(10,20)]]] data = torch.tensor(data) print(data)test0() tensor(10) tensor([[ 0.5558, ...
K_Means算法与DBSCAN算法的工作流程与代码复现
前言 前面的文章中,我们讲述了用于回归的线性回归算法,用于分类的逻辑回归算法以及其变式softmax函数,其实不管是回归还是分类,都是通过已有的数据集,知道输入和输出结果之间的关系,然后根据这种已知的关系,训练得到一个最优的模型。这样的模式被称为监督学习。但是在实际生产中,这样既有特征(feature)又有标签(label)的数据集似乎需要使用特殊设备或经过昂贵且用时非常长的实验过程进行人工标记才能得到。当我们不知道数据集中数据、特征之间的关系,而是要根据聚类或一定的模型才能得到数据之间的关系时,我们称为这样的模式叫做无监督学习。在无监督学习中数据只有特征(feature)无标签(label),它本质上是一个统计手段,在没有标签的数据里可以发现潜在的一些结构的一种训练方式。 本篇文章我们来讲讲无监督学习中,用于聚类的K_Means算法与DBSCAN算法。 一、聚类和分类 聚类适用于没有明确类别标签的数据(无监督),目的是通过相似性将数据划分为若干个簇,以发现数据的内在结构和分布规律。它不需要预先定义类别,而是根据数据本身的特征自动分组。 分类则...
图像认识与OpenCV
前言先来一个高级的功能,获取图像指定位置坐标 123456789101112131415161718192021222324252627282930313233343536373839import cv2 as cvimport pandas as pdimport os# 回调函数,用于处理鼠标事件def mouse_callback(event, x, y, flags, param): if event == cv.EVENT_LBUTTONDOWN: # 左键点击 print(f"Left button clicked at: ({x}, {y})") # 将左键点击的坐标和类型保存到 CSV 文件 pd.DataFrame([{"X": x, "Y": y, "Type": "Left"}]).to_csv("click.csv", mode=...
逻辑回归理论以及代码复现
前言在上一系列文章我们讲了线性回归的相关知识,回归和分类是机器学习中两种核心的任务类型,它们的根本区别在于目标变量的性质。回归任务旨在预测一个连续的数值输出,例如预测房价、温度或销售额等,其目标是建立一个模型来拟合输入特征与连续目标值之间的关系。而分类任务则是预测离散的类别标签,比如判断邮件是否为垃圾邮件、图像中的人物身份,或者是疾病诊断等,其目的是通过模型将输入数据划分到预定义的类别中。本系列文章主要来讲讲如何应用逻辑回归来对数据进行分类。 一、基础理论部分逻辑回归(Logistic Regression)是一种广泛应用于二分类问题的统计学习方法,通过将系数与自变量的线性计算结果输入到sigmoid函数中,得到概率预测值,从而达到分类的效果。 1.1 sigmoid函数在逻辑回归中,Sigmoid函数用于将线性组合的输出映射到(0, 1)区间,从而将问题转化为概率预测问题 下面是一个对Sigmoid函数解释以及逻辑回归的预测函数推导 这里值得注意的是sigmoid函数的输入部分,笔记里写的是线性预测值,实际上是线性计算值,意思是并非线性回归得到的参数,这里的参数the...
线性回归(二):三种梯度下降法对比以及如何通过正则化解决过拟合问题
前言上一篇文章讲了线性回归的基础理论以及sklearn库底层代码实现,这一篇文章我们来讲讲对于不同的梯度下降法,模型参数的更新效果有什么不同,这里列出了批量梯度下降法,随机梯度下降法和小批量梯度下降法三种,并且在文章的最后,还介绍了多项式回归以及如何通过岭回归对数据进行正则化从而降低模型过拟合风险。 首先回归一下之前的知识,对回归参数进行优化的本质实际上是使用梯度下降最小化目标损失函数,也就是求损失函数对参数的导数。 这里的 θ是模型输入特征对应的参数,在梯度下降中,每次迭代选定一个样本(或一批样本),然后根据这个样本计算所有参数的梯度,并根据这些梯度更新所有参数。 一、三种梯度下降对比1.1 BGD批量梯度下降简单粗暴的每次都选取所用样本来进行梯度下降,这样虽然能达到优化参数的效果,并且迭代次数相对较小,但是在大数据样本中,这样的矩阵计算量是比较大的 12345678910111213141516171819202122232425262728293031323334353637383940n_iterations = 1000#迭代次数m = len(x_b)#样本数...
模型评估方法
前言这一篇文章我们基于随机梯度下降分类器(一种线性分类器)来讲讲如何对模型准确度进行评估,涉及到交叉验证,混淆矩阵以及ROC曲线等内容 一、交叉验证在机器学习中,我们通常把数据分成训练集和验证集,交叉验证可以确保模型在不同的数据子集上都能表现良好。如果模型在某些子集上表现很好,但在其他子集上表现很差,这可能表明模型存在过拟合或欠拟合的问题。通过交叉验证,可以更全面地评估模型的泛化能力,从而避免过拟合和欠拟合。 下面对比两种检查验证的特点 可以看出似乎K折检查验证更加科学,接下来我们展示一个K折交叉验证的案例 当然,也可以用**StratifiedKFold实现** 123456789101112131415161718192021222324252627282930313233343536373839404142434445import numpy as npimport osimport matplotlib.pyplot as pltimport pandas as pdplt.rcParams["axes.labelsize"] = 14plt.rc...
线性回归(一):线性回归理论以及代码复现
前言 线性回归是一种统计方法,用于建立一个或多个自变量(解释变量)与因变量(响应变量)之间的关系。线性回归模型假设因变量与自变量之间存在线性关系,即因变量可以表示为自变量的线性组合加上一个随机误差项。通俗来讲,线性回归就是找到一条直线(或者平面)来拟合数据点,在这条直线后面,我们加入了一个误差项,并且假设这个误差符合正态分布并且相互独立。 说到假设: 线性关系:因变量与自变量之间存在线性关系。 独立性:自变量之间相互独立,没有多重共线性。 正态性:随机误差项 ϵ 服从正态分布。 同方差性:随机误差项 ϵ 的方差在所有自变量的取值范围内保持不变。 无自相关:随机误差项 ϵ 之间相互独立,没有自相关性。 一、理论部分简单概述对于简单线性回归的每个样本x以及对应的输出y,我们假设: 对于多元线性回归的每个样本矩阵X以及对应的输出y,我们假设: y 是因变量向量,大小为 n×1。 X 是设计矩阵,大小为 n×(p+1),其中第一列是常数项(全为1),其余列是自变量的值。 β 是参数向量,大小为 (p+1)×1。这里p+1的1表示截距项 β_0 ϵ...
数组与链表
前言力扣刷题知识笔记和思路记录 刷题指南参考:CyC2018/CS-Notes: :books: 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计https://github.com/CyC2018/CS-Notes/tree/master/ 知识点参考:Hello 算法!https://www.hello-algo.com/ 一、数组(1)280-移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 123输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0] 示例 2: 123输入: nums = [0]输出: [0] 12345678910111213141516171819class Solution(object): def moveZeroes(self, nums): """ :type nums: List[int] ...

