深度学习框架探秘|Keras 应用案例解析以及 Keras vs TensorFlow vs PyTorch
引言
上一篇文章《深度学习框架探秘|Keras:深度学习的魔法钥匙》 我们初步学习了 Keras,包括它是什么、具备哪些优势(简洁易用的 API、强大的兼容性、广泛的应用领域),以及基本使用方法。本文,我将会带大家了解 Keras 在图像处理与自然语言处理领域的应用案例。以及 Keras 和 TensorFlow 及 PyTorch 的对比。话不多说,下面我们先从 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 并非独自闪耀,还有许多其他优秀的框架,如 TensorFlow、PyTorch 等,它们各自散发着独特的光芒,在不同的场景中发挥着重要作用。接下来,让我们一同深入对比 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
引言 上一篇文章《深度学习框架探秘|Keras:深度学习的魔法钥匙》 我们初步学习了 Keras,包括它是什么、具备哪些优势(简洁易用的 API、强大的兼容性、广泛的应用领域),以及基本使用方法。本文,…...
VINS-mono代码笔记
feature_tracker_node.cpp: 一、通过roslaunch文件的参数服务器获得配置参数 二、获得相机的内参 三、订阅图像,img_callback: 1、第一帧图像只记录时间戳 2、与之前时间戳比较一下,判断是否要发布当前帧,避免高频率发送ÿ…...
Maven下载安装IDEA使用MavenJava在pom.xml配置教程
一、Maven 简介 Maven 是一个强大的项目管理和构建工具,主要用于 Java 项目的构建、依赖管理和文档生成等。它通过一个统一的 XML 文件(pom.xml)来管理项目的整个生命周期,包括编译、测试、打包、发布等环节。 二、Maven 下载与…...
NAT(网络地址转换)技术详解:网络安全渗透测试中的关键应用与防御策略
目录 NAT的作用 NAT类型 NAT工作流程示例 NAT 转换技术的原理 源地址转换(SNAT,Source NAT): 目标地址转换(DNAT,Destination NAT): 端口地址转换(PAT,…...
newgrp docker需要每次刷新问题
每次都需要运行 newgrp docker 的原因: 当用户被添加到 docker 组后,当前会话并不会立即更新组信息,因此需要通过 newgrp docker 切换到新的用户组以使权限生效 如果不想每次都手动运行 newgrp docker,可以在终端中配置一个自动刷新的脚本。…...
【FastAPI 使用FastAPI和uvicorn来同时运行HTTP和HTTPS的Python应用程序】
在本文中,我们将介绍如何使用 FastAPI和uvicorn来同时运行HTTP和HTTPS的 Python应用程序。 简介 FastAPI是一个高性能的Web框架,可以用于构建快速、可靠的API。它基于Python的类型提示和异步支持,使得开发者可以轻松地编写出安全且高效的代…...
容器化部署Kafka的最佳实践:基于KRaft模式的无ZooKeeper方案
一、docker 部署kafka单节点 1.1安装docker 可以参考这篇CentOS 7安装docker并配置镜像加速 1.3 运行kafka(注意修改zookeeper,kafka地址) docker run -d --name kafka -e KAFKA_ADVERTISED_LISTENERSPLAINTEXT://172.16.10.180:9092 -p …...
20250214 随笔 线程安全 线程不安全
1. 什么是线程安全 & 线程不安全? 线程安全(Thread-Safe):在多线程环境下访问同一个对象时,不会产生数据竞争、不会出现数据不一致的问题。线程不安全(Not Thread-Safe):在多线…...
rem、em、vw区别
在前端开发里,rem、em、vw都是用来设置元素大小的单位,下面就用大白话讲讲它们的区别。 参考标准不一样 rem:就像大家都用同一把“大尺子”来量东西,这把“大尺子”就是网页里根元素(也就是 <html> 标签&#…...
【PHP】php+mysql 活动信息管理系统(源码+论文+数据库+数据库文件)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【PHP】php 活动信息管理系统(源码论文…...
cURL请求与Javascript请求转换工具
cURL请求与Javascript请求在线转换工具(如 curlconverter) 首先,看看各个证据中关于curl的定义。提到cURL是“Client for URLs”的缩写,最初全大写是为了方便记忆,社区也将其解释为“Client URL Request Library”或递归的“Curl URL Request Library”。同时,还指出cURL…...
rv1103b编译opencv
opencv-3.4.16,png的neon会报错,如果想开可以参考 https://blog.csdn.net/m0_60827485/article/details/137561429 rm -rf build mkdir build cd build cmake -DCMAKE_BUILD_TYPERELEASE \ -DCMAKE_C_COMPILERxxx/arm-rockchip831-linux-uclibcgnueabih…...
thingboard告警信息格式美化
原始报警json内容: { "severity": "CRITICAL","acknowledged": false,"cleared": false,"assigneeId": null,"startTs": 1739801102349,"endTs": 1739801102349,"ackTs": 0,&quo…...
OpenHarmonry 5.0.1源码下载与编译
预置环境:硬盘500G、内存32G、Ubuntu 20.04.6 LTS Ubuntu系统下载路径:ubuntu-releases安装包下载_开源镜像站-阿里云 一、必需环境 sudo apt-get update && sudo apt-get install binutils binutils-dev git git-lfs gnupg flex bison gperf…...
【Python深入浅出㊸】解锁Python3中的TensorFlow:开启深度学习之旅
目录 一、TensorFlow 简介1.1 定义与背景1.2 特点 二、Python 3 与 TensorFlow 的关系2.1 版本对应2.2 为何选择 Python 3 三、安装 TensorFlow3.1 安装步骤3.2 验证安装 四、TensorFlow 基本概念与使用方法4.1 计算图(Graph)4.2 会话(Sessio…...
STM32 外部中断和NVIC嵌套中断向量控制器
目录 背景 外部中断/事件控制器(EXTI) 主要特性 功能说明 外部中断线 嵌套向量中断控制器 特性 中断线(Interrupt Line) 中断线的定义和作用 STM32中断线的分类和数量 优先级分组 抢占优先级(Preemption Priority) …...
string类详解(上)
文章目录 目录1. STL简介1.1 什么是STL1.2 STL的版本1.3 STL的六大组件 2. 为什么学习string类3. 标准库中的string类3.1 string类3.2 string类的常用接口说明 目录 STL简介为什么学习string类标准库中的string类string类的模拟实现现代版写法的String类写时拷贝 1. STL简介 …...
DeepSeek教unity------Dotween
1、命名法 Tweener(补间器):一种控制某个值并对其进行动画处理的补间。 Sequence(序列):一种特殊的补间,它不直接控制某个值,而是控制其他补间并将它们作为一个组进行动画处理。 Tw…...
AIP-146 泛化域
编号146原文链接AIP-146: Generic fields状态批准创建日期2019-05-28更新日期2019-05-28 API中的大多数域,无论是在请求、资源还是自定义应答中,都有具体的类型或模式。这个模式是约定的一部分,开发者依此约定进行编码。 然而,偶…...
【Go并发编程】Goroutine 调度器揭秘:从 GMP 模型到 Work Stealing 算法
每天一篇Go语言干货,从核心到百万并发实战,快来关注魔法小匠,一起探索Go语言的无限可能! 在 Go 语言中,Goroutine 是一种轻量级的并发执行单元,它使得并发编程变得简单高效。而 Goroutine 的高效调度机制是…...
【前端】Vue组件库之Element: 一个现代化的 UI 组件库
文章目录 前言一、官网1、官网主页2、设计原则3、导航4、组件 二、核心功能:开箱即用的组件生态1、丰富的组件体系2、特色功能亮点 三、快速上手:三步开启组件化开发1、安装(使用Vue 3)2、全局引入3、按需导入(推荐&am…...
第十五天 学习并实践HarmonyOS应用的基本结构、页面导航和状态管理
HarmonyOS应用开发入门:从基本结构到状态管理实战指南 前言 (约300字,说明HarmonyOS的发展前景,应用开发的市场需求,以及本教程的核心价值。强调手把手教学特点,降低学习门槛) 一、HarmonyOS应…...
Cursor生成JAVA相关的关键词提示规则
在项目根目录创建一个.curstorrules文件(注意有个小数点),之后在该文件内填入下面内容 你是 Java 编程、Spring Boot、Spring Framework、Maven、JUnit 及相关 Java 技术的专家。 代码风格与结构 编写整洁、高效且文档完善的 Java 代码&am…...
数据结构:队列(Queue)及其实现
队列(Queue)是一种广泛使用的线性数据结构,它遵循先进先出(FIFO,First In, First Out)的原则。也就是说,最早插入队列的元素会最先被移除。队列是一种典型的顺序存取结构,它与栈&…...
MoE架构中的专家选择门控机制:稀疏激活如何实现百倍效率突破?
技术原理(数学公式与核心逻辑) 核心公式 门控网络输出: G ( x ) Softmax ( W g ⋅ x b g ) G(x) \text{Softmax}(W_g \cdot x b_g) G(x)Softmax(Wg⋅xbg) 最终输出: y ∑ i 1 n G i ( x ) ⋅ E i ( x ) (仅保留Top-…...
坐井说天阔---DeepSeek-R1
前言 DeepSeek-R1这么火,虽然网上很多介绍和解读,但听人家的总不如自己去看看原论文。于是花了大概一周的时间,下班后有进入了研究生的状态---读论文。 DeepSeek这次的目标是探索在没有任何监督数据的情况下训练具有推理能力的大模型&#…...
UART(一)——UART基础
一、定义 UART(Universal Asynchronous Receiver/Transmitter)是一种广泛使用的串行通信协议,用于在设备间通过异步方式传输数据。它无需共享时钟信号,而是依赖双方预先约定的参数(如波特率)完成通信。 功能和特点 基本的 UART 系统只需三个信号即可提供稳健的中速全双工…...
DeepSeek 的创新融合:多行业应用实践探索
引言 在数字化转型的浪潮中,技术的融合与创新成为推动各行业发展的关键力量。蓝耘平台作为行业内备受瞩目的创新平台,以其强大的资源整合能力和灵活的架构,为企业提供了高效的服务支持。而 DeepSeek 凭借先进的人工智能技术,在自然…...
C语言中的常量与只读变量,#define与const的区别
#include中的#表明C处理器需要在编译器接手工作之前先处理这条指令。 #define 这条定义宏的语句,是不是很熟悉,这条预处理指令会在编译器编译前把源文件中使用到这个宏的地方都先展开。 #define NUM 12 这个定义了一个宏常量,它的处理发生编…...
Python常见面试题的详解6
1. 按字典 value 值排序 要点:对于给定字典,使用 sorted() 函数结合 items() 方法,依据 value 进行排序,也可以定义一个通用函数,支持按 value 升序或降序排序。示例: python d {a: 1, b: 2, c: 3, d: …...
