当前位置: 首页 > news >正文

解锁机器学习核心算法|神经网络:AI 领域的 “超级引擎”

一、神经网络:AI 领域的 “超级引擎”

在机器学习的庞大算法体系中,有十种算法被广泛认为是最具代表性和实用性的,它们犹如机器学习领域的 “十大神器”,各自发挥着独特的作用。这十大算法包括线性回归、逻辑回归、决策树、随机森林、K - 近邻算法、K - 平均算法、支持向量机、朴素贝叶斯算法、主成分分析(PCA)、神经网络。它们涵盖了回归、分类、聚类、降维等多个机器学习任务领域,是众多机器学习应用的基础和核心。

在当今科技飞速发展的时代,人工智能(AI)无疑是最耀眼的明星,而神经网络作为机器学习中的核心算法,更是推动 AI 不断前行的 “超级引擎”。从智能手机中的语音助手,到自动驾驶汽车,再到图像识别、自然语言处理等领域,神经网络的身影无处不在,它正以强大的学习和预测能力,改变着我们的生活和工作方式。那么,神经网络究竟是如何运作的?它又有着怎样的发展历程和应用前景呢?接下来,就让我们一起走进神经网络的奇妙世界。

二、神经网络的前世今生

神经网络的发展历程可谓是一部充满曲折与突破的科技史诗。它的起源可以追溯到 20 世纪 40 年代,当时,科学家们受到生物神经元的启发,开始尝试构建简单的人工神经元模型。1957 年,Frank Rosenblatt 提出了感知机(Perceptron) ,这是第一个可以学习的线性分类器,它能够实现简单的逻辑运算,如 “与”“或” 等,为神经网络的研究奠定了基础。然而,感知机只能处理线性可分问题,无法解决 “异或” 等非线性问题,这严重限制了其应用范围。加上当时的计算机计算能力有限,无法满足训练复杂神经网络的需求,Marvin Minsky 和 Seymour Papert 在其著作《感知机》中指出了感知机的局限性,对神经网络研究泼了一盆冷水,导致该领域的研究陷入低谷,神经网络迎来了它的第一次寒冬。

到了 20 世纪 80 年代,多层感知机(Multilayer Perceptron, MLP)的提出克服了单层感知机的局限性,能够解决非线性问题。它通过增加隐藏层的数量,使得神经网络能够处理更加复杂的非线性问题,隐藏层中的神经元可以对输入数据进行更加复杂的变换,从而提高了神经网络的表达能力 。同时,反向传播算法(Backpropagation Algorithm)的出现使得训练多层感知机成为可能,该算法通过计算神经网络的误差,并将误差从输出层反向传播到输入层,从而调整神经网络的权重,这一突破推动了神经网络的第二次发展浪潮。神经网络在语音识别、图像识别等领域取得了一定的进展,但由于训练数据不足、计算能力有限等问题,其性能仍然受到限制。随后在 90 年代,支持向量机(Support Vector Machine, SVM)等其他机器学习方法兴起,在性能和泛化能力上超越了当时的神经网络,且神经网络训练困难、容易过拟合等问题仍然没有得到很好解决,使得神经网络研究再次进入低谷。

直到 21 世纪 10 年代,随着硬件性能大幅提升,特别是 GPU 的应用为深度学习提供了强大的计算能力,大数据的出现也为训练深度神经网络提供了充足的数据支持。新的算法和网络结构不断涌现,例如卷积神经网络(Convolutional Neural Network, CNN)、循环神经网络(Recurrent Neural Network, RNN)等,极大地提升了神经网络的性能 。2012 年,Hinton 的团队使用深度学习算法在 ImageNet 图像识别比赛中取得了压倒性胜利,标志着深度学习时代的到来。此后,神经网络在图像识别、语音识别、自然语言处理、机器翻译等领域取得了突破性进展,并被广泛应用于各个行业,开启了神经网络发展的黄金时代。

三、神经网络的运作原理大揭秘

(一)神经元:神经网络的基石

神经元是神经网络的基本组成单元,其结构灵感来源于生物神经元。它主要由输入权重求和函数激活函数组成。每个神经元接收多个输入信号,这些输入信号与对应的权重相乘,然后将乘积结果进行求和,再通过激活函数处理后输出。

用数学公式来表示,假设一个神经元有 n n n 个输入 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1,x2,,xn,对应的权重为 w 1 , w 2 , ⋯ , w n w_1,w_2,\cdots,w_n w1,w2,,wn,偏置为 b b b,则神经元的输入总和 z z z 为:

z = ∑ i = 1 n w i x i + b z=\sum_{i = 1}^{n}w_ix_i + b z=i=1nwixi+b

然后,将 z z z 输入到激活函数 f f f 中,得到神经元的输出 y y y

y = f ( z ) y = f(z) y=f(z)

(二)激活函数:赋予神经网络 “智慧”

激活函数在神经网络中起着至关重要的作用,它为神经网络引入了非线性因素。如果没有激活函数,神经网络仅仅是简单的线性组合,无论网络有多少层,其表达能力都非常有限,只能处理线性可分问题。而激活函数的加入,使得神经网络能够学习和模拟复杂的非线性关系,大大提升了模型的表达能力。

常见的激活函数有 SigmoidReLU 等。

  • Sigmoid 函数的表达式为: σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1 + e^{-x}} σ(x)=1+ex1
    它将输入值映射到 0 到 1 之间,在早期的神经网络中应用广泛,比如在逻辑回归二分类问题中,常被用来将输出转换为概率值。但 Sigmoid 函数存在梯度消失问题,当输入值过大或过小时,其导数趋近于 0,导致在反向传播过程中梯度难以传递,使得网络训练困难。

  • ReLU(Rectified Linear Unit)函数则定义为: f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)
    当输入大于 0 时,输出等于输入;当输入小于等于 0 时,输出为 0。ReLU 函数计算简单,能够有效解决梯度消失问题,在现代神经网络中被广泛使用 ,如在卷积神经网络(CNN)和 循环神经网络(RNN)中,ReLU 函数常常作为隐藏层的激活函数,提高了网络的训练效率和性能。

(三)前向传播:数据的 “前进之旅”

前向传播是神经网络处理数据的过程,数据从输入层进入,依次经过隐藏层,最后到达输出层。在每一层中,神经元根据输入数据和权重进行计算,并通过激活函数输出结果,作为下一层的输入。

假设一个简单的三层神经网络,输入层有 n n n 个神经元,隐藏层有 m m m 个神经元,输出层有 k k k 个神经元。输入数据为 x = ( x 1 , x 2 , ⋯ , x n ) \mathbf{x}=(x_1,x_2,\cdots,x_n) x=(x1,x2,,xn),输入层到隐藏层的权重矩阵为 W 1 \mathbf{W}_1 W1,偏置为 b 1 \mathbf{b}_1 b1,隐藏层到输出层的权重矩阵为 W 2 \mathbf{W}_2 W2,偏置为 b 2 \mathbf{b}_2 b2

首先,计算隐藏层的输入 z 1 \mathbf{z}_1 z1

z 1 = W 1 T x + b 1 \mathbf{z}_1=\mathbf{W}_1^T\mathbf{x}+\mathbf{b}_1 z1=W1Tx+b1

然后,通过激活函数 f 1 f_1 f1 得到隐藏层的输出 a 1 \mathbf{a}_1 a1

a 1 = f 1 ( z 1 ) \mathbf{a}_1 = f_1(\mathbf{z}_1) a1=f1(z1)

接着,计算输出层的输入 z 2 \mathbf{z}_2 z2

z 2 = W 2 T a 1 + b 2 \mathbf{z}_2=\mathbf{W}_2^T\mathbf{a}_1+\mathbf{b}_2 z2=W2Ta1+b2

最后,通过激活函数 f 2 f_2 f2 得到输出层的输出 y \mathbf{y} y

y = f 2 ( z 2 ) \mathbf{y}=f_2(\mathbf{z}_2) y=f2(z2)

例如,在图像识别任务中,输入图像的像素值作为输入层数据,经过前向传播后,输出层得到对图像内容的预测结果,如识别出图像中的物体类别。

(四)反向传播:神经网络的 “学习秘籍”

反向传播是神经网络训练的核心算法,其原理是通过计算损失函数关于网络权重和偏置的梯度,来调整权重和偏置,使得网络的输出更接近真实值。

损失函数用于衡量网络预测值与真实值之间的差异,常见的损失函数有均方误差(MSE)、交叉熵损失等。以均方误差损失函数为例,假设网络的预测值为 y \mathbf{y} y,真实值为 t \mathbf{t} t,则损失函数 L L L 为:

L = 1 2 ∑ i = 1 k ( y i − t i ) 2 L=\frac{1}{2}\sum_{i = 1}^{k}(y_i - t_i)^2 L=21i=1k(yiti)2

反向传播利用链式法则,从输出层开始,将损失函数对输出层的梯度反向传播到隐藏层和输入层,计算出每一层的梯度。具体来说,首先计算损失函数对输出层输入 z 2 \mathbf{z}_2 z2 的梯度 ∂ L ∂ z 2 \frac{\partial L}{\partial \mathbf{z}_2} z2L ,然后根据 ∂ L ∂ z 2 \frac{\partial L}{\partial \mathbf{z}_2} z2L 计算出对隐藏层输出 a 1 \mathbf{a}_1 a1 的梯度 ∂ L ∂ a 1 \frac{\partial L}{\partial \mathbf{a}_1} a1L,进而计算出对隐藏层输入 z 1 \mathbf{z}_1 z1 的梯度 ∂ L ∂ z 1 \frac{\partial L}{\partial \mathbf{z}_1} z1L,最后得到对权重矩阵 W 1 \mathbf{W}_1 W1 W 2 \mathbf{W}_2 W2 以及偏置 b 1 \mathbf{b}_1 b1 b 2 \mathbf{b}_2 b2 的梯度。根据计算得到的梯度,使用梯度下降等优化算法更新权重和偏置,例如:

W 1 = W 1 − η ∂ L ∂ W 1 \mathbf{W}_1=\mathbf{W}_1-\eta\frac{\partial L}{\partial \mathbf{W}_1} W1=W1ηW1L

W 2 = W 2 − η ∂ L ∂ W 2 \mathbf{W}_2=\mathbf{W}_2-\eta\frac{\partial L}{\partial \mathbf{W}_2} W2=W2ηW2L

b 1 = b 1 − η ∂ L ∂ b 1 \mathbf{b}_1=\mathbf{b}_1-\eta\frac{\partial L}{\partial \mathbf{b}_1} b1=b1ηb1L

b 2 = b 2 − η ∂ L ∂ b 2 \mathbf{b}_2=\mathbf{b}_2-\eta\frac{\partial L}{\partial \mathbf{b}_2} b2=b2ηb2L

其中, η \eta η 为学习率,控制权重和偏置更新的步长。通过不断地进行前向传播和反向传播,网络逐渐学习到数据中的特征和规律,使得损失函数不断减小,网络的性能不断提升。

四、神经网络的强大功能与广泛应用

(一)数据分类:精准的 “分类大师”

数据分类领域,神经网络展现出了卓越的能力,堪称精准的 “分类大师”。以图像分类为例,卷积神经网络(CNN)在其中发挥着关键作用。在著名的 ImageNet 图像分类挑战赛中,参赛的 CNN 模型需要对海量的图像进行分类,涵盖了 1000 多个不同的物体类别。这些模型通过卷积层、池化层和全连接层等组件,自动提取图像中的特征,如物体的形状、颜色、纹理等 。例如,AlexNet 通过 5 个卷积层和 3 个全连接层,能够准确地识别出图像中的各种物体,在比赛中取得了优异的成绩,其成功证明了 CNN 在图像分类任务上的强大能力。

文本分类方面,神经网络同样表现出色。在垃圾邮件检测中,基于神经网络的模型可以对邮件内容进行分析,提取文本特征,判断邮件是否为垃圾邮件。循环神经网络(RNN)及其变体,如长短期记忆网络(LSTM)和门控循环单元(GRU),能够处理文本的序列信息,捕捉文本中的语义和上下文关系,从而实现准确的分类。例如,在对新闻文章进行分类时,LSTM 模型可以根据文章的内容,将其准确地分类到政治、经济、体育、娱乐等不同的类别中。

(二)数据预测:未来的 “预言家”

神经网络在数据预测领域也有着广泛的应用,如同未来的 “预言家”,能够根据历史数据预测未来趋势。在时间序列预测中,循环神经网络(RNN)及其变体被广泛应用。以股票价格预测为例,RNN 可以学习股票价格的历史走势,包括开盘价、收盘价、最高价、最低价等信息,以及相关的市场指标,如成交量、宏观经济数据等,从而预测未来的股票价格走势。长短期记忆网络(LSTM)则通过引入门控机制,能够更好地处理时间序列中的长期依赖问题,在股票价格预测、天气预报、电力负荷预测等任务中取得了较好的效果。

回归分析中,神经网络可以用于预测连续值。例如,在房价预测中,神经网络可以将房屋的面积、卧室数量、卫生间数量、地理位置、周边配套设施等特征作为输入,通过训练学习这些特征与房价之间的关系,从而预测出不同房屋的价格 。通过大量的数据训练,神经网络能够捕捉到影响房价的复杂因素,提供相对准确的价格预测。

(三)图像处理:图像领域的 “魔法师”

图像处理领域,神经网络就像一位神奇的 “魔法师”,展现出了强大的能力。在图像识别方面,卷积神经网络(CNN)是最常用的模型之一。人脸识别技术在安防、门禁系统、支付认证等领域有着广泛的应用。基于 CNN 的人脸识别系统,如商汤科技的 SenseFace 人脸识别技术,可以准确地识别出人脸的身份信息。该系统通过对大量人脸图像的学习,能够提取出人脸的独特特征,即使在不同的光照条件、姿态和表情下,也能实现高精度的识别。

目标检测任务中,神经网络可以识别出图像中感兴趣的物体,并确定其位置和类别。例如,在自动驾驶领域,基于神经网络的目标检测算法,如 YOLO(You Only Look Once)系列算法,可以实时检测出道路上的车辆、行人、交通标志等物体,为自动驾驶汽车的决策提供重要依据。YOLO 算法通过将图像划分为多个网格,每个网格负责预测物体的类别和位置,大大提高了检测速度,使其能够满足自动驾驶的实时性要求。

图像生成也是神经网络在图像处理中的重要应用。生成对抗网络(GAN)由生成器和判别器组成,生成器负责生成逼真的图像,判别器则负责判断生成的图像是否真实。在图像修复中,GAN 可以根据图像的现有部分,生成缺失的内容,实现图像的完整修复;在图像风格迁移中,GAN 可以将一幅图像的风格迁移到另一幅图像上,创造出具有独特艺术风格的图像作品。

(四)自然语言处理:语言的 “理解者”

自然语言处理领域,神经网络成为了语言的 “理解者”,能够实现机器翻译、情感分析、问答系统等多种任务。在机器翻译中,神经网络,特别是序列到序列(Seq2Seq)模型和 Transformer 模型,取得了重大突破。例如,谷歌的神经机器翻译系统(GNMT)采用了 Seq2Seq 模型和注意力机制,能够将一种自然语言自动翻译成另一种自然语言。该系统通过编码器将源语言文本编码为固定长度的向量,解码器再将该向量解码为目标语言文本。在解码过程中,注意力机制使解码器能够关注源语言文本中的不同部分,从而提高翻译质量,使得机器翻译的结果更加准确和自然。

情感分析是自然语言处理中的一个重要任务,旨在识别文本中所表达的情感倾向,如正面、负面或中立。神经网络在情感分析中发挥着重要作用。基于词向量的方法,如 Word2Vec 和 GloVe,将文本中的单词映射到向量空间,然后利用神经网络进行分类。卷积神经网络(CNN)可以通过卷积层提取文本中的局部情感特征,循环神经网络(RNN)及其变体则能够捕捉文本中的时序依赖关系,用于识别连续文本中的情感变化。例如,在社交媒体监控中,通过对用户发布的评论和帖子进行情感分析,企业可以了解公众对品牌、产品或事件的看法,及时调整策略。

问答系统中,神经网络能够理解用户的问题,并从大量的文本数据中找到准确的答案。例如,基于 Transformer 架构的 BERT 模型,在预训练过程中学习了大量的语言知识,能够理解文本的语义和上下文关系。当用户提出问题时,BERT 模型可以对问题进行分析,然后在相关的文本库中进行搜索和匹配,找到最符合问题的答案 。像智能客服系统,就利用了神经网络的问答能力,能够快速准确地回答用户的问题,提高客户服务效率。

五、Python 实现简单神经网络

(一)导入必要的库

在使用 Python 实现神经网络时,我们通常会用到一些强大的深度学习库,如 TensorFlow 和 Keras。TensorFlow 是一个由 Google 开发和维护的开源深度学习框架,具有高度的灵活性和可扩展性,能够在 CPU、GPU 甚至移动设备上高效运行,支持多种深度学习任务,如神经网络的构建、训练和部署 。Keras 则是一个基于 Python 的高级神经网络 API,它以简洁易用著称,提供了一致且简洁的接口,使得快速搭建和训练神经网络模型变得轻而易举,并且 Keras 可以使用 TensorFlow、CNTK 或 Theano 作为后端,这里我们使用 TensorFlow 作为 Keras 的后端。

import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

在上述代码中,我们首先导入了 TensorFlow 库,并别名为 tf。然后从 tensorflow.keras 中导入了 datasets(用于加载数据集)、layers(用于构建神经网络层)、models(用于构建和训练模型)。最后,导入 matplotlib.pyplot 库,用于数据可视化。

(二)准备数据集

我们以 MNIST 手写数字识别数据集为例来讲解神经网络的实现。MNIST 数据集是一个经典的手写数字图像数据集,包含 60,000 张训练图像和 10,000 张测试图像,每张图像都是 28x28 像素的灰度图像,图像中的数字范围是 0 到 9。

# 加载MNIST数据集
(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()# 数据预处理
train_images = train_images.reshape((-1, 28, 28, 1)).astype('float32') / 255.0
test_images = test_images.reshape((-1, 28, 28, 1)).astype('float32') / 255.0# 将标签进行独热编码
train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)

在这段代码中,我们首先使用 datasets.mnist.load_data() 函数加载 MNIST 数据集,返回的训练数据和测试数据分别存储在 (train_images, train_labels)(test_images, test_labels) 中。然后,对数据进行预处理,将图像数据重塑为适合神经网络输入的形状,即 (样本数量, 高度, 宽度, 通道数),这里通道数为 1 表示灰度图像,并将像素值归一化到 0 到 1 之间,以加快模型的训练速度。最后,使用 to_categorical 函数将标签进行独热编码,将每个数字标签转换为一个长度为 10 的向量,其中只有对应数字的索引位置为 1,其他位置为 0,这样可以方便模型进行分类预测。

(三)构建神经网络模型

使用 Keras 的 Sequential 模型来构建一个简单的神经网络,它是一个线性的层叠模型,我们可以通过 add 方法依次添加各个层。

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))

在这个模型中,我们首先添加了两个卷积层 Conv2D,用于提取图像的特征。第一个卷积层有 32 个滤波器,滤波器大小为 3x3,激活函数使用 ReLU;第二个卷积层有 64 个滤波器,同样使用 ReLU 激活函数。每个卷积层之后都添加了一个最大池化层 MaxPooling2D,用于降低特征图的尺寸,减少计算量。接着,使用 Flatten 层将多维的特征图展平为一维向量,以便输入到全连接层。然后,添加了两个全连接层 Dense,第一个全连接层有 64 个神经元,激活函数为 ReLU;最后一个全连接层有 10 个神经元,对应 10 个数字类别,激活函数使用 softmax,将输出转换为概率分布,每个概率值表示对应数字类别的预测可能性。

(四)编译和训练模型

在构建好模型后,需要对模型进行编译,指定优化器、损失函数和评估指标,然后使用训练数据对模型进行训练。

# 编译模型
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])# 训练模型
history = model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_data=(test_images, test_labels))

在编译模型时,我们使用 adam 优化器,它是一种自适应学习率的优化算法,能够在训练过程中自动调整学习率,提高训练效率。损失函数选择 categorical_crossentropy,即分类交叉熵损失,适用于多分类问题,用于衡量模型预测值与真实标签之间的差异。评估指标选择 accuracy,即准确率,用于评估模型在训练和验证过程中的分类准确性。

在训练模型时,使用 fit 方法,传入训练数据 train_imagestrain_labels,设置训练轮数 epochs 为 5,每批训练数据的大小 batch_size 为 64,并指定验证数据 validation_data,以便在训练过程中监控模型在验证集上的性能。训练过程中,模型会不断更新权重和偏置,以最小化损失函数,并输出每一轮训练的损失值和准确率等信息。

(五)模型评估与预测

训练完成后,我们需要评估模型的性能,并使用模型进行预测。

# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)# 进行预测
predictions = model.predict(test_images)

使用 evaluate 方法评估模型在测试集上的性能,返回测试损失 test_loss 和测试准确率 test_acc,并打印测试准确率。然后,使用 predict 方法对测试集进行预测,得到每个测试样本属于各个类别的概率值,存储在 predictions 中。

为了更直观地展示预测结果,我们可以对预测结果进行可视化展示。

# 可视化预测结果
plt.figure(figsize=(10, 10))
for i in range(25):plt.subplot(5, 5, i + 1)plt.xticks([])plt.yticks([])plt.grid(False)plt.imshow(test_images[i].reshape(28, 28), cmap=plt.cm.binary)predicted_label = np.argmax(predictions[i])true_label = np.argmax(test_labels[i])if predicted_label == true_label:color = 'blue'else:color ='red'plt.xlabel("Pred:{} True:{}".format(predicted_label, true_label), color=color)
plt.show()

在这段代码中,我们使用 matplotlib 库进行可视化。首先创建一个 10x10 大小的图形窗口,然后遍历前 25 个测试样本,对于每个样本,使用 imshow 函数显示图像,通过 np.argmax 函数获取预测标签和真实标签。如果预测正确,标签文本颜色设为蓝色;如果预测错误,颜色设为红色,最后将预测标签和真实标签显示在图像下方,展示模型的预测结果(如下图所示:只有第4行第4列的3识别错误)。
在这里插入图片描述

六、总结与展望

神经网络作为机器学习的核心算法之一,以其独特的结构和强大的学习能力,在众多领域取得了令人瞩目的成果。从神经元的基本原理,到前向传播和反向传播的运作机制,再到广泛的应用场景,我们深入了解了神经网络的方方面面。通过 Python 实现简单神经网络的过程,我们也亲身体验了神经网络的构建和训练流程,感受到了它在解决实际问题中的强大威力。

展望未来,随着技术的不断进步,神经网络在 AI 领域的发展前景将更加广阔。在硬件方面,量子计算、边缘计算等新技术的出现,将为神经网络的计算效率和性能带来质的飞跃 。在算法方面,新的神经网络架构和算法将不断涌现,进一步提升模型的表达能力和泛化能力。同时,神经网络与其他领域的交叉融合也将成为趋势,如神经科学、心理学、生物学等,这将有助于我们从不同的角度深入理解神经网络的工作原理,为其发展提供更多的灵感和思路。

对于想要深入学习神经网络的读者来说,这仅仅是一个开始。希望大家能够在本文的基础上,继续探索神经网络的奥秘,不断尝试新的算法和应用,为推动人工智能的发展贡献自己的力量。相信在不久的将来,神经网络将在更多领域发挥重要作用,为我们创造更加美好的生活。


延伸阅读

  • 机器学习核心算法系列文章

    解锁机器学习核心算法|主成分分析(PCA):降维的魔法棒
    解锁机器学习核心算法|朴素贝叶斯:分类的智慧法则
    解锁机器学习核心算法 | 支持向量机算法:机器学习中的分类利刃
    解锁机器学习核心算法 | 随机森林算法:机器学习的超强武器
    解锁机器学习核心算法 | K -近邻算法:机器学习的神奇钥匙
    解锁机器学习核心算法 | K-平均:揭开K-平均算法的神秘面纱
    解锁机器学习核心算法 | 决策树:机器学习中高效分类的利器
    解锁机器学习核心算法 | 逻辑回归:不是回归的“回归”
    解锁机器学习核心算法 | 线性回归:机器学习的基石

  • 深度学习框架探系列文章

    深度学习框架探秘|TensorFlow:AI 世界的万能钥匙
    深度学习框架探秘|PyTorch:AI 开发的灵动画笔
    深度学习框架探秘|TensorFlow vs PyTorch:AI 框架的巅峰对决
    深度学习框架探秘|Keras:深度学习的魔法钥匙

相关文章:

解锁机器学习核心算法|神经网络:AI 领域的 “超级引擎”

一、神经网络:AI 领域的 “超级引擎” 在机器学习的庞大算法体系中,有十种算法被广泛认为是最具代表性和实用性的,它们犹如机器学习领域的 “十大神器”,各自发挥着独特的作用。这十大算法包括线性回归、逻辑回归、决策树、随机森…...

一周学会Flask3 Python Web开发-redirect重定向

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 前面我们学过渲染到模板页面,这个其实是一种内部的转发,浏览器地址栏地址没有变化。如果我们想重定向…...

FFmpeg 源码编译安装

参考: https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu Linux (Ubuntu) 下载 FFmpeg 源码,并将其解压,这里我将它放在 ~/ffmpeg_source 目录下; cd ~/ffmpeg_sources wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org…...

3.Docker常用命令

1.Docker启动类命令 1.启动Docker systemctl start docker 2.停止Docker systemctl stop docker 3.重启Docker systemctl restart docker 4.查看Docker状态 systemctl status docker 5.设置开机自启(执行此命令后每次Linux重启后将自启动Docker) systemctl enable do…...

vue3面试题进阶版

覆盖 Vue3 的核心知识点、高频考点及实战场景 一、基础与核心概念 MVVM 与 MVC 的区别 MVC:Model(数据)、View(视图)、Controller(控制器),视图更新需手动操作 DOM。MVVM&#xff1…...

深入理解指针

例题1 int main() {int a[5][5];int(*p)[4];p a;printf("%p, %d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);return 0; }由图知第二个打印的是-4 因为%p是直接将内存中的值当作地址打印 而-4在内存中存放的是其二进制的补码,打印以16进制形式…...

微信小程序实现拉卡拉支付

功能需求:拉卡拉支付(通过跳转拉卡拉平台进行支付),他人支付(通过链接进行平台跳转支付) 1.支付操作 //支付 const onCanStartPay async (obj) > {uni.showLoading({mask: true})// 支付接口获取需要传…...

conda简单命令

查看当前环境已经安装的库 conda list 查看conda已经创建的环境 conda env list切换conda环境 conda activate 环境名称删除环境 conda remove --name 环境名称 --all安装库 conda install 库名卸载库 conda remove 库名导出(导入)环境 保存某个…...

Linux应用之构建命令行解释器(bash进程)

目录 1.分析 2.打印输入提示符 3.读取并且处理输入字符串 4.创建子进程并切换 5.bash内部指令 6.完整代码 1.分析 当我们登录服务器的时候,命令行解释器就会自动加载出来。接下来我们就。在命令行中输入指令来达到我们想要的目的。 我们在命令行上输入的…...

什么是3D可视化?有哪些优势和应用领域?

3D可视化服务是一种基于大数据、物联网、云计算等技术构建的三维可视化系统服务,它提供直观的三维软件应用服务,帮助用户更好地理解和分析数据。以下是对3D可视化服务的详细介绍: 一、3D可视化服务的原理 3D可视化服务的原理主要包括数据采…...

在PyCharm中运行Jupyter Notebook的.ipynb文件及其pycharm软件的基础使用

(注意需使用PyCharm专业版,学生、教师可以申请免费使用:https://www.jetbrains.com/shop/eform/students) 1. pycharm2024版汉化 https://blog.csdn.net/m0_74103046/article/details/144560999 2. pycharm中的python控制台和J…...

解锁C#自定义属性:从0到1的深度实践指南

一、开篇:自定义属性的奇妙世界 在 C# 的编程宇宙中,自定义属性是一个强大且迷人的存在,它就像是代码世界里的魔法标记,为我们的程序赋予了丰富的元数据,让代码变得更加智能和富有表现力。 想象一下,你正…...

Ubuntu 安装 OpenCV (C++)

版本详情: Ubuntu: 22.04 5.15.0-133-generic gcc: 11.4.0 g: 11.4.0 OpenCV: 4.7.0 1. 卸载 OpenCV 进入原先编译 opencv 的 build 目录,在该目录下打开终端,执行以下代码(如果 build 已经删除了,可以重新编译一…...

deepseek清华大学第二版 如何获取 DeepSeek如何赋能职场应用 PDF文档 电子档(附下载)

deepseek清华大学第二版 DeepSeek如何赋能职场 pdf文件完整版下载 https://pan.baidu.com/s/1aQcNS8UleMldcoH0Jc6C6A?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/3ee62050a2ac...

kill -9 结束某个用户所有进程的方式-linux019

1. 使用 pkill 命令 pkill 命令可以通过用户名直接终止该用户的所有进程。加上 -9 参数,表示强制结束进程。 pkill -9 -u XXXX 说明:这个命令会使用 SIGKILL 信号(即 kill -9)强制终止 ttlsa 用户的所有进程。 2. 使用 killal…...

十大排序算法

排序算法 插入排序冒泡排序选择排序希尔排序计数排序快速排序1经典 Lomuto 分区法2经典 Lomuto 分区法3随机快排 堆排序归并排序桶排序基数排序 插入排序 从i1开始,判断nums[i-1]和nums[i]的大小,一直到nums[i]插入到自己的位置。模拟抓扑克牌的过程&am…...

第8章作业

接口ip配置 r2 [r2]interface GigabitEthernet 0/0/0 [r2-GigabitEthernet0/0/0]ip address 13.0.0.3 24 [r2-GigabitEthernet0/0/0]interface GigabitEthernet 0/0/1 [r2-GigabitEthernet0/0/1]ip address 100.1.1.254 24 [r2-GigabitEthernet0/0/1]interface GigabitEthernet…...

解决 LeetCode 串联所有单词的子串问题

问题描述 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words ["ab","cd","ef"], 那么 &q…...

“深入浅出”系列之QT:(10)Qt接入Deepseek

项目配置: 在.pro文件中添加网络模块: QT core network API配置: 将apiUrl替换为实际的DeepSeek API端点 将apiKey替换为你的有效API密钥 根据API文档调整请求参数(模型名称、温度值等) 功能说明: 使…...

layui.table.exportFile 导出数据并清除单元格中的空格

Layui在执行数据导出的时候,会出现部分数据单元格中有空格的情况,下面的方法可以去除掉单元格中的空格,供大家参考!! function table_export(id,title) {//根据传入tableID获取表头var headers $("div[lay-id" id "] .layu…...

AIRIOT智慧消防管理解决方案

随着科技的飞速发展和城市化进程的不断推进,消防安全问题逐渐凸显。传统消防手段在应对现代复杂多变的火灾事故时显得力不从心,面临着诸多挑战和弊端: 监控不足:传统消防依赖人力和烟感器等设备,导致监控范围有限、反应…...

使用VSCODE开发C语言程序

使用vscode配置C语言开发环境 一、安装VSCODE 1、下载vscode ​ 从官方网站(https://code.visualstudio.com/Download)上,下载windows版本的vscode 2、安装vscode ​ 下载完毕后,按照提示进行安装即可(尽可能不要安…...

Jenkins 创建 Node 到 Windows

Jenkins 创建 Node 到 Windows 一. 新建 Node Dashboard -> Manage Jenkins -> Manage Nodes and Clouds Dashboard -> Nodes -> New Node 二. 配置节点 Node:节点名 Description:节点描述 Number of executors:节点最大同…...

鸿蒙状态管理概述

状态管理 状态管理之v1LocalStorageLocalStorageLink的框架行为LocalStorageProp的框架行为LocalStorage使用场景 AppStorageStorageLink的框架行为StorageProp的框架行为AppStorage的使用场景 PersistentStorageEnvironmentEnvironment内置参数 WatchWatch的使用场景 $$语法$$…...

英文字体:极简现代浓缩未来派科技海报标题排版无衬线字体 PODIUM Sharp Font

PODIUM Sharp 是 2012 年设计的 DUDU 字体的扩展版本。多年后,我决定通过添加新的母版和粗细来重建和开发这种字体。最后,PODIUM Sharp 由 234 种款式组成:从超压缩发际线到超扩展重度。 这个项目的主要目的是在我在旧波兰标本中发现的不同模…...

Linux系统配置阿里云yum源,安装docker

配置阿里云yum源 需要保证能够访问阿里云网站 可以先ping一下看看(阿里云可能禁ping,只要能够解析为正常的ip地址即可) ping mirrors.aliyun.com脚本 #!/bin/bash mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos…...

基础排序算法

冒泡排序 冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。 以下代码是改进的冒泡算法,在排序好了之后可以直接跳出循环…...

蓝桥杯备赛1-2合法日期

题目描述 小蓝正在上小学,老师要求同学们在暑假每天记日记。可是小蓝整个暑假都在玩,直到最后一天才想起要记日记。于是小蓝赶紧编了一些日记交给老师。 没想到,日记很快就被老师发现了问题,原来小蓝记完 8 月 31 日的日记&…...

巧用GitHub的CICD功能免费打包部署前端项目

近年来,随着前端技术的发展,前端项目的构建和打包过程变得越来越复杂,占用的资源也越来越多。我有一台云服务器,原本打算使用Docker进行部署,以简化操作流程。然而,只要执行sudo docker-compose -f deploy/…...

后端开发-分页游标设计(解决大数据量分页查询时的性能问题)

文章目录 适用场景/背景描述本质原理简单举例子分页游标,若用非唯一索引的字段排序分页游标,若 order by 的不是索引还能使用分页游标吗 适用场景/背景描述 如果需要做分页查询且被查询的数据量很大,直接 limit offset 有可能会导致全表扫描…...

SpringBoot 框架关于如何创建并使用 Redis 的详细介绍

本文是博主整理项目时整理出来的,项目使用 SpringBoot 框架,使用 Redis 作为缓存组件,用于缓存部分热点接口数据。 文章目录 一、Redis 的前置配置1、引入依赖2、单机配置3、集群配置4、两种配置路径解读 二、创建 Redis 配置类1、简易版 Red…...

跨语言语义理解与生成:多语言预训练方法及一致性优化策略

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...

旧手机热点无法提供ipv6解决方法(emui 8 热点提供ipv6)

旧手机热点无法提供ipv6解决方法 手机:荣耀8x 系统版本: EMUI 8 网络:移动流量卡 解决方案 设置-》无线和网络-》移动网络-》接入点名称(APN)-》cmiot 修改 APN协议: IPv4/IPv6 修改 APN漫游协议: IPv4/IPv6...

第2章 信息技术发展(一)

2.1 信息技术及其发展 2.1.1 计算机软硬件 计算机硬件(Computer Hardware)是指计算机系统中由电子、机械和光电元件等组成的各种物理装置的总称。 计算机软件 (Computer Software)是指计算机系统中的程序及其文档,程序是计算任务的处理对象和处理规则的描述; 文档…...

循环神经网络RNN原理与优化

目录 前言 RNN背景 RNN原理 上半部分:RNN结构及按时间线展开图 下半部分:RNN在不同时刻的网络连接和计算过程 LSTM RNN存在的问题 LSTM的结构与原理 数学表达层面 与RNN对比优势 应用场景拓展 从简易但严谨的代码来看RNN和LSTM RNN LSTM 前言 绕循环神经…...

Redis常见数据结构及其在项目中用法

Redis 可以使用 String 数据类型和 INCR 命令来统计访问量。 以下是在 Redis 控制台中统计访问量的示例: 设置计数器: SET page_views 0这将创建一个名为 page_views 的键,并将其初始值设置为 0。如果该键已经存在,则会覆盖其值。…...

DeepSeek 基础使用文档介绍

目录 1. 简介 2. 安装与验证 安装 验证安装 3. 基础用法 3.1 数据搜索 3.2 数据预处理 3.3 机器学习优化 4. 进阶用法 4.1 并行计算 4.2 高级搜索功能 4.3 自定义数据处理管道 4.4 提问功能 5. 文档和代码分析 5.1 文档解析 5.2 代码分析 6. 实际案例 案例描…...

微信小程序(uni)+蓝牙连接+Xprint打印机实现打印功能

1.蓝牙列表实现&#xff0c;蓝牙设备展示&#xff0c;蓝牙连接 <template><view class"container"><view class"container_top"><view class"l">设备名称</view><view class"r">{{state.phoneNam…...

数仓搭建(hive):DWB层(基础数据层)

维度退化: 通过减少表的数量和提高数据的冗余来优化查询性能。 在维度退化中&#xff0c;相关的维度数据被合并到一个宽表中&#xff0c;减少了查询时需要进行的表连接操作。例如&#xff0c;在销售数据仓库中&#xff0c;客户信息、产品信息和时间信息等维度可能会被合并到一…...

Mybatis的#{}和${}

#{}:预编译语句,用?对参数位置进行一个占位的操作,在数据库生成一个模版,等待后续填充.也可以推测出#在生成模版后的性能是比$快的. ${}:即时语句,提前的吧参数填充进去,在MySQL里就是一个完整的SQL语句. 填充逻辑不同 #{}会给String类型的参数自动的加上双引号,而${}则是直…...

@Transactional 嵌套,内层抛异常,外层用 try-catch 捕获但实际事务却回滚了

1. 内层事务传播行为为 Propagation.REQUIRED 且设置了回滚标记 虽然外层捕获了异常&#xff0c;但内层事务在抛出异常时可能已经标记了整个事务需要回滚。在 Spring 中&#xff0c;当内层事务传播行为为 Propagation.REQUIRED 时&#xff0c;它和外层事务属于同一个逻辑事务。…...

在实时大数据处理中如何平衡延迟和吞吐量

在实时大数据处理中&#xff0c;平衡延迟和吞吐量是一个至关重要的挑战。以下是一些实用的策略和技巧&#xff0c;有助于在这两者之间找到最佳平衡点&#xff1a; 一、技术层面的平衡策略 并行处理&#xff1a; 通过同时处理多个任务来提高吞吐量。在实时大数据处理环境中&am…...

vue学习六

十三 路由 安装 Vue Router | Vue.js 的官方路由 vue3安装vue-router 4版本;vue2安装vue-router 3版本。 测试使用vue3&#xff0c;命令不带版本号默认安装4。 npm install vue-router4 使用 定义 定义文件&#xff1a;src\router\index.ts import {createRouter,crea…...

【Content-Type详解、Postman中binary格式、json格式数据转原始二进制流等】

Content-Type详解、Postman中binary格式、json格式数据转原始二进制流等 背景&#xff1a;postman中如何使用binary格式上传文件 Content-TypeContent-Type的格式由三部分组成&#xff1a;以下是一些常见的Content-Type示例&#xff1a; Postman中 binary格式定义&#xff1a;用…...

K8S下redis哨兵集群使用secret隐藏configmap内明文密码方案详解

#作者&#xff1a;朱雷 文章目录 一、背景环境及方案说明1.1、环境说明1.2、方案一&#xff1a;使用配置文件设置密码1.3、方案二&#xff1a;使用args 的命令行传参设置密码 二、redis secret configmap deployment参考2.1 创建secret-redis.yaml参考2.2 修改configmap配置参…...

插槽slot

在 Vue 中&#xff0c;插槽&#xff08;slot&#xff09;主要用于实现父组件向子组件传递内容&#xff0c;是一种典型的父传子的方式 元素是一个插槽出口 (slot outlet)&#xff0c;标示了父元素提供的插槽内容 (slot content) 将在哪里被渲染。 默认插槽 在外部没有提供任何…...

BFS 解决 FloodFill 算法(典型算法思想)—— OJ例题算法解析思路

目录 一、733. 图像渲染 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 算法思路 基础参数 函数入口 检查条件 初始化 BFS BFS 填充过程 返回结果 复杂度分析 总结 二、200. 岛屿数量 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a;…...

8 SpringBootWeb案例(上): 查询【分页功能(分页插件)】、删除、新增、修改

文章目录 前言:SpringBootWeb案例1. 准备工作1.1 需求&环境搭建1.1.1 需求说明1.1.2 环境搭建1.2 开发规范1.2.1 开发规范-REST(不强求非要这种风格,传统风格有时候更方便)1.2.2 开发规范-统一响应结果和异常处理1.2.3 开发流程2. 部门管理2.1 查询部门2.1.1 原型和需求…...

Docker 部署 Dify:轻松集成 Ollama 和 DeepSeek

1 Ollama的安装及使用 1.1 什么是Ollama&#xff1f; Ollama 是一个用于本地部署和运行大型语言模型的框架。 Ollama 的作用包括&#xff1a; 本地模型运行&#xff1a;Ollama 允许在本地机器上运行大型语言模型&#xff08;如 LLaMA、DeepSeek 等&#xff09;&#xff0c;无…...

深入解析MySQL索引:本质、分类、选择及使用原则

一、索引的本质 索引&#xff0c;作为数据库中的一种核心数据结构&#xff0c;其本质在于通过改变数据结构来加快查询效率。可以将索引理解为数据库中的一种“目录”或“路标”&#xff0c;它帮助数据库系统快速定位到需要查询的数据行&#xff0c;从而大大提高数据检索的速度…...