自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(691)
  • 问答 (4)
  • 收藏
  • 关注

原创 9、 Jenkins实现基础CI操作

第四步、构建好后,让jenkins将jar包推送到我们的目标服务器(docker运行起来)

2024-06-07 02:27:30 1235

原创 3、DDD与CQRS(命令与查询分开)

CQRS(命令和查询职责分离)职责分离(架构上做分解,也就是一个查询模块,一个命令模块(查询模块依赖命令模块))1、查询模块依赖命令模块我们一般都是稳定的去依赖不稳定的了,查询模块是稳定的,命令模块是不稳定的了2、查询和命令模块,不是简单的读写分离,用来构造一些什么需要读取数据结构的也是属于查询模块的(也就是组装也是在查询模块来做的)3、查询模块和命令模块使用的数据库或者表可以相同也可以不相同,甚至与可以是不同的类型数据库

2024-03-09 17:39:11 694

原创 22、7大参数自定义线程池(核心线程数,最大核心线程数。。。拒绝策略(4种))

第二种拒绝策略:(CallerRunsPolicy(哪来的去哪里))这里我们是main线程创建的,所以就是main线程去处理。第一步:5个人进去(2个核心数处理,3个再阻塞队列里面,最大5个个核心线程数(3个在等待阻塞队列满了唤醒))第三个拒绝策略(DisCarPolict(队列满了,丢掉任务(不处理)不会抛出异常))第二步:进去6个人(就会使用2个核心线程和,一个最大线程数里的了,(3个再阻塞队列里))7大参数模型:(这里也说下线程池的运行逻辑)走this方法里(可以看到有7个参数)

2022-11-16 15:54:06 1356

原创 2、Jvm类加载器和双亲委派机制

双亲委派机制(我们创建一个类,类加载器收到这个类加载的请求,他会先向上找类(委托)),找到后再从最上上面检查是否能够加载这个类,能加载就结束,就使用这个类加载器,若无法加载就抛出异常,让子加载器加载)重复步骤。流程是只有当我们的类被委托到最上面再往下查找加载都没有才会是我们自己的AppClassLoader加载我们自己写的类,然后执行main方法。实践2(可以用我们Student类下面的main方法打印类对象的toSting方法)实践1、(无法用我们写的Sting类的main方法)

2022-11-08 08:48:06 239

原创 48、ANN手机价格分类案例

本文介绍了一个基于PyTorch的手机价格分类模型构建流程。首先通过数据预处理(标准化、特征标签分离、转换为张量)准备训练集和测试集。模型采用多层神经网络结构,包含ReLU激活函数和Dropout层以防止过拟合。训练过程使用Adam优化器和交叉熵损失函数,经过100轮训练后准确率达到90%。评估结果显示模型在测试集上的准确率为72.6%,F1-score为72.76%,表明模型具有较好的分类性能。文章还详细解释了准确率、精确率、召回率和F1-score等评估指标的计算方法和实际意义。

2025-12-11 00:43:30 1448

原创 47、正则化(批量归一化(BN))

摘要:批量归一化(BN)本质是标准化处理与可学习重构的结合,通过先标准化数据(可能损失信息)再进行线性重构(γ*x+β)来恢复部分信息。研究表明,BN需配合特征提取层(Linear/Conv)使用效果更佳。实验验证了BN在1D/2D数据上的应用,其中2D数据可直接处理,1D数据需先经线性层转换。测试结果显示BN能有效调整数据分布,输出结果呈现标准化特征。该技术由Ioffe和Szegedy于2015年提出,命名"归一化"旨在强调将数据归一到稳定分布的目的。

2025-12-11 00:42:20 132

原创 46、正则化(dropout随机失活)

Dropout正则化是一种防止神经网络过拟合的有效方法。它通过在训练时随机以概率p让神经元失活(通常p=0.2-0.5),并对保留的神经元进行1/(1-p)倍缩放。这种机制相当于训练多个子网络,破坏神经元间的固定依赖关系,强制学习更鲁棒的特征。测试时所有神经元保持激活。实验显示,Dropout能使单个样本产生多个变体,实现类似数据增强的效果。代码示例演示了PyTorch中Dropout层的实现过程,包括激活后随机失活和缩放操作。这种方法特别适用于参数多、数据少的场景,能有效提升模型泛化能力。

2025-12-11 00:41:30 260

原创 45、学习率衰减策略总结

2025-12-11 00:40:44 73

原创 44、学习率衰减策略(指数间隔学习率衰减)

本文介绍了PyTorch中的三种学习率衰减策略实现方法。首先展示了指数间隔学习率衰减(ExponentialLR),其公式为lr_new = lr_old * gamma^epoch,gamma通常设为0.95。然后通过代码演示了三种衰减策略:1)固定间隔衰减(StepLR),每50轮衰减0.5倍;2)多间隔衰减(MultiStepLR),在指定轮数(50,100,125,160)衰减0.5倍;3)指数衰减(ExponentialLR),每轮衰减0.95倍。每种策略都使用SGD优化器,并绘制了学习率随训练轮

2025-12-11 00:40:07 47

原创 43、学习率衰减策略(指定间隔学习率衰减)

本文展示了两种PyTorch学习率衰减策略的实现。第一种是固定间隔衰减(StepLR),每50个epoch学习率衰减为原来的一半。第二种是指定间隔衰减(MultiStepLR),在epoch达到[50,100,125,160]时衰减学习率50%。两种方法都通过SGD优化器训练简单线性模型,并绘制学习率随epoch变化的曲线。测试结果表明,StepLR呈现规则的阶梯式下降,而MultiStepLR在指定milestone处出现学习率突变。两种策略都能有效实现学习率动态调整,适用于不同的训练场景需求。

2025-12-11 00:39:16 69

原创 42、学习率衰减策略(等间隔学习率衰减)

摘要:本文演示了PyTorch中StepLR学习率衰减策略的使用。通过SGD优化器配合StepLR调度器,实现了每50个epoch将学习率衰减一半的效果(初始lr=0.1)。关键点在于:1)scheduler.step()需在每个epoch后调用;2)实际学习率更新由内部计数器控制;3)通过get_last_lr()获取当前学习率。实验使用200个epoch进行验证,最终学习率变化曲线(每50epoch减半)通过matplotlib可视化展示,证实了StepLR的正确实现方式。

2025-12-09 19:50:19 141

原创 41、学习率优化(背景介绍)

本文介绍了神经网络训练中的关键参数学习率及其优化方法。学习率过大易导致loss震荡,过小则收敛缓慢,通常需人工设置。文章阐述了前向传播过程(z=wx+b及激活函数)和反向传播机制(w_new=w_old-学习率*梯度),以及BP算法如何通过损失值(真实值-预测值)来优化模型参数。这些内容是理解神经网络训练过程的基础知识。

2025-12-09 19:49:18 121

原创 40、梯度下降优化方法(Adam)

本文对比了四种梯度下降优化方法的实现效果。通过PyTorch框架测试了Momentum、AdaGrad、RMSProp和Adam四种优化器在简单二次函数上的表现。测试结果显示:Momentum方法两次迭代后权重从1.0降至0.9711;AdaGrad收敛较慢,降至0.9830;RMSProp下降最快,降至0.8329;Adam方法表现介于Momentum和AdaGrad之间,降至0.9800。实验代码清晰展示了不同优化器的参数设置和更新过程,为理解各优化算法的实际表现提供了直观参考。

2025-12-09 19:48:38 222

原创 39、梯度下降优化方法(RMSprop)

本文比较了三种梯度下降优化方法:带冲量的SGD、Adagrad和RMSprop。通过PyTorch实现测试,结果显示:带冲量的SGD和Adagrad在前两次迭代中权重更新相似(0.99→0.98),而RMSprop更新幅度更大(0.9→0.8)。RMSprop在Adagrad基础上引入指数加权平均,能更有效地调整学习率。测试代码展示了不同优化器在简单二次函数上的表现差异,为选择优化算法提供了参考依据。

2025-12-09 19:47:01 85

原创 38、梯度下降优化方法(adaGrad)

本文对比了两种优化算法的实现效果:SGD with Momentum和AdaGrad。通过PyTorch代码测试,当初始权重为1.0时,Momentum方法两次迭代后权重降至0.9801,而AdaGrad方法降至0.9800。两种方法在第一次迭代时都使权重降至0.9900,但第二次迭代时AdaGrad的下降幅度略大(0.0100 vs 0.0099)。测试结果表明,在简单二次函数优化场景下,两种优化器表现相似,但AdaGrad对历史梯度平方和的自适应调整使其具有更稳定的学习率调整特性。

2025-12-06 09:55:23 100

原创 37、梯度下降优化方法(动量法Momentum)

摘要:本文介绍了动量法(Momentum)在梯度下降优化中的应用。动量法通过引入指数加权平均来优化梯度计算,公式为St=βSt-1+(1-β)Gt,其中β为权重调节系数(通常设为0.9)。该方法将参数更新从w新=w旧-学习率Gt变为w新=w旧-学习率St。文中提供了使用PyTorch实现动量法的测试代码,展示了两次迭代后的权重和梯度变化情况。测试结果表明,随着迭代进行,权重逐渐减小,梯度也随之更新。

2025-12-06 09:54:22 365

原创 36、指数移动加权平均

本文介绍了指数移动加权平均(Yt)的计算方法,其中St表示当前时刻的加权平均,St-1为前一时刻的加权平均。参数β通常设为0.9,这使得当前梯度影响较小(0.1),而主要依赖历史数据的加权平均(0.9)。随着计算时间推移,β的指数效应会使平均值变化更加平缓,体现了"移动"的特征。该方法通过调整β值可以控制平均值的平滑程度,β越大结果越稳定。

2025-12-06 09:53:03 151

原创 35、反向传播(BP算法)

本文介绍了神经网络中的反向传播(BP)算法原理。算法通过计算损失函数值,从输出层反向传播误差,结合梯度下降法(w新=w旧-学习率*梯度)更新权重。前向传播过程包括加权求和和激活函数计算,输出层使用MSE损失函数计算预测值与真实值的误差。反向传播时,先计算各权重梯度(如w5的梯度),然后按公式更新权重和偏置。更新完成后可重新计算损失值,进行下一轮训练迭代。整个过程通过不断调整参数来最小化损失函数。

2025-12-03 20:32:05 237

原创 34、梯度下降回顾

摘要:梯度下降是优化损失函数的常用方法,其核心在于通过迭代寻找损失函数的最小值。不同梯度下降算法的本质区别在于使用的批次规模,包括批量梯度下降(全数据集)、随机梯度下降(单样本)和小批量梯度下降(折中方案)。批次大小的选择直接影响计算效率和收敛速度,需要根据具体场景权衡。

2025-12-03 20:30:20 132

原创 33、损失函数(回归任务损失函数SmoothL1Loss)

摘要:本文介绍了三种回归任务损失函数:L1 Loss(MAE)、L2 Loss(MSE)和Smooth L1 Loss。L1 Loss计算绝对误差的平均值,L2 Loss计算平方误差的平均值。Smooth L1 Loss结合了L1和L2的优点,在[-1,1]区间使用L2保证光滑性,其他区间使用L1防止梯度爆炸。通过PyTorch代码示例演示了三种损失函数的计算过程,测试结果显示在相同输入下,L1 Loss为2.67,MSE为10.44,Smooth L1 Loss为2.09,验证了不同损失函数的特性差异。

2025-12-03 20:28:32 110

原创 32、损失函数(回归任务损失函数MESLoss)

本文对比了L1损失(MAE)和L2损失(MSE)的计算差异。通过PyTorch示例代码展示了3x3矩阵的预测值与真实值之间的损失计算:L1损失计算绝对误差均值(结果为2.67),而L2损失计算平方误差均值(结果为10.44)。L2损失由于平方运算,在误差较大时容易出现梯度爆炸问题。测试结果表明,对于相同输入数据,L2损失值显著大于L1损失值,验证了平方放大大误差的特性。

2025-12-03 20:26:48 124

原创 31、损失函数(回归任务损失函数L1Loss)

摘要:L1损失函数(MEA)通过计算预测值与真实值绝对差值的均值实现回归任务,具有主动产生稀疏性的特点。该特性源于L1正则化的数学优化机制,倾向于将大量权重参数归零,形成"精英团队"式的特征选择。相比之下,L2正则化仅均匀压缩权重而不产生零值。实验代码展示了L1损失的计算过程,当预测值与真实值差异为[2,2,2,2,0,1,4,5,6]时,平均损失结果为2.67,验证了其绝对值求和的特性。

2025-12-03 20:20:09 538

原创 30、二分类和多分类的区别

摘要:本文比较了二分类和多分类任务在标签表示上的区别。二分类常用单值类别索引(0/1)或二维one-hot编码(如[[1,0],[0,1]]),而多分类使用多值类别索引(0到K-1)或K维one-hot编码(如[[1,0,0],[0,1,0]])。关键判别方法是:二分类标签值仅为0/1或one-hot向量长度为2;多分类标签值包含0到K-1或one-hot向量长度K>2。两种任务都支持类别索引和one-hot两种表示格式,但前者更常用。

2025-12-03 20:18:58 935

原创 29、损失函数(二分类损失函数BCELoss)

本文演示了二分类任务中BCELoss(二元交叉熵损失函数)的计算过程。通过PyTorch实现,当真实标签为0时,损失为-log(1-y_pred);为1时则为-log(y_pred)。示例中,真实标签y_true=[0,1,0],预测值y_pred=[0.347,0.876,0.224],计算得到三个样本的损失分别为0.426、0.132和0.254,平均损失约为0.271,与程序输出结果0.2707一致。该测试验证了BCELoss在二分类任务中的正确计算方式。

2025-12-03 20:15:22 175

原创 28、损失函数(多分类交叉熵损失)

本文探讨了损失函数在分类和回归任务中的应用,重点分析了多分类交叉熵损失函数。损失函数通过比较预测值与真实值的差异来衡量模型质量。在多分类问题中,理论公式使用one-hot编码表示真实概率,而实际实现通常采用更高效的类别索引形式。文章通过PyTorch代码示例展示了两种表示方式的等价性,并对比了多分类与二分类在标签表示上的关键区别:二分类标签为0/1或长度2的one-hot向量,多分类则为0到K-1的整数或长度K的one-hot向量。最后通过具体案例演示了CrossEntropyLoss的计算过程,验证了理论

2025-11-26 16:10:11 550

原创 27、神经网络的搭建流程

本文展示了使用PyTorch搭建神经网络的完整流程:1)定义继承nn.Module的类;2)在__init__中构建网络结构(包含2个隐藏层和输出层);3)实现forward方法定义前向传播路径(使用sigmoid和relu激活函数);4)采用Xavier和Kaiming方法初始化权重。测试部分演示了模型训练过程,包括数据准备、模型实例化和参数统计。结果显示网络包含3层结构,共26个可训练参数,验证了模型构建的正确性。整个过程涵盖了深度学习模型开发的核心步骤。

2025-11-25 10:41:09 560

原创 25、激活函数softmax

摘要:本文介绍了softmax激活函数在多分类问题中的应用,它能将输出转换为概率分布(总和为1),并选取概率最大的类别作为结果。文章建议隐藏层使用ReLU激活函数,输出层针对二分类用sigmoid、多分类用softmax。通过PyTorch代码示例展示了softmax的计算过程:当输入值差异较大时(如[0.1,0.3,0.3,0.4,0.8])会得到不均衡的概率分布;当输入值相同时(如全0.1)则输出均匀分布。测试结果验证了softmax的特性。

2025-11-24 17:04:41 135

原创 26、神经网络参数初始化

本文介绍了神经网络参数初始化的目的和方法。初始化主要解决梯度消失/爆炸问题,提高收敛速度,并破除对称性。常见方法包括均匀分布、正态分布、全0/全1、固定值初始化,以及专为特定激活函数设计的Kaiming(适合ReLU)和Xavier(适合Sigmoid/Tanh)初始化。通过PyTorch代码示例演示了7种初始化方式的实际应用,包括uniform_()、normal_()、zeros_()、ones_()、constant_()、kaiming系列和xavier系列,并展示了各方法生成的权重矩阵效果。测试结

2025-11-24 17:02:44 666

原创 24、模拟线性回归

摘要:本文详细介绍了使用PyTorch实现线性回归模型的完整流程。首先通过make_regression生成模拟数据,包含100个样本点并添加噪声。然后创建TensorDataset和DataLoader进行数据分批处理。模型采用nn.Linear(1,1)结构,使用MSELoss作为损失函数和SGD优化器。训练过程包括前向传播、损失计算、反向传播和参数更新等步骤。实验结果显示,经过100轮训练后,模型权重从初始值27.48收敛到27.63,偏置从14.5收敛到13.88。文章还展示了损失函数下降曲线和模型

2025-11-23 21:46:19 821

原创 23、激活函数ReLu

ReLU激活函数通过f(x)=max(0,x)实现非线性变换,其梯度在x>0时为1,训练效率高且能缓解梯度消失问题。虽然存在神经元死亡风险(x≤0时梯度为0),但这也起到一定防过拟合作用。通过He初始化等方法可使大部分神经元保持激活状态(x>0),从而梯度基本为1。ReLU特别适合深层网络的隐藏层,因其计算简单且能保持较大梯度,有效促进深度网络的训练。

2025-11-23 21:44:53 176

原创 22、激活函数tanh

摘要:Tanh激活函数将输入映射到(-1,1)区间,导数范围为(0,1),能有效缓解梯度消失问题,收敛速度比Sigmoid快。但因其输出范围较小,仍可能发生梯度消失,故更适合浅层神经网络。建议在隐藏层使用Tanh,输出层使用Sigmoid。该组合能平衡梯度传播和输出稳定性,提升网络训练效率。(99字)

2025-11-23 21:44:06 141

原创 21、激活函数Sigmoid

摘要:Sigmoid激活函数将输入wx+b映射到(0,1)区间,在[-3,3]区间变化明显。其导数在|x|>6时趋近0,导致权重更新停滞,5层网络就会出现梯度消失(0.25^5≈0.0009)。该函数适用于二分类,当x=0时输出0.5,此时导数最大为0.25。通过二次求导可找到导数函数的极值点。Sigmoid的梯度消失问题限制了其在深层网络中的应用。

2025-11-22 11:06:05 104

原创 20、激活函数介绍

2025-11-22 11:05:09 126

原创 19、如何构建神经网络

人工神经网络(ANN)由多个相互连接的神经元组成,每个神经元包含加权求和(z=wx+b)和激活函数(f(z))两部分。输入层神经元数量等于输入特征数,权重w各不相同以保证训练效果。神经网络采用全连接方式,前层输出作为后层输入。核心特点包括:正向传播时的加权求和与激活函数处理,以及反向传播时的误差调整。这种结构通过线性回归与非线性激活(如sigmoid)相结合,实现从特征到概率的映射。

2025-11-22 11:04:18 210

原创 18、自动微分的完整案例

本文演示了使用PyTorch实现线性回归模型的训练过程。首先定义输入数据x(2×5张量)和目标值y(2×3张量),根据矩阵乘法规则初始化权重w(5×3)和偏置b(3)。通过正向传播计算预测值z=wx+b,使用均方误差损失函数比较预测值与真实值。反向传播自动计算梯度后,按照w_new = w_old - 学习率*梯度的方式更新参数。测试结果显示权重w和偏置b在梯度下降后得到更新,验证了整个训练流程的正确性。关键点包括矩阵维度匹配、自动微分机制和梯度下降参数更新。

2025-11-20 17:37:16 282

原创 17、自动微分的detach方法

摘要:本文介绍了PyTorch中自动微分的detach方法。当张量设置requires_grad=True后,无法直接转为numpy数组,但使用detach()后可实现转换且共享内存。通过测试代码演示了detach的使用效果:1)原始张量w1和detach后的w2共享内存;2)w1保持自动微分属性而w2不保留;3)成功将detach后的张量转为numpy数组。结果表明detach在保持计算图分离的同时,方便了张量与numpy的互操作。

2025-11-20 17:35:55 207

原创 16、自动微分案例(循环更新权重参数)

摘要:该代码演示了使用PyTorch实现循环梯度下降的过程。通过100次迭代优化权重参数w,损失函数为w²+20。关键步骤包括:1)每次迭代前清零梯度;2)计算损失并进行反向传播;3)按学习率0.01更新权重。初始权重为10.0,经过100次训练后降至1.326,损失值从120降至21.83,梯度从20降至2.707,表明算法有效收敛。代码展示了自动微分在优化问题中的应用,以及梯度下降法的基本实现流程。

2025-11-20 17:35:04 128

原创 15、自动微分案例(更新一个w权重参数)

本文探讨了深度学习中Loss函数必须为标量的原因及实现方式。要点包括:1) 标量(单一数值)与向量/矩阵的区别;2) 通过sum求和将多维输出转为标量的必要性,因为梯度下降需要一个明确的优化目标;3) 对比求和与最大值方法的优劣,求和能保留所有样本信息实现均衡优化,而最大值方法会导致梯度稀疏和信息损失;4) 实际PyTorch示例展示了标量Loss的反向传播过程。最终强调,求和作为标准方法能确保模型综合考虑所有数据,实现稳定训练。

2025-11-20 17:34:03 796

原创 14、自动微分模块

本文介绍了机器学习中基本的正向传播和反向传播原理。正向传播通过y=wx+b计算预测值,其中x为特征输入,w为权重,b为偏置。反向传播通过损失函数求导(梯度)更新参数:w和b根据学习率与梯度进行调整。文章重点区分了一元与多元线性回归:一元仅有一个自变量x(如房价仅考虑面积),多元有多个自变量(如同时考虑面积、卧室数和房龄)。最后讨论了学习率的动态调整,从固定值到更高级的调度器(如指数衰减、余弦退火)和自适应优化器(如Adam),这些方法使学习率能够根据训练过程动态变化。

2025-11-20 17:32:41 906

原创 13、张量的拼接

摘要:PyTorch中的张量拼接操作分为cat和stack两种方式。cat操作允许在指定维度拼接不同大小的张量(其他维度必须相同),而stack操作会在新维度上连接形状完全相同的张量,新维度的大小等于输入张量的数量。通过具体示例展示了stack在不同维度(dim=0,1,2)上的拼接结果,并详细解释了stack的内存布局原理:采用行优先顺序遍历,最右侧维度变化最快。结果表明,stack操作会按照输入张量顺序将对应位置的元素组织到新增维度中。

2025-11-20 17:31:25 943

JUC最详细思维导图,一次了解读写锁,可重入锁,Cas原理,volatile 关键字原理

JUC最详细思维导图,一次了解读写锁,可重入锁,Cas原理,volatile 关键字原理

2023-06-27

扫雷图片资源,需要自取 关注点赞收藏

扫雷图片资源

2023-06-04

扫雷源码,需要自取,关注点赞收藏

扫雷源码

2023-06-04

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除