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

深度学习框架探秘|Keras 应用案例解析以及 Keras vs TensorFlow vs PyTorch

引言

上一篇文章《深度学习框架探秘|Keras:深度学习的魔法钥匙》 我们初步学习了 Keras,包括它是什么、具备哪些优势(简洁易用的 API、强大的兼容性、广泛的应用领域),以及基本使用方法。本文,我将会带大家了解 Keras 在图像处理与自然语言处理领域的应用案例。以及 KerasTensorFlowPyTorch 的对比。话不多说,下面我们先从 Keras 的应用案例开始。

一、Keras 应用案例解析

图片来源于网络

(一)图像分类

在自动驾驶的浪潮中,交通标志识别作为关键技术,其重要性不言而喻。它就像是车辆的 “眼睛”,帮助车辆快速准确地理解道路规则,为安全行驶提供有力保障。接下来,让我们以交通标志识别为例,深入了解 Keras 在图像分类任务中的应用。

1、数据准备

巧妇难为无米之炊,构建模型的第一步是准备高质量的数据。在交通标志识别中,常用的数据集是德国交通标志识别基准(GTSRB) ,它就像是一个装满各种交通标志图片的大宝库,包含了 43 种不同类别的交通标志,图片尺寸在 15x15 到 250x250 像素之间 。但这些原始图片就像未经雕琢的璞玉,需要进行一系列预处理才能使用。

首先,要对图像进行缩放,使它们具有相同的尺寸,就像给所有图片穿上统一尺寸的 “衣服”,方便后续处理。这里我们将图像统一调整为 48x48 像素。代码实现如下:

from skimage import transformimport cv2def preprocess_img(img):img = transform.resize(img, (48, 48))return imgimg = cv2.imread('traffic_sign.jpg')img = preprocess_img(img)

其次,由于数据集中的图像拍摄时间和环境不同,导致图像的亮度和对比度存在差异。为了让模型能够更好地学习交通标志的特征,需要对图像进行直方图归一化处理,使不同光照条件下的图像具有相似的分布。这一步就像是给图像做了一次 “美颜”,让它们的亮度更加均匀。示例代码如下:

from skimage import color, exposuredef preprocess_img(img):hsv = color.rgb2hsv(img)hsv[:, :, 2] = exposure.equalize_hist(hsv[:, :, 2])img = color.hsv2rgb(hsv)img = transform.resize(img, (48, 48))return imgimg = cv2.imread('traffic_sign.jpg')img = preprocess_img(img)

完成图像预处理后,还需要将数据划分为训练集、验证集和测试集。一般来说,训练集用于训练模型,让模型学习交通标志的特征;验证集用于调整模型的超参数,防止模型过拟合;测试集用于评估模型的性能。通常按照 70%、15%、15% 的比例进行划分。以 Scikit - learn 库中的train_test_split函数为例,代码如下:

from sklearn.model_selection import train_test_splitimport numpy as np# 假设imgs是预处理后的图像数组,labels是对应的标签数组x_train, x_test, y_train, y_test = train_test_split(imgs, labels, test_size=0.3)x_train, x_val, y_train, y_val = train_test_split(x_train, y_train, test_size=0.5)

2、模型构建

有了准备好的数据,接下来就可以使用 Keras 构建卷积神经网络(CNN)模型了。CNN 就像是一个专门用来提取图像特征的 “超级探测器”,非常适合处理图像分类任务。

下面是一个简单的 CNN 模型结构示例:

from keras.models import Sequentialfrom keras.layers import Conv2D, MaxPool2D, Dropout, Flatten, Densemodel = Sequential()model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(48, 48, 3)))model.add(MaxPool2D(pool_size=(2, 2)))model.add(Conv2D(64, (3, 3), activation='relu'))model.add(MaxPool2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(128, activation='relu'))model.add(Dropout(0.5))model.add(Dense(43, activation='softmax'))

在这个模型中,首先是两个卷积层 Conv2D,它们通过卷积核在图像上滑动,提取图像的局部特征,就像用放大镜仔细观察图像的各个部分。激活函数 relu 为模型引入了非线性,使模型能够学习到更复杂的特征。接着是两个池化层 MaxPool2D ,它们的作用是对特征图进行下采样,减少数据量,同时保留重要的特征,就像对图像进行了一次 “压缩”,去掉了一些不重要的细节。Dropout 层则是为了防止模型过拟合,它在训练过程中随机 “丢弃” 一些神经元,让模型学习到更鲁棒的特征。最后,通过 Flatten将多维的特征图展平为一维向量,再通过全连接层 Dense 进行分类预测,输出 43 个类别的概率分布,对应 43 种交通标志。

3、模型训练

构建好模型后,就可以对模型进行训练了。在训练之前,需要先编译模型、指定优化器、损失函数和评估指标。

model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])

这里 使用 adam 优化器 ,它能够自适应地调整学习率,使模型更快地收敛。对于多分类问题, 使用 categorical_crossentropy 作为损失函数 ,它可以衡量模型预测值与真实标签之间的差异。 评估指标选择accuracy ,即准确率,用于评估模型在训练和验证过程中的性能。

接下来开始训练模型

model.fit(x_train, y_train,batch_size=32,epochs=10,validation_data=(x_val, y_val))

在训练过程中,有几个参数需要我们注意:

  • batch_size 表示每次训练时使用的样本数量,这里设置为 32,模型会每次从训练集中取出 32 个样本进行训练。
  • epochs 表示训练的轮数,这里设置为 10,即模型会对整个训练集进行 10 次训练。
  • validation_data用于指定验证数据,模型会在每一轮训练结束后,在验证集上评估模型的性能,查看模型是否过拟合。

4、模型部署

经过训练和优化,模型在测试集上达到了满意的性能后,就可以将其部署到实际应用中了。比如将模型集成到自动驾驶系统中,让车辆在行驶过程中实时识别交通标志。在部署时,需要将模型保存为合适的格式,以便在不同的环境中使用。 Keras 提供了 save 方法,可以将模型保存为 HDF5 格式的文件

model.save('traffic_sign_model.h5')

在实际应用中,可以使用相应的库加载模型,并对新的图像进行预测。例如,在 Python 中可以使用以下代码加载模型并进行预测:

from keras.models import load_modelimport cv2import numpy as np
//加载模型
model = load_model('traffic_sign_model.h5')img = cv2.imread('new_traffic_sign.jpg')img = preprocess_img(img)img = np.expand_dims(img, axis=0)prediction = model.predict(img)predicted_class = np.argmax(prediction)

通过以上步骤,我们就完成了从数据准备、模型构建、训练到最终部署的全过程,成功实现了基于 Keras 的交通标志识别系统。在这个过程中,每个环节都至关重要,需要我们精心处理和优化,才能让模型达到最佳的性能。

(二)自然语言处理

在社交媒体和电商平台飞速发展的今天,用户生成的文本数据呈爆炸式增长。如何快速准确地了解用户对产品或服务的态度,成为了企业关注的焦点。情感分析作为自然语言处理中的一项重要任务,能够帮助我们从海量的文本数据中提取出用户的情感倾向,判断文本是积极、消极还是中性的。接下来,我们就 以情感分析为例,看看 Keras 在自然语言处理中的强大应用。

1、文本预处理

自然语言处理的第一步是对文本进行预处理,这一步就像是给原始文本做一次 “大扫除”,去除其中的噪声和无关信息,将其转换为模型能够处理的形式。

假设我们有一个电影评论数据集,其中包含了大量的用户评论和对应的情感标签(正面或负面)。首先,需要 读取数据。可以使用 Python 的 pandas 库来读取 CSV 格式的数据集,代码如下:

import pandas as pddata = pd.read_csv('movie_reviews.csv')reviews = data['review'].tolist()labels = data['sentiment'].tolist()

读取数据后,需要对文本进行清洗,去除 HTML 标签、特殊字符和标点符号。这里可以使用正则表达式来实现,示例代码如下:

import redef clean_text(text):text = re.sub(r'<.\*?>', '', text)  # 去除HTML标签text = re.sub(r'[^\w\s]', '', text)  # 去除标点符号return textcleaned_reviews = [clean_text(review) for review in reviews]

清洗完文本后,接下来是分词,将文本拆分成单个的单词。在 Python 中,可以使用 nltk 库或 spaCy 库进行分词。以nltk库为例,代码如下:

from nltk.tokenize import word_tokenizetokenized_reviews = [word_tokenize(review) for review in cleaned_reviews]

分词后,还需要将单词转换为数字序列,以便模型能够处理。这就需要用到词嵌入(Word Embedding)技术,将每个单词映射到一个低维的向量空间中。在 Keras 中,可以使用 Tokenizer 类来实现这一过程,同时还可以对序列进行填充,使所有序列具有相同的长度。示例代码如下:

from keras.preprocessing.text import Tokenizerfrom keras.preprocessing.sequence import pad_sequencestokenizer = Tokenizer(num_words=10000)tokenizer.fit_on_texts(tokenized_reviews)sequences = tokenizer.texts_to_sequences(tokenized_reviews)maxlen = 100padded_sequences = pad_sequences(sequences, maxlen=maxlen)

这里 num_words 表示只考虑出现频率最高的 10000 个单词,maxlen 表示将所有序列填充或截断为长度 100。

2、模型搭建

完成文本预处理后,就可以使用 Keras 搭建情感分析模型了。在自然语言处理中,循环神经网络(RNN)及其变体,如长短时记忆网络(LSTM) 门控循环单元(GRU),由于能够处理序列数据中的长期依赖关系,非常适合情感分析任务。

下面是一个使用 LSTM 搭建的情感分析模型示例:

from keras.models import Sequentialfrom keras.layers import Embedding, LSTM, Densemodel = Sequential()model.add(Embedding(input_dim=10000, output_dim=128, input_length=maxlen))model.add(LSTM(units=64))model.add(Dense(units=1, activation='sigmoid'))

在这个模型中,主要有三层:

  • 首先是一个 嵌入层 Embedding ,它将单词的数字序列转换为低维的向量表示,就像给每个单词赋予了一个独特的 “数字指纹”。
    • input_dim表示词汇表的大小,即前面设置的 10000;
    • output_dim表示嵌入向量的维度,这里设置为 128;
    • input_length表示输入序列的长度,即前面设置的maxlen
  • 接着是一个 LSTM 层 ,它能够捕捉文本中的长期依赖关系,学习到文本的语义信息。
  • 最后是一个 全连接层 Dense ,使用 sigmoid 激活函数,输出一个 0 到 1 之间的概率值,表示文本为正面情感的概率。如果概率大于 0.5,则判断为正面情感;否则为负面情感。

3、训练与评估

搭建好模型后,同样需要先编译模型,指定优化器、损失函数和评估指标。对于二分类的情感分析任务,通常使用 binary_crossentropy 作为损失函数,adam 作为优化器,评估指标可以选择准确率 accuracy

model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])

然后开始训练模型

model.fit(padded_sequences, labels,batch_size=32,epochs=10,validation_split=0.2)

在训练过程中,

  • batch_size设置为 32,即每次从训练集中取出 32 个样本进行训练;
  • epochs设置为 10,即对整个训练集进行 10 次训练;
  • validation_split设置为 0.2,表示将 20% 的训练数据作为验证集,用于评估模型在训练过程中的性能,防止模型过拟合。

训练完成后,使用测试集对模型进行评估,查看模型的性能表现:

test_sequences = tokenizer.texts_to_sequences(test_tokenized_reviews)test_padded_sequences = pad_sequences(test_sequences, maxlen=maxlen)test_labels = test_data['sentiment'].tolist()loss, accuracy = model.evaluate(test_padded_sequences, test_labels)print(f'Test loss: {loss}, Test accuracy: {accuracy}')

通过以上步骤,我们就完成了基于 Keras 的情感分析任务,从原始的文本数据中成功提取出了用户的情感倾向。在实际应用中,还可以进一步优化模型,如调整超参数、使用预训练的词向量等,以提高模型的性能。

二、Keras 与其他框架的对比

在深度学习的广阔天地里, Keras 并非独自闪耀,还有许多其他优秀的框架,如 TensorFlowPyTorch 等,它们各自散发着独特的光芒,在不同的场景中发挥着重要作用。接下来,让我们一同深入对比 Keras 与这些主流框架,探寻它们的优势与适用场景,以便在实际项目中做出明智的选择。

在这里插入图片描述

(一)Keras 与 TensorFlow

Keras 与 TensorFlow 有着千丝万缕的联系,如今 Keras 已成为 TensorFlow 的官方高层 API,即 tf.keras 。但它们在很多方面仍存在差异。

易用性来看,Keras 堪称 “新手友好型” 框架的典范。其 API 设计简洁直观,高度抽象,开发者只需关注模型的搭建和训练逻辑,无需过多操心底层细节,就像驾驶一辆配备了自动驾驶辅助系统的汽车,操作简单便捷。以构建一个简单的神经网络为例,使用 Keras 可能只需短短十几行代码,就能轻松完成模型的搭建与编译。TensorFlow 原生 API 则相对复杂,更像是驾驶一辆手动挡汽车,需要开发者对计算图、张量操作等底层概念有深入理解,在构建模型时需要编写更多的代码来处理各种细节,学习曲线较陡。

灵活性方面,TensorFlow 更胜一筹。它允许开发者对模型进行深度定制,精细控制每一个计算步骤,就像一位经验丰富的工匠,可以根据自己的创意和需求,对原材料进行随心所欲的加工。Keras 由于其高度封装的特性,在灵活性上相对受限,不过对于大多数常见的深度学习任务,Keras 的灵活性也能满足需求。

应用场景来看, Keras 适用于快速原型开发、初学者学习以及对模型灵活性要求不高的中小型项目。比如在一些小型创业公司的产品开发初期,需要快速验证模型的可行性,Keras 就能大显身手。TensorFlow 则更适合大规模机器学习、生产环境部署以及对模型性能和灵活性要求极高的复杂项目。例如,谷歌的一些大型深度学习项目,如语音识别、图像搜索等,都大量使用了 TensorFlow。

(二)Keras 与 PyTorch

Keras 和 PyTorch 也各有千秋。下面主要从设计理念、计算图构建、社区支持和生态系统以及应用场景来分别对比 Keras 和 PyTorch:

设计理念上,Keras 追求简单易用,致力于让深度学习变得触手可及,就像一把万能钥匙,能轻松打开深度学习的大门。PyTorch 则强调灵活性和动态性,采用动态计算图,赋予开发者更大的自由度,如同一位自由舞者,可以根据音乐的节奏和自己的灵感,自由地变换舞姿。

计算图构建方面,Keras 主要依赖后端(如 TensorFlow)实现计算图,通常为静态计算图,在模型构建阶段就固定下来,就像提前设计好的建筑蓝图,施工过程中很难更改。PyTorch 采用动态计算图,计算图在运行时构建,可根据数据和模型的变化灵活调整,就像搭建积木,随时可以根据自己的想法重新组合。这使得 PyTorch 在模型调试和实验阶段具有明显优势,开发者可以实时查看和修改计算图,快速验证新的想法。

社区支持和生态系统来看,两者都拥有活跃的社区和丰富的资源。但 PyTorch 在学术界更受欢迎,许多前沿的深度学习研究都基于 PyTorch 展开,就像一个学术交流的热门聚集地,吸引着众多科研人员。而 Keras 由于其易用性,在工业界和初学者群体中拥有广泛的用户基础,就像一款普及度极高的大众产品,深受大家喜爱。

应用场景上,Keras 适合初学者快速入门深度学习,以及进行快速的模型实验和迭代。比如在高校的深度学习课程教学中,Keras 可以帮助学生快速理解和掌握深度学习的基本概念和方法。而 PyTorch 则更适合深入的研究工作和对模型灵活性要求较高的高级应用,如开发新的深度学习算法、构建复杂的生成对抗网络等。

三、总结与展望

Keras 以其简洁易用的 API、强大的兼容性和广泛的应用领域,在深度学习的舞台上占据了重要的一席之地。它就像一位贴心的伙伴,陪伴着无数开发者从深度学习的新手逐渐成长为能够独当一面的高手。无论是在图像识别领域助力我们精准识别交通标志,保障出行安全;还是在自然语言处理领域帮助我们洞察用户的情感倾向,提升服务质量,Keras 都展现出了非凡的实力。

如果你也对深度学习充满好奇,渴望在这个充满无限可能的领域一展身手,不妨从 Keras 开始你的探索之旅。相信在 Keras 的陪伴下,你能够轻松地将自己的创意和想法转化为实际的深度学习模型,实现从理论到实践的跨越。

未来,随着深度学习技术的不断发展和创新,Keras 也必将不断进化和完善。我们有理由期待,Keras 会在更多的领域中发挥重要作用,为解决各种复杂的实际问题提供更加高效、便捷的解决方案。它将继续降低深度学习的门槛,让更多的人能够受益于这一前沿技术,推动人工智能技术在各个领域的广泛应用和深入发展。


延伸阅读

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

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

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

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

相关文章:

深度学习框架探秘|Keras 应用案例解析以及 Keras vs TensorFlow vs PyTorch

引言 上一篇文章《深度学习框架探秘&#xff5c;Keras&#xff1a;深度学习的魔法钥匙》 我们初步学习了 Keras&#xff0c;包括它是什么、具备哪些优势&#xff08;简洁易用的 API、强大的兼容性、广泛的应用领域&#xff09;&#xff0c;以及基本使用方法。本文&#xff0c;…...

【01 背包】

01 背包解题思路&#xff1a; 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 这是标准的背包问题&#xff0c;每一件物品其实只有两个状…...

算法10-二分查找算法

一、二分查找算法概念 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;适用于在有序数组中快速查找目标值。它的核心思想是通过不断缩小查找范围&#xff0c;将时间复杂度从线性查找的 O(n) 优化到 O(log n)。 二、二分查找的流程图 以下是二…...

变相提高大模型上下文长度-RAG文档压缩-3.优化map-reduce(reranker过滤+社区聚类)

我遇到的业务问题实际上是RAG需要处理很多同一对象的日常报告&#xff0c;不像常识类问题&#xff0c;它的相关Document更多而且更分散&#xff0c;日常报告代表数据库里有很多它的内容&#xff0c;而且对象可能只在段落中的几句话提及到。top-k数量受限于大模型长度&#xff0…...

算法11-分治算法

一、分治算法概念 分治算法&#xff08;Divide and Conquer&#xff09;是一种重要的算法设计思想&#xff0c;通过将问题分解为多个子问题&#xff0c;分别解决后再合并结果&#xff0c;从而解决原问题。分治算法的核心思想是“分而治之”&#xff0c;通常包含三个步骤&#…...

Golang internals

To be continued... time.Time golang的时区和神奇的time.Parse context.Context Go Context的踩坑经历 sync.Pool sync.Pool workflow in Go 1.12 new shared pools in Go 1.13 什么是cpu cache理解 Go 1.13 中 sync.Pool 的设计与实现Go: Understand the Design of Sync.Pool…...

Flask中获取请求参数的一些方式总结

在 Flask 中&#xff0c;可以从 request 对象中获取各种类型的参数。以下是全面整理的获取参数的方式及示例代码。 1. 获取 URL 查询参数&#xff08;Query String Parameters&#xff09; URL 中的查询参数通过 ?keyvalue&key2value2 的形式传递&#xff0c;使用 reques…...

vscode/cursor 写注释时候出现框框解决办法

一、问题描述 用vscode/cursor写注释出现如图的框框&#xff0c;看着十分难受&#xff0c;用pycharm就没有 二、解决办法 以下两种&#xff0c;哪个好用改那个 &#xff08;1&#xff09;Unicode Highlight:Ambiguous Characters Unicode Highlight:Ambiguous Characters &a…...

11-跳跃游戏

给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 贪心算法思路分析 在遍…...

TestHubo基础教程-创建项目

TestHubo是一款国产开源一站式测试工具&#xff0c;涵盖功能测试、接口测试、性能测试&#xff0c;以及 Web 和 App 测试&#xff0c;可以满足不同类型项目的测试需求。本文将介绍如何快速创建第一个项目&#xff0c;以快速入门上手。 1、创建项目 在 TestHubo 中&#xff0c;…...

GHOST重装后DEF盘丢失的全面解析与数据恢复实战指南

GHOST作为一款经典的系统备份与还原工具&#xff0c;因其高效便捷的特性被广泛应用于系统重装和数据恢复场景。然而&#xff0c;许多用户在使用GHOST重装系统后&#xff0c;发现DEF盘&#xff08;即D盘、E盘、F盘等非系统盘&#xff09;突然丢失&#xff0c;导致重要数据无法访…...

soular基础教程-使用指南

soular是TikLab DevOps工具链的统一帐号中心&#xff0c;今天来介绍如何使用 soular 配置你的组织、工作台&#xff0c;快速入门上手。 &#xfeff; 1. 账号管理 可以对账号信息进行多方面管理&#xff0c;包括分配不同的部门、用户组等&#xff0c;从而确保账号权限和职责…...

刷题记录(回顾)HOT100 二叉树-10: ​199. 二叉树的右视图

题目&#xff1a;199. 二叉树的右视图 难度&#xff1a;中等 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左…...

【Java学习】类和对象

目录 一、选择取块解 二、类变量 三、似复刻变量 四、类变量的指向对象 五、变量的解引用访问 1.new 类变量(参) 2.this(参) 3.类变量/似复刻变量. 六、代码块 七、复制变量的赋值顺序 八、访问限定符 1.private 2.default 九、导类 一、选择取块解 解引用都有可以…...

安卓基础(Adapter)

想象一下&#xff0c;你有一堆玩具&#xff08;数据&#xff09;&#xff0c;这些玩具很特别&#xff0c;每个玩具都是不同的&#xff0c;可能有汽车、飞机、积木等。现在&#xff0c;你想把这些玩具摆放到一个展示柜&#xff08;显示的界面&#xff09;里&#xff0c;给大家看…...

mybatis-lombok工具包介绍

Lombok是一个实用的]ava类库&#xff0c;能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法&#xff0c;并可以自动化生成日志变量&#xff0c;简化java开发、提高效率。 使用前要加入Lombok依赖...

React - 高阶函数-函数柯里化

在 JavaScript 和 React 中&#xff0c;高阶函数是指能够接收其它函数作为参数&#xff0c;或者返回一个函数的函数。柯里化是一种将函数的多个参数转化为一系列嵌套函数的技术&#xff0c;通常用于简化函数的使用和提高其可组合性。 使用前&#xff1a; import React,{Compo…...

数据守护者:备份文件的重要性及自动化备份实践

在信息化社会&#xff0c;数据已成为企业运营和个人生活的重要组成部分。无论是企业的核心业务数据&#xff0c;还是个人的珍贵照片、重要文档&#xff0c;数据的丢失或损坏都可能带来无法估量的损失。因此&#xff0c;备份文件的重要性愈发凸显&#xff0c;它不仅是数据安全的…...

【kafka系列】消费者重平衡

目录 流程 1. 消费者组重平衡&#xff08;Rebalance&#xff09;的流程逻辑分析 阶段一&#xff1a;触发重平衡 阶段二&#xff1a;消费者组协调 阶段三&#xff1a;重平衡完成 关键设计思想 2. Mermaid 流程代码 关键点总结 重平衡的影响 1. 重平衡期间的消费行为 2…...

光谱相机在天文学领域的应用

天体成分分析 恒星成分研究&#xff1a;恒星的光谱包含了其大气中各种元素的吸收和发射线特征。通过光谱相机精确测量这些谱线&#xff0c;天文学家能确定恒星大气中氢、氦、碳、氮、氧等元素的含量。如对太阳的光谱分析发现&#xff0c;太阳大气中氢元素占比约 71%&#xff0…...

Java 基于 SpringBoot+Vue 的家政服务管理平台设计与实现

博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447…...

ABC393E/F简要题解

ABC393E 给定数组 A A A,求包含元素 A i A_i Ai​的大小为 k k k的子集中最大的最大公约数。 题解&#xff1a; 首先思考对于整个数组所有包含 k k k个元素的子集中最大的GCD是多少&#xff0c;可以怎么求。 我们发现&#xff0c;如果一个数 x x x,数组中如果存在至少 k k …...

什么是Mustache

Mustache 是一种轻量级模板引擎&#xff0c;用于将变量插入到模板中生成最终的文本输出。它的设计简单且易于使用&#xff0c;适用于多种编程语言&#xff0c;包括 JavaScript、Python、Ruby、Java 等。 Mustache 的模板语法使用双大括号 {{}} 包裹变量或表达式&#xff0c;用…...

GGUF格式的DeepSeek-R1-Distill-Qwen-1.5B模型的字段解析

在将GGUF文件转换为PyTorch格式之前&#xff0c;先要读取文件并了解模型中都有什么字段&#xff0c;会遇到了各种参数不匹配的问题。现在&#xff0c;我们先读取GGUF文件的元数据字段&#xff0c;并希望将这些字段中的内存映射&#xff08;mmap&#xff09;数据转换为字符串显示…...

Java和SQL测试、性能监控中常用工具

下面我会详细列举一些在Java和SQL测试、调试、性能监控中常用的工具&#xff0c;并结合项目中提到的各个技术点说明如何选择合适的工具和方法。 一、Java项目常用的测试、调试与性能监控工具 单元测试与集成测试&#xff1a; JUnit/TestNG&#xff1a; 用于编写单元测试和集成测…...

CAS单点登录(第7版)13.票务

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 票务 概述 票务 有两个核心的可配置工单组件&#xff1a; TicketRegistry - 提供持久票证存储。ExpirationPolicy - 提供票证过期语义的策略框架。 工单注册 部署环境和技术专业知识…...

大语言模型入门

大语言模型入门 1 大语言模型步骤1.1 pre-training 预训练1.1.1 从网上爬数据1.1.2 tokenization1.1.2.1 tokenization using byte pair encoding 1.3 预训练1.3.1 context1.3.2 training1.3.3 输出 1.2 post-training1.2.1 token 1.2 SFT监督微调1.3 人类反馈强化学习1.3.1 人…...

从ARM官方获取自己想要的gcc交叉编译工具链接(Arm GNU Toolchain),并在Ubuntu系统中进行配置

前言 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145547974 的分支博文。 在本博文中我们完成gcc交叉编译工具gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz的下载、配置、测试。 下载自己想要的gcc交叉编译工具的源码 目标文件的名字及说…...

LDR6500:重塑充电与数据传输的新篇章

在当今快速发展的数字时代&#xff0c;电子设备对充电速度、数据传输效率和兼容性提出了更高要求。LDR6500&#xff0c;作为一款专为USB Type-C Bridge设备设计的USB-C DRP&#xff08;Dual Role Port&#xff0c;双角色端口&#xff09;接口USB PD&#xff08;Power Delivery&…...

Matlab 机器人 雅可比矩阵

工业机器人运动学与Matlab正逆解算法学习笔记&#xff08;用心总结一文全会&#xff09;&#xff08;四&#xff09;——雅可比矩阵_staubli机器人正逆向运动学实例验证matlab-CSDN博客 matlab求雅可比矩阵_六轴机械臂 矢量积法求解雅可比矩阵-CSDN博客 (63 封私信 / 80 条消息…...

网络安全防护:开源WAF雷池SafeLine本地部署与配置全流程

文章目录 前言1.关于SafeLine2.安装Docker3.本地部署SafeLine4.使用SafeLine5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 对于建站新手来说&#xff0c;无论你选择创建的是个人博客、企业官网还是各类应用平台来推广自己的内容或是产品&am…...

vue框架生命周期详细解析

Vue.js 的生命周期钩子函数是理解 Vue 组件行为的关键。每个 Vue 实例在创建、更新和销毁过程中都会经历一系列的生命周期阶段&#xff0c;每个阶段都有对应的钩子函数&#xff0c;开发者可以在这些钩子函数中执行特定的操作。 Vue 生命周期概述 Vue 的生命周期可以分为以下几…...

Ollama 安装使用指南

rootdeepseek-1:/home/zgq/.ollama# lsof -i :11434 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ollama 29005 root 3u IPv4 47359 0t0 TCP localhost:11434 (LISTEN) 从以上提供的 lsof 输出来看&#xff0c;Ollama 服务正在监听 localhost:11434…...

力扣 38. 外观数列 打表 迭代 阅读理解

Problem: 38. 外观数列 &#x1f9d1;‍&#x1f3eb; 参考题目补充说明 &#x1f9d1;‍&#x1f3eb; 参考题解 迭代法 class Solution {public String countAndSay(int n) {String str "1";for (int i 2; i < n; i) {StringBuilder sb new StringBuild…...

文心一言4月起全面免费,6月底开源新模型:AI竞争进入新阶段?

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、文心一言免费化的背后&#xff1a;AI成本与应用的双重驱动1️⃣成本下降&#xff0c;推动文心一言普及2…...

基于LSTM+前向均值滤波后处理的癫痫发作检测(包含数据集)

引言 癫痫是一种常见的神经系统疾病&#xff0c;患者会经历反复的癫痫发作。早期检测和预警对于改善患者的生活质量至关重要。近年来&#xff0c;深度学习技术&#xff0c;尤其是长短期记忆网络&#xff08;LSTM&#xff09;&#xff0c;在时间序列数据分析中表现出色&#xf…...

Window下Redis的安装和部署详细图文教程(Redis的安装和可视化工具的使用)

文章目录 Redis下载地址&#xff1a;一、zip压缩包方式下载安装 1、下载Redis压缩包2、解压到文件夹3、启动Redis服务4、打开Redis客户端进行连接5、使用一些基础操作来测试 二、msi安装包方式下载安装 1、下载Redis安装包2、进行安装3、进行配置4、启动服务5、测试能否正常工…...

什么是交叉熵

交叉熵 定义公式 针对离散变量x的概率分布 p ( x ) p(x) p(x) , q ( x ) q(x) q(x) x 1 x_1 x1​ x 2 x_2 x2​ x 3 x_3 x3​ x 4 x_4 x4​… x n x_n xn​p( x 1 x_1 x1​)p( x 2 x_2 x2​)p( x 3 x_3 x3​)p( x 4 x_4 x4​)…p( x n x_n xn​)q( x 1 x_1 x1​)q( x 2 x_2 …...

虚拟机安装k8s集群

环境准备 - 主节点&#xff08;Master Node&#xff09;: IP地址: 192.168.40.100主机名: k8s-master - 工作节点&#xff08;Worker Node&#xff09;: IP地址: 192.168.40.101主机名: k8s-node1 步骤 1: 配置虚拟机环境 1.1 设置主机名 在每台虚拟机上设置唯一的主机名…...

【mysql部署】在ubuntu22.04上安装和配置mysql教程

一.安装mysql 1. 更新软件包列表: sudo apt-get update2.安装 MySQL 服务器&#xff1a; sudo apt-get install mysql-server3.设置 MySQL 安全性&#xff1a; sudo mysql_secure_installation按照提示输入相关问题的回答&#xff0c;例如删除匿名用户、禁止 root 远程登录…...

机器学习实战(3):线性回归——预测连续变量

第3集&#xff1a;线性回归——预测连续变量 在机器学习的世界中&#xff0c;线性回归是最基础、最直观的算法之一。它用于解决回归问题&#xff0c;即预测连续变量&#xff08;如房价、销售额等&#xff09;。尽管简单&#xff0c;但线性回归却是许多复杂模型的基石。今天我们…...

烧结银在 DeepSeek 中的关键作用与应用前景

烧结银在 DeepSeek 中的关键作用与应用前景 在科技飞速发展的当下&#xff0c;DeepSeek 作为前沿科技领域的重要参与者&#xff0c;正以其独特的技术和创新的应用&#xff0c;在众多行业掀起变革的浪潮。而在 DeepSeek 的核心技术体系中&#xff0c;烧结银这一材料的应用&#…...

C++效率掌握之STL库:string底层剖析

文章目录 1.学习string底层的必要性2.string类对象基本函数实现3.string类对象的遍历4.string类对象的扩容追加5.string类对象的插入、删除6.string类对象的查找、提取、大小调整7.string类对象的流输出、流提取希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力…...

计算机组成原理—— 总线系统(十一)

在追求梦想的旅途中&#xff0c;我们常常会遇到崎岖的道路和难以预料的风暴。然而&#xff0c;正是这些挑战塑造了我们的坚韧和毅力&#xff0c;使我们能够超越自我&#xff0c;触及那些看似遥不可及的目标。不要因为一时的困境而气馁&#xff0c;也不要因为他人的质疑而动摇自…...

电子制造企业数字化转型实战:基于Odoo构建MES平台的深度解决方案

作者背景 拥有8年乙方项目经理经验、8年甲方信息化管理经验&#xff0c;主导过12个Odoo制造业项目落地&#xff0c;服务客户涵盖消费电子、汽车电子、工业设备等领域。本文基于华东某电子企业&#xff08;以下简称"A公司"&#xff09;的实战案例&#xff0c;解析行业…...

【Python爬虫(4)】揭开Python爬虫的神秘面纱:基础概念全解析

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…...

kafka为什么这么快?

前言 Kafka的高效有几个关键点&#xff0c;首先是顺序读写。磁盘的顺序访问速度其实很快&#xff0c;甚至比内存的随机访问还要快。Kafka在设计上利用了这一点&#xff0c;将消息顺序写入日志文件&#xff0c;这样减少了磁盘寻道的时间&#xff0c;提高了吞吐量。与传统数据库的…...

书籍推荐:《书法课》林曦

记得樊登老师说过&#xff0c;如果你想了解一个事物&#xff0c;就去读5本相关的书&#xff0c;你会比大部分人都更了解它。这是我读的第4本和“书法”有关的书&#xff0c;作为一个零基础的成年人&#xff0c;林曦这本《书法课》非常值得一读。&#xff08;无论你是否写字&…...

位图(C语言版)

文章目录 位图模型基本操作实现代码运行结果 应用存储只有两种状态的数据排序并去重 位图 模型 位图是“位”的数组。 为什么需要构建一个专门的数据结构来表示位的数组&#xff1f;&#xff1a;因为计算机最小的寻址单位是字节&#xff0c;而不是位。 位图是一种内存紧凑的…...

使用C#元组实现列表分组汇总拼接字段

文章目录 使用C#元组实现列表分组汇总拼接字段代码运行结果 使用C#元组实现列表分组汇总拼接字段 代码 string message string.empty; var tupleList new List<Tuple<string, string, string>>(); tupleList.Add(new Tuple<string, string, string>("…...