代码素材网站seo与网站优化
2026/4/18 11:09:27 网站建设 项目流程
代码素材网站,seo与网站优化,导航wordpress模板下载地址,网站开发的就业一、深度学习的介绍深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向。是一种人工智能的子领域#xff0c;它基于人工神经网络的概念和结构#xff0c;通过模拟人脑的工作方式来进行机器学习。深度学习的主要特点是使用多层次的神经网络来…一、深度学习的介绍深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向。是一种人工智能的子领域它基于人工神经网络的概念和结构通过模拟人脑的工作方式来进行机器学习。深度学习的主要特点是使用多层次的神经网络来提取和学习数据中的特征并通过反向传播算法来优化网络参数从而实现对复杂数据的建模与分类。深度学习在图像识别、语音识别、自然语言处理等领域取得了显著的成果并被广泛应用于各种领域。神经网络是一种由多个神经元或称为节点组成的计算模型它模拟了生物神经系统中神经元之间的连接方式。神经网络有输入层、隐藏层和输出层组成其中输入层用于接收外界的输入信号输出层用于输出预测结果隐藏层则用于处理输入信号并产生中间结果。1、神经网络构造神经元1为输入层而外部传入的x1、x2、x3、x4、x5、……全部都是外界即将传入神经元的电信号这些电信号在传入途中可能会有所损耗而损耗完剩下的才会传入神经元这些传入的实际信号就用w1x1、w2x2、w3x3、w4x4、w5x5、……来表示w叫做权重。神经网络每个节点代表一种特定的是由大量的节点或称“神经元”和之间相互的联接构成。输出函数称为激励函数、激活函数activation function。每两个节点间的联接都代表一个对于通过该连接信号的加权值称之为权重这相当于人工神经网络的记忆。推导需要记忆1、设计一个神经网络时输入层与输出层的节点数往往是固定的中间层则可以自由指定2、神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向跟训练时的数据流有一定的区别3、结构图里的关键不是圆圈代表“神经元”而是连接线代表“神经元”之间的连接。每个连接线对应一个不同的权重其值称为权值这是需要训练得到的。中间层该如何确定输入层的节点数与特征的维度匹配输出层的节点数与目标的维度匹配。中间层的节点数目前业界没有完善的理论来指导这个决策。一般是根据经验来设置。较好的方法就是预先设定几个可选值通过切换这几个值来看整个模型的预测效果选择效果最好的值作为最终选择。2、感知器由两层神经元组成的神经网络--“感知器”Perceptron,感知器只能线性划分数据。公式是线性代数方程组因此可以用矩阵乘法来表达这两个公式输出的结果与训练集标签进行损失函数计算与逻辑回归基本一致。神经网络的本质通过参数与激活函数来拟合特征与目标之间的真实函数关系。但在一个神经网络的程序中不需要神经元和线本质上是矩阵的运算实现一个神经网络最需要的是线性代数库。3.多层感知器增加了一个中间层。即隐含层它是神经网络可以做非线性分类的关键假设我们的预测目标是一个向量那么与前面类似只需要在“输出层”再增加节点即可。偏置在神经网络中需要默认增加偏置神经元节点这些节点是默认存在的。 它本质上是一个只含有存储功能且存储值永远为1的单元。 在神经网络的每个层次中除了输出层以外都会含有这样一个偏置单元。偏置节点没有输入前一层中没有箭头指向它。 一般情况下我们都不会明确画出偏置节点4、训练方法-损失函数模型训练的目的使得参数尽可能的与真实的模型逼近。具体做法1、首先给所有参数赋上随机值。我们使用这些随机生成的参数值来预测训练数据中的样本。 2、计算预测值为yi真实值为y。那么定义一个损失值loss损失值用于判断预测的结果和真实值的误差误差越小越好。常用的损失函数1.0-1损失函数 公式 特点与用途离散型损失非连续不可导不能直接用于梯度下降。主要用于分类任务直接度量分类错误率。实际训练中很少直接优化它因为无法求导但在理论分析和模型评估中常见2.均方差损失 公式 特点与用途连续可导对异常值敏感因为平方会放大大误差。常用于回归任务假设误差服从高斯分布时MSE 是极大似然估计的结果。在神经网络中如果最后一层是线性激活常用 MSE 作为损失函数。3.平均绝对差损失 公式 特点与用途对异常值不敏感比 MSE 稳健。在零点不可导但可用次梯度方法优化。常用于回归任务尤其是在数据含有噪声或离群点时。4.交叉熵损失 公式二分类 多分类Softmax Cross-Entropy 特点与用途源自信息论衡量两个概率分布的差异。用于分类任务特别是神经网络中配合 Softmax/Sigmoid 输出。在概率预测上比 MSE 更合适梯度形式利于优化。5.合页损失 公式用于 SVM 的二分类 特点与用途用于支持向量机SVM鼓励间隔最大化。对分类正确的样本yiy^i≥1yi​y^​i​≥1损失为 0否则线性增加。不是概率输出常用于最大间隔分类。5、神经网络构造--正则化惩罚正则化惩罚的功能主要用于惩罚权重参数w一般有L1和L2正则化至此整个神经网络从前往后数据计算方法已经全部完成但还没有实现w的更新方法6、神经网络构造--梯度下降1.偏导数我们知道一个多变量函数的偏导数就是它关于其中一个变量的导数而保持其他变量恒定。该函数的整个求导例如计算像 fw0w1w0x1²* w1x2 这样的多变量函数的过程可以分解如下2.梯度梯度可以定义为一个函数的全部偏导数构成的向量梯度向量的方向即为函数值增长最快的方向3.梯度下降法是一个一阶最优化算法通常也称为最陡下降法 要使用梯度下降法找到一个函数的局部极小值步长学习率梯度可以确定移动的方向。学习率将决定我们采取步长的大小。不易过小和过大如何解决全局最小的问题产生多个随机数在不同的位置分别求最小值。7、BP神经网络BPBack-propagation反向传播前向传播得到误差反向传播调整误差再前向传播再反向传播一轮一轮得到最优解的。步骤1.计算正向传播输出的结果2.计算损失函数3.计算w值的梯度下降4、误差反向传播将每个维度偏导数导入本次的w值初次w值为随机初始化并乘以步长即得到新的w值。5.循环调整w的值直到损失值小于允许的范围8、相关代码import torch import torchvision import torchaudio print(torch.__version__)#1.X print(torchvision.__version__)#1.X print(torchaudio.__version__) mnist包含70.000张手写数字图像60.000张用于训练10.000张用于测试 图像是灰度的28x28像素的并且居中的以减少预处理和加快运行 import torch from torch import nn#导入神经网络模块 from torch.utils.data import DataLoader#数据包管理工具打包数据 from torchvision import datasets # 封装了很多与图像相关的模型数据集 from torchvision.transforms import ToTensor #数据转换张量将其他类型的数据转换为tensor张量numpy array 下载训练数据集(包含训练图片标签) training_data datasets.MNIST( #跳转到函数的内部源代码pycharm 按下ctrl 鼠标点击 rootdata,#表示下载的手写数字 到哪个路径。60000 trainTrue,#读取下载后的数据 中的 训练集 downloadTrue,#如果你之前已经下载过了就不用再下载 transformToTensor(),#张量图片是不能直接传入神经网络模型 )#对于pytorch库能够识别的数据一般是tensor张量 # datasets.MNIST的参数 # root(string)表示数据集的根目录 # trainbooloptional如果为true则从trainingpt创建数据集否则从test.pt创建数据集 # downloadbooloptional如果为true则从internet下载数据集并将其放入根目录如果数据集已经下载则不会再次下载 # transformcallableoptional接收pil图片并返回转换后版本图片的转换函数 下载测试数据集包含训练图片标签 test_data datasets.MNIST( rootdata, trainFalse, downloadTrue, transformToTensor(),#Tensor是在深度学习中提出并广泛应用的数据类型它与深度学习框架(如 PyTorch、TensorFlow)紧密集成方便进行神经网络的训练和) )#NumPy 数组只能在CPU上运行。Tensor可以在GPU上运行这在深度学习应用中可以显著提高计算速度。 print(len(training_data)) 展示手写字图片把训练数据集中前19000张图片展示一下 from matplotlib import pyplot as plt figueplt.figure() for i in range(9): img,labeltraining_data[i59000]#提取第59000张图片 figue.add_subplot(3,3,i1)#图像窗口中创建多个小窗口小窗口用于显示图片 plt.title(label) plt.axis(off)#plt.show()#显示矢量 plt.imshow(img.squeeze(),cmapgray)#plt.imshow()将NumPy数组data中的数据显示为图像并在图形窗口中显示该图像 aimg.squeeze()# img.squeeze()从张量imng中去掉维度为1的。如果该维度的大小不为1则张量不会改变。#cmapgray表示使用灰度色彩映射来显示图像。 # plt.show() 创建数据dataloader数据加载器 batch_size:将数据集分成多分每一份为batch——size个数据 优点可以减少内存的使用提高训练速度 train_dataloader DataLoader(training_data, batch_size64) #64张图片为一个包,更换批次的大小也可以调整最后准确率2的指数 test_dataloader DataLoader(test_data, batch_size64) for X,y in test_dataloader:#X是表示打包好的每一个数据包 print(fShape of X[N,C,H,W]:{X.shape}) print(fShape of y:{y.shape} {y.dtype}) break 判断当前设备是否支持GPU其中mps是苹果m系列芯片的GPU#返回cudampscpu m1m2集显cpugpu rtx3060 device cuda if torch.cuda.is_available() else mps if torch.backends.mps.is_available() else cpu print(fUsing {device} device)#字符串格式化。CUDA驱动软件的功能pytorch能够去执行cuda的命令cuda通过GPU指令集去控制GPU #神经网络的模型也需要传入到GPU1个batchsize的数据集也需要传入GPU才可以进行训练 定义神经网络 类的继承 class NeuralNetwork(nn.Module):#通过调用类的形式来使用神经网络神经网络的模型nn.module def __init__(self):#python的基础关于类self类自己本身 super().__init__()#继承的父类初始化 self.a 10 self.flattennn.Flatten()#展开创建一个展开对象flatten self.hidden1nn.Linear(28*28,out_features128)#第一个参数有多少个神经元传入进来第二个参数有多少个数据 self.hidden2nn.Linear(in_features128,out_features256) self.hidden3nn.Linear(in_features256,out_features512) self.outnn.Linear(in_features512,out_features10)#输出必须和标签的类别相同输入必须是上一层的神经元个数 self.dropoutnn.Dropout(0.2) def forward(self,x):#前向传播你要告诉他数据的流向视神经网络层连接起来函数名称不能改。 # x self.flatten(x)#图像进行展开 # x self.hidden1(x) # x torch.sigmoid(x)#激活函数torch使用的relu函数relutanh # x self.hidden2(x) # x torch.sigmoid(x) # x self.out(x) x self.flatten(x)#图像进行展开 x torch.relu(self.hidden1(x))#图像进行展开 x self.dropout(x) x torch.relu(self.hidden2(x))#激活函数torch使用的relu函数relutanh x self.dropout(x) x torch.relu(self.hidden3(x)) x self.out(x) return x model NeuralNetwork().to(device)#把刚刚创建的模型传入到GpU print(model) def train(dataloader,model,loss_fn,optimizer): model.train()#告诉模型我要开始训练模型中w进行随机化操作已经更新w在训练过程中w会被修改的 #pytorch提供2种方式来切换训练和测试的模式分别是model.train()和model.eval() #一般用法是在训练开始之前写上model.trian()在测试时写上model.eval() batch_size_num1#统计训练的batch数量 for X,y in dataloader:#其中batch为每一个数据的编号 X,y X.to(device),y.to(device) # 把训练数据集和标签传入cpu或GPU pred model.forward(X)#.forward可以被省略父类中已经对此功能进行了设置 loss loss_fn(pred,y) optimizer.zero_grad() loss.backward() optimizer.step() loss_value loss.item() if batch_size_num %1000: print(floss:{loss_value:7f} [number:{batch_size_num}]) batch_size_num 1 def test (dataloader,model,loss_fn): 测试函数 sizelen(dataloader.dataset) num_batchslen(dataloader) model.eval() test_loss, correct 0,0 with torch.no_grad(): for X,y in dataloader: X,y X.to(device),y.to(device) pred model.forward(X) test_loss loss_fn(pred,y).item() # test_loss是会自动累加每一个批次的损失值 correct (pred.argmax(1) y).type(torch.float).sum().item() # 标量 a(pred.argmax(1) y) # dim1表示每一行中的最大值对应的索引号dim日表示每一列中的最大值对应的索引号 b(pred.argmax(1) y).type(torch.float) test_loss / num_batchs correct / size print(f结果: \n Accuracy :{(100*correct)}%,Avg loss:{test_loss}) loss_fnnn.CrossEntropyLoss() optimizer torch.optim.SGD(model.parameters(),lr0.1)#尝试不同的值可以确保最后的准确率 #SGD改为Adom优化器通常效果更好 # train(train_dataloader,model,loss_fn,optimizer) # test(test_dataloader,model,loss_fn) epochs10 for t in range(epochs): print(fEpoch{t1}\n开始训练) train(train_dataloader,model,loss_fn,optimizer) print(训练结束) test(test_dataloader,model,loss_fn)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询