机器学习框架巅峰对决:TensorFlow vs. PyTorch vs. Scikit-Learn实战分析
1.引言
1.1机器学习框架的重要性
在机器学习的黄金时代,框架的选择对于开发高效、可扩展的模型至关重要。合适的框架可以极大地提高开发效率,简化模型的构建和训练过程,并支持大规模的模型部署。因此,了解和选择最合适的机器学习框架对于研究人员和工程师来说是一个关键的步骤。
1.2三大框架概览:TensorFlow、PyTorch、Scikit-Learn
目前,最流行的机器学习框架主要有TensorFlow、PyTorch和Scikit-Learn。每个框架都有其独特的特点和优势,适用于不同类型的机器学习任务。
-
TensorFlow:由Google开发,是一个开源的软件库,用于数据流编程,广泛应用于大规模的机器学习任务,特别是深度学习。TensorFlow提供了灵活的架构和大量的预先训练的模型,适用于复杂的模型设计和训练。
-
PyTorch:由Facebook开发,同样是一个开源的深度学习框架。PyTorch以其动态计算图和易于使用的界面而受到研究人员的喜爱,这使得它在学术研究和快速原型设计中非常流行。
-
Scikit-Learn:是一个开源的机器学习库,适用于各种机器学习任务,特别是在简单的数据集和传统的机器学习算法上表现出色。Scikit-Learn的API简洁明了,易于理解和实现,是机器学习领域的经典选择。
2. TensorFlow深度剖析
2.1 TensorFlow简介与核心特性
TensorFlow是由Google的研究团队为了进行机器学习和深度神经网络研究而开发的开源库,后来被广泛应用于各种不同的领域,具体包括语音识别、计算机视觉、自然语言处理等。TensorFlow提供了一个全面的、灵活的生态系统,包括各种工具、库和社区资源,让研究人员能够将理论转化为实践,同时让开发者能够轻松构建和部署机器学习应用。
核心特性包括:
- 灵活性和可扩展性:TensorFlow支持多种深度学习模型和算法的实现,用户不仅可以使用预建的模型和层,还可以自定义操作,实现各种复杂的算法结构。
- 跨平台:TensorFlow支持GPU和TPU加速,可在多种平台上运行,包括桌面、服务器和移动设备。
- 强大的可视化工具(TensorBoard):TensorBoard让用户能够可视化模型的图结构和训练过程中的各种指标,帮助调试程序和优化性能。
- 大规模支持与性能:TensorFlow能够支持大量的数据和复杂的计算,它被设计用来在多种设备上高效地进行分布式计算。
2.2 代码实例:使用TensorFlow构建和训练一个简单的神经网络
以下是使用TensorFlow构建和训练一个简单的神经网络的示例代码。这个例子中,将构建一个用于分类的简单多层感知机模型。
import tensorflow as tf# 创建模型
model = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)), # 输入层,28*28的图像平铺成784维的向量tf.keras.layers.Dense(128, activation='relu'), # 隐藏层,128个节点tf.keras.layers.Dropout(0.2), # Dropout层,防止过拟合tf.keras.layers.Dense(10, activation='softmax') # 输出层,10个节点,对应10个类别
])# 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 准备数据
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0# 训练模型
model.fit(x_train, y_train, epochs=5)# 评估模型
model.evaluate(x_test, y_test)
2.3 TensorFlow的优缺点分析
优点:
- 生态系统全面:TensorFlow拥有广泛的社区支持和丰富的学习资源,使得入门和应用都非常便利。
- 性能优异:支持多种硬件加速,优化了大规模的机器学习任务。
- 模型部署:提供了多种工具,可以轻松地将模型部署到多种平台和设备上。
缺点:
- 学习曲线:对初学者来说,TensorFlow的复杂性可能是一个挑战,尤其是在构建复杂模型和理解底层数据流时。
- 重构频繁:随着新版本的发布,过去的一些API和功能可能会变得不兼容,需要用户不断更新学习。
- 运行效率问题:尽管有广泛的优化,但在某些情况下,如小规模模型训练时,其性能可能不如其他框架。
3. PyTorch深度剖析
3.1 PyTorch简介与核心特性
PyTorch 是一个由 Facebook 的 AI 研究团队开发的开源机器学习库,广泛应用于计算机视觉和自然语言处理等领域。它以 Python 为首选语言,并支持 CUDA 加速,使其在执行深度学习模型时效率极高。
核心特性包括:
- 动态计算图(Dynamic Computation Graphs): PyTorch 的一个显著特点是其动态计算图,即 Autograd 系统。这使得模型可以在运行时改变行为,非常适合于具有条件依赖的复杂模型结构。
- 易于使用的 API: PyTorch 提供了简洁明了的 API,它模仿了 NumPy 的使用方式,使得用户能够轻松上手并进行快速的原型设计。
- 强大的社区支持和丰富的生态系统: 由于其开源性和广泛的应用,PyTorch 拥有一个非常活跃的社区,并且有大量的预训练模型和工具可供使用。
- 原生的 ONNX 支持: 开放式神经网络交换格式(ONNX)支持使得 PyTorch 训练的模型可以被转换到其他框架中去,提高了模型的可移植性。
3.2 代码实例:使用PyTorch构建和训练一个简单的神经网络
为了展示 PyTorch 的实际应用,以下是一个构建和训练简单神经网络的例子,该网络旨在从手写数字数据集(MNIST)中识别数字。
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms# 数据加载与预处理
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
train_data = datasets.MNIST(root='data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_data, batch_size=64, shuffle=True)# 神经网络结构定义
class SimpleNet(nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc1 = nn.Linear(28*28, 128)self.fc2 = nn.Linear(128, 64)self.fc3 = nn.Linear(64, 10)def forward(self, x):x = x.view(x.shape[0], -1)x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))x = self.fc3(x)return x# 实例化网络,定义损失函数和优化器
model = SimpleNet()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)# 训练过程
for epoch in range(10):for images, labels in train_loader:outputs = model(images)loss = criterion(outputs, labels)optimizer.zero_grad()loss.backward()optimizer.step()print(f'Epoch {epoch+1}, Loss: {loss.item()}')# 测试模型省略...
3.3 PyTorch的优缺点分析
优点:
- 灵活性高: 由于其动态图的特性,PyTorch 在研究中非常受欢迎,允许研究人员轻松实验新想法。
- 直观的界面: 其接口清晰易懂,学习曲线平缓,有助于快速开发和迭代模型。
- 强大的 GPU 加速: PyTorch 提供了非常优秀的 CUDA 集成,可以显著提升模型训练和推理的速度。
缺点:
- 资源消耗大: 动态图虽然灵活,但在某些情况下会消耗更多计算资源。
- 模型部署复杂: 相比于 TensorFlow,PyTorch 在模型部署方面可能略显复杂,尤其是在移动和嵌入式设备上。
- 文档和示例有待提高: 尽管社区活跃,但一些高级功能的文档和示例仍有改善空间。
4. Scikit-Learn深度剖析
4.1 Scikit-Learn简介与核心特性
Scikit-Learn是一个广泛使用的Python机器学习库,其设计目的是为了提供一个简单且高效的工具,用于数据挖掘和数据分析。由于其易用性和丰富的库支持,Scikit-Learn已成为入门级机器学习应用的首选。
核心特性包括:
- 简洁的API:Scikit-Learn提供了一致的接口,使得模型训练、预测和评估变得非常直观。
- 广泛的算法支持:从基本的线性模型到复杂的聚类算法,Scikit-Learn几乎支持所有常见的机器学习算法。
- 强大的文档和社区支持:详尽的文档和活跃的开源社区是Scikit-Learn成功的关键因素之一。
- 集成与兼容性:可以轻松与其他流行的Python库如NumPy和Pandas集成,同时支持多种数据输入类型。
4.2 代码实例:使用Scikit-Learn进行数据预处理和模型训练
这里,将展示如何使用Scikit-Learn进行数据预处理,并训练一个简单的线性回归模型。
步骤 1:数据预处理
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import pandas as pd# 示例数据
data = {'Age': [25, 27, 29, 32, 33],'Salary': [50000, 54000, 61000, 68000, 72000]
}
df = pd.DataFrame(data)# 数据分割
X_train, X_test, y_train, y_test = train_test_split(df[['Age']], df['Salary'], test_size=0.2, random_state=0)# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
步骤 2:模型训练
from sklearn.linear_model import LinearRegression# 创建线性回归模型
model = LinearRegression()
model.fit(X_train_scaled, y_train)# 预测
predictions = model.predict(X_test_scaled)
print(predictions)
4.3 Scikit-Learn的优缺点分析
优点:
- 易于上手:适合初学者快速入门,学习曲线平缓。
- 高效的数据处理能力:内部使用NumPy和SciPy进行数据处理,提高了处理速度和效率。
- 良好的文档和教程:提供了大量示例代码和详细教程,便于学习和参考。
缺点:
- 可扩展性问题:对于大规模数据集或复杂的模型训练,Scikit-Learn的表现可能不如TensorFlow或PyTorch。
- 深度学习支持有限:虽然Scikit-Learn支持一些基本的神经网络模型,但与专为深度学习设计的框架相比,功能较为有限。
- 模型更新速度:相较于其他快速发展的机器学习框架,Scikit-Learn的更新速度和算法的最新进展跟进不够快。
5. 实战对比:三大框架在同一任务上的表现
5.1 任务描述:图像分类
在本节中,将使用CIFAR-10数据集来比较TensorFlow、PyTorch和Scikit-Learn在图像分类任务上的表现。CIFAR-10是一个包含60,000张32x32彩色图像的数据集,分为10个类别,每个类别有600张训练图像和100张测试图像。
5.2 代码实例:TensorFlow、PyTorch、Scikit-Learn分别实现图像分类任务
我将分别使用TensorFlow、PyTorch和Scikit-Learn来实现一个简单的图像分类模型,并评估它们的性能。
TensorFlow 实现:
import tensorflow as tf
from tensorflow.keras.layers import Dense, Conv2D, Flatten, MaxPooling2D
from tensorflow.keras.models import Sequential
from tensorflow.keras.datasets import cifar10# 加载数据
(x_train, y_train), (x_test, y_test) = cifar10.load_data()# 预处理数据
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0# 定义模型
model = Sequential([Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),MaxPooling2D(2, 2),Conv2D(64, (3, 3), activation='relu'),MaxPooling2D(2, 2),Flatten(),Dense(128, activation='relu'),Dense(10, activation='softmax')
])# 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 训练模型
model.fit(x_train, y_train, epochs=10, batch_size=64, validation_data=(x_test, y_test))# 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f'Test accuracy: {test_acc:.4f}')
PyTorch 实现:
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms# 数据加载与预处理
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
train_dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
test_dataset = datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)# 定义模型
class SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(3, 32, 3, padding=1)self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(32, 64, 3, padding=1)self.fc1 = nn.Linear(64 * 8 * 8, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = self.pool(F.relu(self.conv1(x)))x = self.pool(F.relu(self.conv2(x)))x = x.view(-1, 64 * 8 * 8)x = F.relu(self.fc1(x))x = self.fc2(x)return x# 实例化模型和优化器
model = SimpleCNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)# 训练模型
for epoch in range(10):running_loss = 0.0for images, labels in train_loader:optimizer.zero_grad()outputs = model(images)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()print(f'Epoch {epoch+1}, Loss: {running_loss/len(train_loader)}')# 测试模型省略...
Scikit-Learn 实现:
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score# 加载数据
X, y = fetch_openml('cifar10_reduced', version=1, return_X_y=True)# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train.astype('float32'))
X_test_scaled = scaler.transform(X_test.astype('float32'))# 创建神经网络模型
mlp = MLPClassifier(hidden_layer_sizes=(100, 50), max_iter=1000, alpha=0.0001, solver='adam', random_state=1)# 训练模型
mlp.fit(X_train_scaled, y_train)# 预测
predictions = mlp.predict(X_test_scaled)
test_accuracy = accuracy_score(y_test, predictions)
print(f'Test accuracy: {test_accuracy:.4f}')
5.3 性能对比与分析
在执行上述代码后,可以得到三个框架在图像分类任务上的测试精度。通常,TensorFlow和PyTorch的性能会比Scikit-Learn更好,因为它们专为深度学习设计,而Scikit-Learn在处理大规模深度学习任务时可能会有性能瓶颈。
TensorFlow vs. PyTorch:
在大多数情况下,TensorFlow和PyTorch在深度学习任务上的性能相近,因为它们都提供了高效的GPU和TPU支持。然而,PyTorch的动态计算图特性可能使其在某些特定情况下表现更好,尤其是在实验新算法时。
TensorFlow/PyTorch vs. Scikit-Learn:
Scikit-Learn在处理传统的机器学习任务时表现出色,但在深度学习任务上可能不如TensorFlow和PyTorch。这是因为Scikit-Learn不是专门为深度学习设计的,尽管它提供了MLPClassifier来支持神经网络模型。
6. 框架选择指南
6.1 根据项目需求选择合适的框架
选择机器学习框架时,应考虑项目的具体需求、数据集大小、算法的复杂性、团队的经验以及部署目标等因素。以下是根据不同需求选择合适框架的建议:
-
初学者或传统机器学习任务:
- 选择Scikit-Learn,因为其API简单直观,适合快速原型设计和入门学习。
-
深度学习研究:
- 选择PyTorch,因为它提供了更多的灵活性和动态计算图,适合实验和原型设计。
- TensorFlow也是一个不错的选择,特别是对于大规模部署和生产环境。
-
生产部署:
- TensorFlow和PyTorch都提供了强大的部署工具,但TensorFlow可能在这方面略占优势,因为它提供了更多的预训练模型和工具。
-
大规模数据集和分布式计算:
- TensorFlow提供了更多的分布式计算选项,如Keras和TFX,适合大规模数据处理和训练。
-
移动和嵌入式设备:
- PyTorch提供了TorchScript,使得模型可以部署到移动和嵌入式设备上,而TensorFlow Lite也提供了类似的选项。
-
跨平台支持:
- PyTorch在跨平台支持方面做得更好,可以在Windows、Linux和Mac OS上无缝运行。
6.2 框架的未来趋势与社区支持
-
TensorFlow:
- TensorFlow仍然是一个强大的选择,特别是对于大规模部署和生产环境。
- 社区支持非常活跃,有大量的预训练模型和工具可供使用。
- TensorFlow 2.x版本更加注重易用性和灵活性,提供了Keras的高层API,使得模型构建更加简单。
-
PyTorch:
- PyTorch因其动态计算图和强大的社区支持而迅速成为研究人员的首选。
- 社区活跃,不断有新的研究和工具发布。
- PyTorch 1.x版本提供了更多的优化和性能改进,使得其在生产环境中的应用更加广泛。
-
Scikit-Learn:
- Scikit-Learn在传统机器学习任务上仍然非常强大,但由于其核心库相对稳定,新算法的集成速度较慢。
- 社区支持仍然非常活跃,对于入门级和传统机器学习任务来说,Scikit-Learn是一个很好的选择。
7. 结论
7.1 三大框架的综合评价
通过前面的章节,已经对TensorFlow、PyTorch和Scikit-Learn三大机器学习框架进行了深入的分析和对比。以下是基于这些分析的综合评价:
-
TensorFlow:
- 强大的工业级支持,适合大规模部署和生产环境。
- 丰富的预训练模型和工具,便于集成和部署。
- API设计较为复杂,学习曲线较陡峭。
- 在大规模数据处理和分布式计算方面表现出色。
-
PyTorch:
- 动态计算图特性,适合研究和原型设计。
- API设计直观,易于上手和学习。
- 社区活跃,不断有新的研究和工具发布。
- 在移动和嵌入式设备部署方面具有优势。
-
Scikit-Learn:
- 简洁直观的API,适合入门级机器学习任务。
- 强大的传统机器学习算法支持。
- 跨平台支持良好,易于部署。
- 在深度学习任务上性能有限,扩展性较差。
7.2 对未来机器学习框架发展的展望
随着机器学习技术的不断发展,可以预见到未来的机器学习框架将具有以下特点:
-
更加强大的跨框架集成:
- 未来的框架可能会有更好的互操作性,允许用户在不同的框架之间无缝迁移模型和代码。
-
更加强大的自动化和优化:
- 随着算法的进步,框架将更加智能,自动进行超参数优化和模型选择。
-
更加注重易用性和可视化:
- 未来的框架将更加注重用户体验,提供更加直观的可视化工具和交互式界面。
-
更好的部署和集成能力:
- 随着边缘计算和物联网的兴起,未来的框架将更加注重模型的部署和集成能力,尤其是在移动和嵌入式设备上。
-
更加注重安全和隐私:
- 随着数据隐私法规的日益严格,未来的框架将更加注重数据安全和隐私保护。
总之,未来的机器学习框架将更加智能、灵活和易于使用,同时也将更加注重安全和隐私保护。作为开发者,保持对最新技术动态的关注并不断学习新的技能将是非常重要的。
相关文章:

机器学习框架巅峰对决:TensorFlow vs. PyTorch vs. Scikit-Learn实战分析
1.引言 1.1机器学习框架的重要性 在机器学习的黄金时代,框架的选择对于开发高效、可扩展的模型至关重要。合适的框架可以极大地提高开发效率,简化模型的构建和训练过程,并支持大规模的模型部署。因此,了解和选择最合适的机器学习…...

基于STM32的智能窗帘控制系统
目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家居智能窗帘控制办公室窗帘自动调节常见问题及解决方案 常见问题解决方案结论 1. 引言 智能窗帘控制系统能够通过时间、光照强度或远程控制,实现对…...

【算法】普里姆算法解决修路问题
应用场景——修路问题 1.某地有 7 个村庄(A,B,C,D,E,F,G),现在需要修路把 7 个村庄连通 2.各个村庄的距离用边线表示(权),比如 A - …...
Python 之Scikit-learn(二) -- Scikit-learn标准化数据
在机器学习中,数据标准化是一项关键的预处理步骤。标准化(Standardization)是将数据转换为具有均值为0和标准差为1的分布。这样可以确保特征在相同的尺度上,有助于提升某些机器学习算法的性能和稳定性。 Scikit-learn提供了一个简…...

机械学习—零基础学习日志(python编程)
零基础为了学人工智能,正在艰苦的学习 昨天给高等数学的学习按下暂停键,现在开始学习python编程。 我学习的思路是直接去阿里云的AI学习课堂里面学习。 整体感觉,阿里云的AI课堂还是有一些乱,早期课程和新出内容没有更新和归档…...

WEB应用(十三)---RCE
什么是RCE? Remote Command/Code Execute,远程命令或代码执行。通过构造特殊的字符串,将数据提交至Web应用程序,并利用该方式执行外部程序或系统命令实施攻击,类似于SQL注入。 Web应用程序使用了一些可以执行系统命令或…...
【云原生】Service服务暴露详细
Service服务 文章目录 Service服务一、Service介绍1.1、介绍1.2、Kubernetes中的Service 二、Service服务类型2.1、ClusterIP2.2、NodePort2.3、LadBalancer2.4、ExternalName 三、Service玩法3.1、定义Service3.2、端口定义别名3.3、多端口Service 四、Service类型4.1、Cluste…...
实名认证次数限制
在业务层实现实名认证次数限制 这个功能是通过以下步骤实现实名认证的次数限制: 每日失败尝试次数限制:限制用户每天可以尝试失败的次数。失败后的冷却时间:用户在连续失败几次后需要等待一段时间才能再次尝试。成功认证后的限制࿱…...
【如何在Python中使用pathlib模块】
在Python中使用pathlib模块主要涉及创建Path对象,并利用这些对象提供的方法来执行文件系统的各种操作。以下是一些详细的步骤和示例,帮助你了解如何在Python中有效地使用pathlib模块。 1. 导入Path类 首先,从pathlib模块中导入Path类。 fr…...

sqli-labs第一关详细解答
首先判断是否有注入点 发现and 11 和 and 12结果一样,所以应该是字符型注入,需要对单引号做闭合 做闭合后发现报错,提示Limit 0,1,那就说明存在注入点,但是要注释掉后面的limit 0,1 使用--注释掉limit 0,1后ÿ…...

分布式事务一站式解决方案-Seata
分布式事务一站式解决方案- 分布式事务一站式解决方案分布式事务产生背景三个概念Seata下载和安装实际业务模拟演示不加 GlobalTransactional 注解,正常操作下单不加 GlobalTransactional 注解,下单过程出异常或者超时了加 GlobalTransactional 注解&…...
openwrt 使用ftace工具追踪协议栈转发流程
开这四个宏 CONFIG_KERNEL_DYNAMIC_FTRACEy CONFIG_KERNEL_FTRACEy CONFIG_KERNEL_FUNCTION_GRAPH_TRACERy CONFIG_KERNEL_FUNCTION_TRACERy 如果/sys/kernel/debug/tracing没有,可以挂载 mount -t debugfs nodev /sys/kernel/debug 挂载报错: mo…...

ElasticSearch优化实战:打造高性能搜索引擎的秘籍
在当今这个大数据时代,信息的海量增长对搜索技术提出了前所未有的挑战。用户不仅需要快速准确地从数以亿计的数据中找到所需信息,还希望搜索引擎能够提供个性化和智能化的搜索体验。ElasticSearch作为市场上领先的搜索引擎,因其强大的全文搜索…...

【STL】| C++ 栈和队列(详解、容器适配器的初步引入)
目录 前言 总代码 容器适配器的引入 栈 stack 队列 queue 栈和队列用法简介 栈 队列 deque简介(了解即可) 结语 前言 今天我们要讲解的结构是栈和队列 这两个的具体实现相比于前面我们学的string、vector、list都要简单得多(因为容…...

xss漏洞(二,xss靶场搭建以及简单利用)
本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 一,环境搭建。 使用工具:PHP study,dvwa靶场。 1,GitHub上下载dvwa到PHP study的WWW文件夹内,并解压。 dvwa下载地址 …...

深度学习--------------Kaggle房价预测
目录 下载和缓存数据集访问和读取数据集总代码 数据预处理训练K折交叉验证模型选择总代码提交你的Kaggle预测提交Kaggle 下载和缓存数据集 import hashlib import os import tarfile import zipfile import requests# download传递的参数分别是数据集的名称、缓存文件夹的路径…...
cpio 命令
前言 cpio(Copy In and Out)是一种在类 Unix 操作系统中处理归档文件的多功能工具。与 tar 不同,cpio 有其独特的优势和使用场景,特别是在与其他命令结合使用时。本文将带你了解 cpio 的基础知识、用法及实际示例。 什么是 cpio…...
TreeMap自定义排序
我们都知道TreeMap可以根据key按字典升序排序。但在某些场景下,我们需要自定义排序规则,为了代码优雅一些,我们也希望在stream中groupingBy时自定义排序规则,就可以参考本文的实现。 1. 使用TreeMap默认的排序规则(按…...
我的CSDN 512天创作纪念日-20240807
机缘 在 2023 年 3 月 13 日,我撰写了第一篇技术博客《软考高级-系统分析师-案例分析-系统维护与设计模式》。那一天,我决定将自己的实战项目经验和学习心得记录下来,与更多志同道合的朋友分享。成为一名专业 IT 作者的梦想,促使我…...

微服务-实现nacos的集群和Gateway网关的实现、认证校验、解决跨域
1. nacos的集群模式 1.1 分析 nacos在企业中的使用100%都是集群模式。需要掌握nacos集群的搭建 nacos的数据存放在derby本地磁盘中,nacos集群模式会导致数据库数据不一致,使用加一层思想,修改nacos的数据库,使用mysql数据库&…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...

stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...