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

深度学习框架探秘|Keras:深度学习的魔法钥匙

一、引言:深度学习浪潮中的 Keras

前面的文章我们探秘了深度学习框架中的两大明星框架 —— TensorFlow 和 PyTorch 以及 两大框架的对比
在深度学习的众多框架中,还有一款框架备受开发者们的喜爱 —— Keras 。它就像是一位贴心的助手,为我们搭建起了通往深度学习世界的便捷桥梁。无论你是初涉人工智能领域的小白,还是经验丰富的技术大咖,Keras 都能凭借其独特的魅力,满足你的各种需求,助力你在深度学习的海洋中畅快遨游。
在这里插入图片描述

二、Keras 是什么?

Keras一个基于 Python 编写的开源神经网络库,它就像是一个便捷的工具箱,为我们打造深度学习模型提供了各种趁手的 “工具”。它的出现,让深度学习模型的搭建变得更加轻松和高效。它能够以 TensorFlow , Microsoft-CNTK 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

Keras 具有诸多显著优势:一是用户友好,API 设计简洁直观,新手也能快速上手,将模型构想转化为代码,如构建简单图像分类模型,用 Keras 十几行代码即可搭建基本框架,比其他复杂框架更高效。二是高度模块化,把神经网络各组件设计为独立模块,像搭积木般可按需组合搭建不同结构模型,如构建自然语言处理模型时可选择合适模块组合。三是易扩展性出色,有新需求添加模块时,仿照现有模块编写新类或函数就能轻松实现,在先进研究工作中也能发挥重要作用。下面我们来看看它的这些优势

三、Keras 的优势

(一)简洁易用的 API

Keras 的 API 设计堪称一绝,它就像是为开发者量身定制的贴心工具。以构建一个简单的手写数字识别模型为例,使用 Keras 只需短短数十行代码,就能轻松搭建起模型框架。如下是使用 Keras 搭建简单手写数字识别模型的代码示例:

from keras.models import Sequential
from keras.layers import Dense
from keras.datasets import mnist
from keras.utils import np_utils# 加载数据
(X_train, y_train), (X_test, y_test) = mnist.load_data()# 数据预处理
X_train = X_train.reshape(X_train.shape[0], -1) / 255.0
X_test = X_test.reshape(X_test.shape[0], -1) / 255.0
y_train = np_utils.to_categorical(y_train, 10)
y_test = np_utils.to_categorical(y_test, 10)# 构建模型
model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(784,)))
model.add(Dense(10, activation='softmax'))# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])# 训练模型
model.fit(X_train, y_train, batch_size=128, epochs=10, validation_data=(X_test, y_test))# 评估模型
score = model.evaluate(X_test, y_test)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

在这个示例中,从数据的加载与预处理,到模型的构建、编译、训练以及最后的评估,整个过程代码简洁明了,逻辑清晰易懂 。相比之下,使用其他一些深度学习框架,如 TensorFlow 原生 API,可能需要编写大量复杂的代码来处理变量初始化、计算图构建等底层细节。

就好比同样是建造一座房子Keras 提供的是已经预制好的各种模块,你只需按照图纸进行拼接即可;而其他框架可能给你的是一堆原始材料,你需要从打地基开始,一步步地搭建,过程繁琐且容易出错。Keras 的这种简洁易用性,大大降低了深度学习的开发门槛,让更多人能够快速上手,将更多的时间和精力投入到模型的优化和业务逻辑的实现上。

(二)强大的兼容性

Keras 的兼容性令人赞叹,它支持多种后端,如 TensorFlow、CNTK、Theano 等 。这意味着开发者可以根据自己的需求和实际情况,灵活选择最适合的后端。例如,如果你的团队在 TensorFlow 生态积累了经验和资源,可选用 TensorFlow 作 Keras 后端,以利用其强大的分布式训练能力和广泛工具支持;若对微软认知工具包 CNTK 感兴趣或项目已用其功能,Keras 能无缝对接;若偏好 Theano 特性,Keras 也能满足需求。

Keras 多后端支持特性如万能钥匙,能融入各种开发环境,提供稳定高效服务,提高代码可移植性,让开发者依项目特点选合适后端,优化模型性能与开发效率。

(三)广泛的应用领域

Keras 凭借其强大的功能和出色的易用性,在众多领域都有着广泛的应用。

图像识别领域,Keras 可以助力我们实现各种复杂的任务。比如在医疗影像分析中,通过构建基于 Keras 的深度学习模型,能够帮助医生更准确地识别 X 光、CT 等影像中的病变,辅助疾病的诊断。以皮肤癌的诊断为例,研究人员利用 Keras 搭建卷积神经网络模型,对大量的皮肤病变图像进行训练,模型能够学习到不同病变的特征,从而准确地判断出病变是否为癌症,为早期诊断和治疗提供了有力的支持。在安防监控领域,Keras 也发挥着重要作用。通过训练图像识别模型,可以实现对监控视频中的人物、车辆等目标的实时检测和识别,提高安防系统的智能化水平,保障人们的生命财产安全。

自然语言处理领域,Keras 同样表现出色。在智能客服系统中,利用 Keras 构建的语言模型可以理解用户的提问,并给出准确的回答。例如,当用户咨询问题时,模型能够快速分析问题的语义,从知识库中检索相关信息,然后生成自然流畅的回复,大大提高了客服的工作效率和服务质量。在文本分类任务中,Keras 也能大显身手。比如对新闻文章进行分类,将其分为政治、经济、体育、娱乐等不同类别,方便用户快速获取感兴趣的信息。还可以用于情感分析,判断用户在社交媒体上发表的言论是积极、消极还是中性,帮助企业了解用户的情感倾向,优化产品和服务。

此外,在生物信息学领域,Keras 也开始崭露头角。研究人员可以利用 Keras 构建深度学习模型,对基因序列数据进行分析,预测基因的功能、疾病的发生风险等。比如通过分析大量的基因数据,预测某些基因突变与特定疾病之间的关联,为疾病的预防和治疗提供新的思路和方法。

四、Keras 的使用方法

(一)安装与配置

想要使用 Keras,首先得把它安装到你的电脑上。安装 Keras 其实并不复杂,不过在这之前,你需要确保你的系统里已经安装好了 Python,而且建议使用 Python 3.6 及以上的版本 ,就像搭建房子要先打好地基一样,Python 就是使用 Keras 的基础。

1、安装 Keras
安装 Keras 的依赖项是安装过程中的重要一步。如果你选择 TensorFlow 作为 Keras 的后端(这也是比较常见的选择),你可以在命令行中输入以下命令来安装:

pip install tensorflow

这条命令会自动帮你下载并安装 TensorFlow。安装完成后,就可以安装 Keras 了,同样在命令行中输入:

pip install keras

这样,Keras 就成功安装到你的系统中了。

2、配置 Keras
安装好之后,还需要对 Keras 进行配置。Keras 的配置主要是针对后端的选择和一些默认参数的设置。如果你想修改后端,比如从默认的 TensorFlow 后端切换到 Theano 后端,有两种方法可以实现。一种是修改 Keras 的配置文件keras.json ,这个文件通常位于$HOME/.keras/目录下($HOME表示你的用户主目录,在不同的操作系统中可能有所不同)。你可以使用文本编辑器打开这个文件,然后找到"backend"字段,将其值从"tensorflow"改为"theano" 。另一种方法是在 Python 代码中通过设置环境变量来修改后端,在导入 Keras 之前,添加以下代码:

import osos.environ['KERAS_BACKEND'] = 'theano'

这样就可以在代码运行时临时将 Keras 的后端设置为 Theano。通过这些安装和配置步骤,你就为使用 Keras 做好了充分的准备,可以开启深度学习模型的搭建之旅啦。

(二)构建模型

在 Keras 中,构建模型主要有两种方式,分别是序贯模型和函数式模型,它们各有特点,适用于不同的场景。

1、序贯模型

序贯模型是一种最简单的模型构建方式,它就像是搭积木一样,按照顺序一层一层地堆叠网络层。每一层都只有一个输入和一个输出,前一层的输出会直接作为下一层的输入。我们以手写数字识别这个经典任务为例,来看看如何使用 Sequential 模型构建简单的神经网络。

手写数字识别,就是让计算机能够识别出图片中的手写数字是 0 - 9 中的哪一个。在这个任务中,我们使用的是 MNIST 数据集,它包含了大量的手写数字图片和对应的标签。下面是使用 Keras 的 Sequential 模型构建手写数字识别神经网络的代码示例:

from keras.models import Sequentialfrom keras.layers import Densefrom keras.datasets import mnistfrom keras.utils import np_utils# 加载数据(X_train, y_train), (X_test, y_test) = mnist.load_data()# 数据预处理X_train = X_train.reshape(X_train.shape[0], -1) / 255.0X_test = X_test.reshape(X_test.shape[0], -1) / 255.0y_train = np_utils.to_categorical(y_train, 10)y_test = np_utils.to_categorical(y_test, 10)# 构建模型model = Sequential()model.add(Dense(128, activation='relu', input_shape=(784,)))model.add(Dense(10, activation='softmax'))

在这段代码中,首先导入了需要的库和模块。然后使用mnist.load_data()函数加载 MNIST 数据集,这个数据集会自动分为训练集(X_train, y_train)和测试集(X_test, y_test) 。接下来进行数据预处理,将图片数据进行归一化处理,使其取值范围在 0 - 1 之间,同时将标签数据转换为独热编码的形式,这样更适合模型的训练。

在构建模型部分,创建了一个 Sequential 模型对象model 。然后使用model.add()方法依次添加网络层。第一层是一个全连接层Dense(128, activation='relu', input_shape=(784,)) ,其中128表示这一层有 128 个神经元,activation='relu'表示使用 ReLU 激活函数,input_shape=(784,)表示输入数据的形状是 784 维,这是因为 MNIST 数据集中的每张图片是 28x28 像素的,展开成一维向量后就是 784 维。第二层也是一个全连接层Dense(10, activation='softmax') ,这里的10表示输出层有 10 个神经元,对应 0 - 9 这 10 个数字,activation='softmax'表示使用 softmax 激活函数,它会将输出转换为概率分布,每个神经元的输出值表示对应数字的概率。通过这样的网络结构,模型就可以学习到手写数字的特征,并进行分类预测。

2、函数式模型

函数式模型相比序贯模型更加灵活,它可以构建更复杂的模型结构,比如多输入多输出的模型。当你需要处理一些复杂的任务,序贯模型无法满足需求时,函数式模型就能派上用场。它就像是一个更高级的工具,让你可以根据具体需求自由地设计模型的连接方式。

下面通过一个多输入多输出的模型示例,来展示函数式模型的使用方法和灵活性。假设我们要构建一个模型,它有两个输入,一个输入是文本数据,另一个输入是图像数据,模型的输出有两个,一个是对文本内容的分类结果,另一个是对图像内容的分类结果。代码示例如下:

from keras.layers import Input, Dense, concatenatefrom keras.models import Model# 定义输入层text_input = Input(shape=(100,))image_input = Input(shape=(28, 28, 1))# 对文本输入进行处理text_features = Dense(64, activation='relu')(text_input)# 对图像输入进行处理image_features = Dense(64, activation='relu')(image_input)# 将文本和图像特征进行合并merged = concatenate([text_features, image_features])# 定义输出层text_output = Dense(10, activation='softmax')(merged)image_output = Dense(5, activation='softmax')(merged)# 构建模型model = Model(inputs=[text_input, image_input], outputs=[text_output, image_output])

在这段代码中,首先使用Input()函数定义了两个输入层,分别是text_inputimage_input ,它们的形状分别是(100,)(28, 28, 1) ,表示文本输入是 100 维的向量,图像输入是 28x28 像素的单通道图像。然后分别对文本输入和图像输入进行处理,通过全连接层提取特征。接着使用concatenate()函数将文本特征和图像特征合并在一起。最后,根据合并后的特征定义了两个输出层,分别是text_outputimage_output ,用于对文本和图像进行分类。通过Model()函数将输入和输出连接起来,构建出了完整的多输入多输出模型。这种灵活的构建方式,使得函数式模型在处理复杂任务时具有很大的优势。

(三)编译与训练

当我们使用 Keras 搭建好模型后,就需要对模型进行编译和训练,这是让模型学习数据特征、具备预测能力的关键步骤。

在模型编译阶段,我们需要设置一些重要的参数,这些参数就像是模型训练的 “指南针”,指引着模型朝着正确的方向学习。首先是优化器,它的作用是调整模型的权重,使得模型在训练过程中能够不断地降低损失函数的值。Keras 提供了多种优化器供我们选择,比如常见的随机梯度下降(SGD)、Adagrad、Adadelta、Adam 等。以 Adam 优化器为例,它结合了 Adagrad 和 Adadelta 的优点,能够自适应地调整学习率,在很多任务中都表现出色。在编译模型时,我们可以这样设置优化器:

from keras.optimizers import Adammodel.compile(optimizer=Adam(lr=0.001),...)

这里lr参数表示学习率,设置为0.001,它决定了模型在训练过程中权重更新的步长,学习率过大可能导致模型无法收敛,学习率过小则会使训练过程变得非常缓慢。

损失函数也是编译模型时必不可少的参数,它用于衡量模型预测值与真实值之间的差异。不同的任务需要选择不同的损失函数。在分类任务中,如果是二分类问题,常用的损失函数是二元交叉熵(binary_crossentropy);如果是多分类问题,比如前面提到的手写数字识别,通常使用分类交叉熵(categorical_crossentropy) 。以手写数字识别模型为例,编译时设置损失函数如下:

model.compile(..., loss='categorical_crossentropy',...)

评估指标用于评估模型在训练和测试过程中的性能表现。在分类任务中,我们通常会关注准确率(accuracy),它表示模型预测正确的样本数占总样本数的比例。在编译模型时,可以将准确率作为评估指标之一:

model.compile(..., metrics=['accuracy'])

完成模型编译后,就可以开始训练模型了。训练模型的过程就像是让模型在数据的海洋中不断学习和成长。在 Keras 中,使用fit()方法进行模型训练,下面是训练手写数字识别模型的代码示例:

model.fit(X_train, y_train, batch_size=128, epochs=10, validation_data=(X_test, y_test))

在这个示例中,X_trainy_train是训练数据和对应的标签,batch_size表示每次训练时使用的样本数量,设置为128,这意味着模型每次从训练数据中取出 128 个样本进行训练,这样可以减少内存的占用,同时也能加快训练速度。epochs表示训练的轮数,这里设置为10,即模型会对整个训练数据进行 10 次训练。validation_data参数用于指定验证数据,这里使用测试集(X_test, y_test)作为验证数据,模型在每一轮训练结束后,都会在验证数据上进行评估,以查看模型的泛化能力是否良好。通过不断地调整这些训练参数,我们可以让模型达到更好的训练效果。

(四)评估与预测

当模型训练完成后,我们就需要对模型的性能进行评估,看看它是否达到了我们的预期。在 Keras 中,使用evaluate()方法可以方便地对训练好的模型进行评估。继续以手写数字识别模型为例,评估代码如下:

score = model.evaluate(X_test, y_test)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

在这段代码中,model.evaluate(X_test, y_test)会返回一个包含损失值和评估指标值的列表。这里的score[0]表示测试集上的损失值,损失值越低,说明模型在测试集上的预测结果与真实值之间的差异越小;score[1]表示测试集上的准确率,准确率越高,说明模型在测试集上的预测效果越好。通过这些评估指标,我们可以直观地了解模型的性能表现。

除了评估模型,我们还可以使用训练好的模型进行预测,让模型对新的数据进行判断和分类。在 Keras 中,使用predict()方法进行预测。例如,我们想要预测测试集中前 10 个样本的数字类别,可以这样做:

predictions = model.predict(X_test[:10])print(predictions)

model.predict(X_test[:10])会返回一个数组,数组的每一行表示对应样本属于 0 - 9 这 10 个数字类别的概率分布。例如,predictions[0]表示第一个样本属于各个数字类别的概率,我们可以通过argmax()函数找到概率最大的类别索引,从而得到模型的预测结果:

import numpy as np
predicted_classes = np.argmax(predictions, axis=1)
print('Predicted classes:', predicted_classes)

通过这样的方式,我们就可以根据模型的预测结果进行分析和应用。比如在实际的手写数字识别场景中,我们可以将模型集成到一个应用程序中,让用户输入手写数字图片,模型就能快速给出识别结果,为人们的生活和工作带来便利。

结语

今天这篇文章,我们初步学习了 Keras,包括它是什么、具备哪些优势(简洁易用的 API、强大的兼容性、广泛的应用领域),以及基本使用方法。在下一篇文章里,我会带大家了解 Keras 在图像处理与自然语言处理领域的应用案例。欢迎订阅专栏->[传送门],及时获取最新文章。


延伸阅读

深度学习框架探秘|PyTorch:AI 开发的灵动画笔

深度学习框架探秘|TensorFlow:AI 世界的万能钥匙

深度学习框架探秘|TensorFlow vs PyTorch:AI 框架的巅峰对决

相关文章:

深度学习框架探秘|Keras:深度学习的魔法钥匙

一、引言:深度学习浪潮中的 Keras 前面的文章我们探秘了深度学习框架中的两大明星框架 —— TensorFlow 和 PyTorch 以及 两大框架的对比 在深度学习的众多框架中,还有一款框架备受开发者们的喜爱 —— Keras 。它就像是一位贴心的助手,为我…...

HTML【详解】input 标签

input 标签主要用于接收用户的输入,随 type 属性值的不同,变换其具体功能。 通用属性 属性属性值功能name字符串定义输入字段的名称,在表单提交时,服务器通过该名称来获取对应的值disabled布尔值禁用输入框,使其无法被…...

在vscode中拉取gitee里的项目并运行

拉取项目: 方法一:vscode点击查看--->终端(或者直接通过快捷键ctrol+ `打开) 在终端内通过cd命令定位到你想存放项目的文件夹 例如:cd h: 通过命令:git clone 地址 例如:git clone newbee-mall-vue-app: 前端代码 等待拉取完成即可在对应文件夹下看到项目啦 方…...

Spring Cloud微服务

一、定义 微服务,又叫微服务架构,也就是分布式架构,是软件架构的一种方式。它将一个大的单体架构应用拆分成一系列按业务领域划分模块的、小的自治服务。 如开发部有很多任务,如果把任务给了一个组的话,效率肯定会降低…...

打破AI黑盒,拥抱开源力量:基于openGauss+DeepSeek的本地知识库,打造你的专属AI助手!

引言:什么是RAG和LLM? LLM (Large Language Model,大语言模型): 就像 ChatGPT 这样的 AI 模型,拥有强大的语言理解和生成能力,但它们的知识局限于训练数据,且可能产生“幻觉”(即生成不准确的信…...

如何在 IntelliJ IDEA 中使用 Bito AI 插件

如何在 IntelliJ IDEA 中使用 Bito AI 插件 Bito: On-Demand AI Code Reviews Bito AI 插件是一个智能开发工具,能够帮助开发者提升编码效率,自动化生成代码、注释、单元测试等。本文将详细介绍 Bito AI 插件在 IntelliJ IDEA 中的使用方法&#xff0c…...

用xml配置spring, bean标签有哪些属性?

用xml配置spring, bean标签有哪些属性? 在Spring框架中&#xff0c;使用XML配置文件时&#xff0c;<bean>标签用于定义一个Bean。以下是一些常用的<bean>标签属性&#xff1a; 1. class 描述&#xff1a;指定Bean的类名。示例&#xff1a;<bean id"myBe…...

微信小程序中缓存数据全方位解惑

微信小程序中缓存数据全方位解惑 微信小程序中的数据缓存是提升用户体验和优化性能的重要手段&#xff0c;跟电脑浏览器中的Local Storage的性质一样。以下是关于微信小程序数据缓存的相关知识点和示例的详细介绍&#xff1a; 1. 数据缓存的类型 微信小程序提供了两种数据缓…...

物联网平台-分布式的设备接入与管理系统

乐吾乐物联网平台是由乐吾乐自主研发的一款分布式的设备接入与管理系统&#xff0c;专为满足不断增长的设备接入和数据处理需求而设计。平台集数据采集、分析、监控、告警和通知等功能于一体&#xff0c;并融合了乐吾乐大屏可视化和乐吾乐3D数字孪生技术&#xff0c;帮助用户快…...

ABP - 事件总线之分布式事件总线

ABP - 事件总线之分布式事件总线 1. 分布式事件总线的集成1.2 基于 RabbitMQ 的分布式事件总线 2. 分布式事件总线的使用2.1 发布2.2 订阅2.3 事务和异常处理 3. 自己扩展的分布式事件总线实现 事件总线可以实现代码逻辑的解耦&#xff0c;使代码模块之间功能职责更清晰。而分布…...

ComfyUI流程图生图原理详解

一、引言 ComfyUI 是一款功能强大的工具&#xff0c;在图像生成等领域有着广泛应用。本文补充一点ComfyUI 的安装与配置过程遇到的问题&#xff0c;并深入剖析图生图过程及相关参数&#xff0c;帮助读者快速入门并深入理解其原理。 二、ComfyUI 的安装与配置中遇到的问题 &a…...

洛谷 P3660 USACO17FEB Why Did the Cow Cross the Road III 题解

题意 有一个圆&#xff0c;圆周上按顺时针方向给出 2 n 2n 2n个点。第 i i i个点的颜色是 c o l o r i color_i colori​&#xff0c;其中数据保证 1 ≤ c o l o r i ≤ n 1\le color_i\le n 1≤colori​≤n&#xff0c;而且每种不同的颜色有且只有两个点。不存在位置重叠的点…...

kubekey一键部署k8s高可用与kubesphere

kubekey一键安装k8s与kubesphere还是蛮方便的&#xff0c;kubesphere官网上面也提到了高可用安装的一些事宜&#xff0c;但是没有涉及到kubesphere资深的redis的系统的部署问题&#xff0c;本文简单给出对应配置&#xff0c;其实这个配置在kubephere的cluster-configuration.ya…...

SwiftUI 5.0 中宝藏视图修改器 containerRelativeFrame 趣谈(下)

概览 小伙伴们都知道,为了将 SwiftUI 中多如牛毛的视图井然有序、有条不紊的组织起来,我们必须借助容器(Container)伏虎降龙般地威力。而如何最大限度的让容器中的子视图能根据容器尺寸安排自己的空间,则需要一些技术手段来洞幽察微。 在过去,我们往往使用 GeometryRead…...

ElasticSearch基础和使用

ElasticSearch基础 1 初识ES相关组件 &#xff08;1&#xff09;Elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。Elasticsearch结合kibana、Logstash、Beats组件 也就是elastic stack&#xff08;ELK&#xff09; 广泛应…...

我用 Cursor 开发了一款个人小记系统

https://note.iiter.cn 项目背景 在日常工作和学习中,我们经常需要快速记录一些想法、收藏一些有用的链接或者保存一些重要的文本、图片内容。虽然市面上已经有很多笔记软件,但我想要一个更轻量、更简单的工具,专注于快速记录和智能检索。于是我开发了这款个人小记系统。 系统…...

如何使用Three.js制作3D月球与星空效果

目录 1. 基本设置2. 创建星空效果3. 创建月球模型4. 添加中文3D文字5. 光照与相机配置6. 动画与控制7. 响应式布局8. 结语 在本文中&#xff0c;我们将一起学习如何利用Three.js实现一个3D月球与星空的效果&#xff0c;并添加一些有趣的元素&#xff0c;比如中文3D文字和互动功…...

DeepSeek接入网络安全领域,AI高效驱动,重新定义网络防御边界!

DeepSeek新一代模型的发布&#xff0c;标志着AI大模型的应用将逐步走向普及&#xff0c;并加速AI技术在各行业的赋能与全面落地。在科技日新月异的今天&#xff0c;AI技术凭借其强大的数据处理与分析能力&#xff0c;已成为推动社会进步的核心动力。 在网络安全领域&#xff0…...

【动态规划】斐波那契数列模型

目录 ​动态规划 动态规划的基本步骤 1137. 第 N 个泰波那契数 - 力扣&#xff08;LeetCode&#xff09; 算法分析 算法代码 算法代码 面试题 08.01. 三步问题 - 力扣&#xff08;LeetCode&#xff09; 算法分析 算法代码 优化 746. 使用最小花费爬楼梯 - 力扣&#x…...

Spring中的IOC详解

文章目录 IOC IOC容器的工作原理Bean的生命周期Bean的自动装配 AutowiredResourceInject 使用Spring底层组件 IOC Spring的核心之一是IOC&#xff0c;IOC全称为Inversion of Control&#xff0c;中文译为控制反转&#xff0c;是面向对象编程中的一种设计原则&#xff0c;可…...

深挖vue3基本原理之七 —— 功能模块的深度技术解析

Vue 3 四个核心功能模块的深度技术解析 一、Effect 调度系统&#xff1a;同步/异步任务队列 实现原理 // runtime-core/src/scheduler.ts const queue: (EffectJob | null)[] [] let isFlushing false const resolvedPromise Promise.resolve()function queueJob(job: Ef…...

数据结构 day 07

数据结构 day07 7. 树7.3. 层次遍历代码实现 8. 查询算法8.1. 顺序查找 seqSearch代码实现 8.2. 二分法查找 binarySearch代码实现 8.2. 分块查找 blockSearch代码实现 8.3. 哈希表 hash 9. 排序算法9.1. 冒泡排序 bubSort代码实现 9.2. 选择排序 selSort代码实现 9.3. 插入排序…...

《代码随想录》刷题笔记——回溯篇【java实现】

文章目录 组合组合总和 III电话号码的字母组合组合总和组合总和II思路代码实现 分割回文串※思路字符串分割回文串判断效率优化※ 复原 IP 地址优化版本 子集子集 II使用usedArr辅助去重不使用usedArr辅助去重 递增子序列※全排列全排列 II重新安排行程题意代码 N 皇后解数独直…...

React:初识React

React是什么&#xff1f; React是由Meta公司研发&#xff0c;也就是Facebook的公司&#xff08;马克扎克伯格这个见人&#xff09;研发的构建Web和原生交互界面的库 不仅可以写网页&#xff0c;还可以写苹果和安卓上面的app React的优势&#xff1a; React也是前端里最流行的…...

全面理解-c++中的内存布局

在 C 中&#xff0c;程序的内存布局指的是程序运行时&#xff0c;代码和数据在内存中的组织和分布方式。一般来说&#xff0c;C 程序的内存可以划分为以下几个主要区域&#xff1a; 1. 代码段&#xff08;Text Segment&#xff0c;也称为 .text 段&#xff09; 存储内容&…...

百度沈抖:传统云计算不再是主角,智能计算呼唤新一代“操作系统”

Create 2024 百度AI开发者大会 4月16日&#xff0c;Create 2024 百度AI开发者大会在深圳召开。期间&#xff0c;百度集团执行副总裁、百度智能云事业群总裁沈抖正式发布新一代智能计算操作系统——万源&#xff0c;通过对AI原生时代的智能计算平台进行抽象与封装设计&#xff…...

【银河麒麟高级服务器操作系统】服务器卡死后恢复系统日志丢失-分析及处理全过程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://document.kylinos.cn 服务器环境以及配置 【机型】 处理器&#xff…...

VSCode Error Lens插件介绍(代码静态检查与提示工具)(vscode插件)

文章目录 VSCode Error Lens 插件介绍**功能概述****开发背景****使用方法****适用场景** VSCode Error Lens 插件介绍 功能概述 Error Lens 是一款增强 VS Code 错误提示的扩展工具&#xff0c;通过 内联显示错误和警告信息&#xff0c;直接定位代码问题&#xff0c;提升开发…...

ffmpeg configure 研究1-命令行参数的分析

author: hjjdebug date: 2025年 02月 14日 星期五 17:16:12 CST description: ffmpeg configure 研究1 ./configure 命令行参数的分析 文章目录 1 configure 对命令行参数的分析,在4019行1.1 函数名称: is_in1.2. 函数名称: enable1.3. 函数名称: set_all 2 执行退出判断的关键…...

如何调整 Nginx工作进程数以提升性能

&#x1f3e1;作者主页&#xff1a;点击&#xff01; Nginx-从零开始的服务器之旅专栏&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年2月15日14点20分 Nginx 的工作进程数&#xff0…...

分布式 NewSQL 数据库(TiDB)

TiDB 是一个分布式 NewSQL 数据库。它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议&#xff0c;具有数据强一致的高可用特性&#xff0c;是一个不仅适合 OLTP 场景还适合 OLAP 场景的混合数据库。 TiDB是 PingCAP公司自主设计、研发的开源分布式关系型数据…...

try learning-git-branching

文章目录 mergerebase分离 HEAD相对引用利用父节点branch -f 撤销变更cherry-pick交互式 rebase只取一个提交记录提交的技巧rebase 在上一次提交上amendcherry-pick 在上一次提交上 amend tag多分支 rebase两个parent节点纠缠不清的分支偏离的提交历史锁定的Main推送主分支合并…...

【kafka系列】Kafka事务的实现原理

目录 1. 事务核心组件 1.1 幂等性生产者&#xff08;Idempotent Producer&#xff09; 1.2 事务协调器&#xff08;TransactionCoordinator&#xff09; 1.3 事务日志&#xff08;Transaction Log&#xff09; 2. 事务执行流程 2.1 事务初始化 2.2 发送消息 2.3 事务提…...

数据结构6

一、哈希散列--通讯录查找 #include "hash.h" #include <stdio.h> #include <stdlib.h> #include <string.h>//int *a[10];int hash_function(char key) {if (key > a && key < z){return key - a;}else if (key > A && …...

Flutter 的 Widget Key 提议大调整?深入聊一聊 Key 的作用

Flutter 的 Widget Key 提议大调整&#xff1f;深入聊一聊 Key 的作用 在 Flutter 里&#xff0c;Key 对象存在的目的主要是区分和维持 Widget 的状态&#xff0c;它是控件在渲染树里的「复用」标识之一&#xff0c;这一点在之前的《深入 Flutter 和 Compose 在 UI 渲染刷新时…...

src和href区别

src和href区别 (1)请求资源类型不同(2)作用结果不同(3)解析方式不同 (1)请求资源类型不同 href 用来建立文档和元素之间的链接(是引用),常用的有a、linksrc 在请求src资源时候会将指向的资源下载并且应用到文档中(引入),常用的有script、iframe、image。 (2)作用结果不同 hr…...

STM32之SG90舵机控制

目录 前言&#xff1a; 一、硬件准备与接线 1.1 硬件清单 1.2 接线 二、 SG90舵机简介 1.1 外观 1.2 基本参数 1.3 引脚说明 1.4 控制原理 1.5 特点 1.6 常见问题 三、 单片机简介 四、 程序设计 4.1 定时器配置 4.2 角度控制函数 4.3 主函数调用 五、 总结 …...

尚硅谷课程【笔记】——大数据之Hadoop【一】

课程视频链接&#xff1a;尚硅谷Hadoop3.x教程 一、大数据概论 1&#xff09;大数据概念 大数据&#xff08;Big Data&#xff09;&#xff1a;指无法再一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发…...

QEMU 搭建 Ubuntu x86 虚拟机

1. 安装 QEMU 在 Ubuntu 系统中&#xff0c;可以通过以下命令安装 QEMU&#xff1a; sudo apt-get update sudo apt-get install qemu-system-x86_64 qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager2. 创建虚拟硬盘镜像 qemu-img create -f raw ubuntu…...

mac 意外退出移动硬盘后再次插入移动硬盘不显示怎么办

第一步&#xff1a;sudo ps aux | grep fsck 打开mac控制台输入如下指令&#xff0c;我们看到会出现两个进程&#xff0c;看进程是root的这个 sudo ps aux|grep fsck 第二步&#xff1a;杀死进程 在第一步基础上我们知道不显示u盘的进程是&#xff1a;62319&#xff0c;我们…...

Acwing-基础算法课笔记之基础算法(双指针)

Acwing-基础算法课笔记之基础算法&#xff08;双指针&#xff09; 一、双指针算法概念二、关于双指针的一个问题三、模板 一、双指针算法概念 双指针&#xff08;又称尺取法&#xff09;是一个常用的优化技巧&#xff0c;用来解决序列的区间问题。 两个指针i&#xff0c;j&am…...

PCIE基础学习

PCIE PIO模式&#xff1a; 一个CPU传输一个32bit给PCIE&#xff08;IP&#xff09;。CPU直接与PCIE做数据传输。 DMA模式&#xff1a; CPU通过PCIE bridge 与多个PCIE设备连接&#xff0c;CPU发送命令给桥&#xff0c;桥控制PCIE与memory直接数据连接。 tlp报文 读报文 …...

架构——Nginx功能、职责、原理、配置示例、应用场景

以下是关于 Nginx 的功能、职责、原理、配置示例、应用场景及其高性能原因的详细说明&#xff1a; 一、Nginx 的核心功能 1. 静态资源服务 功能&#xff1a;直接返回静态文件&#xff08;如 HTML、CSS、JS、图片、视频等&#xff09;。配置示例&#xff1a;server {listen 80…...

【教程】比亚迪车机接入AI大模型语音助手

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 更新说明&#xff1a; v1.1.0.2 1、新增长按音量键触发&#xff0c;不再需要迪加 (需设置modelisten)。 2、新增kimi、豆包、ChatGPT等多个GPT接口。 3…...

ios中常见的设计原则和设计模式

七大设计原则 1&#xff1a;开闭原则 对扩展开放&#xff0c;对修改关闭&#xff0c;在设计模块的时候&#xff0c;使模块在不被修改的前提下可以扩展功能 2:依赖倒置原则 实现尽量依赖抽象&#xff0c;不依赖具体实现 &#xff08;1&#xff09;高层模块不应该依赖底层模…...

WSL Ubuntu 安装 CUDA 教程

WSL Ubuntu 安装 CUDA 教程 1. 概述2. 准备工作3. 删除旧的 GPG 密钥4. 安装 CUDA Toolkit4.1 使用 WSL-Ubuntu 包安装&#xff08;推荐&#xff09; 5. 设置环境变量6. 注意事项7. 参考链接8. 总结 1. 概述 随着 WSL 2 的推出&#xff0c;Windows 用户现在可以在 Windows 子系…...

案例-02.部门管理-查询

一.查询部门-需求 二.查询部门-思路 API接口文档 三.代码实现 1.controller层&#xff1a;负责与前端进行交互&#xff0c;接收前端所发来的请求 注&#xff1a;Slf4j用于记录日志使用&#xff0c;可以省略private static Logger log LoggerFactory.getLogger(DeptControlle…...

【ARM】解决ArmDS Fast Models 中部分内核无法上电的问题

1、 文档目标 解决ArmDS Fast Models 中部分内核无法上电的问题。 2、 问题场景 在调用ArmDS的Fast Models中的Cortex-A55的模型&#xff0c;只有Core 0是上电状态&#xff0c;而Core 1处于掉电状态&#xff0c;如图2-1所示&#xff1a; 图2-1 3、软硬件环境 1&#xff09;…...

docker 基础命令使用(ubuntu)

docker 状态查询 docker ps docker ps -adocker --version docker info docker --help docker run --help docker ps --help ...docker 操作镜像命令 docker imagesdocker rmi 镜像id/镜像名docker 操作容器命令 docker ps docker ps -adocker run 命令 # 端口映射 -p 参数…...

WEB安全--SQL注入--二次注入

一、原理&#xff1a; 二次注入的关键在于攻击者的输入并不立即执行&#xff0c;而是经过某些存储或处理后&#xff0c;在后续某个步骤中再触发注入攻击 二、示例&#xff1a; 2.1、sqli-labs-master/less-24&#xff1a; admin# 第一次在网页注册账号和密码时没有漏洞&#x…...