AlexNet,LeNet-5,ResNet,VGG-19,VGG-16模型

模型

    • AlexNet
        • 导入必要的库:
        • 加载类别名称:
        • 创建标签映射字典:
        • 加载图像数据和对应的标签:
        • 构建AlexNet模型:
        • 编译模型:
        • 训练模型:
    • LeNet-5
        • 导入必要的库:
        • 加载类别名称:
        • 创建标签映射字典:
        • 加载图像数据和对应的标签:
        • 构建LeNet模型:
        • 编译模型:
    • ResNet
        • 导入必要的库:
        • 加载类别名称:
        • 创建标签映射字典:
        • 加载图像数据和对应的标签:
        • 使用ResNet50模型进行迁移学习
        • 冻结预训练模型的权重:
        • 编译模型:
        • 训练模型:
    • VGG-19
        • 导入必要的库:
        • 加载类别名称
        • 创建标签映射字典:
        • 加载图像数据和对应的标签:
        • 使用VGG-19模型进行迁移学习
        • 冻结预训练模型的权重:
        • 编译模型:
        • 训练模型:
    • VGG-16
        • 导入必要的库:
        • 加载类别名称
        • 创建标签映射字典:
        • 加载图像数据和对应的标签:
        • 使用VGG-16模型进行迁移学习
        • 冻结预训练模型的权重:
        • 编译模型:
        • 训练模型:

本篇博客的图像和标签数据集就是之前自己训练的
博客地址:
https://blog.csdn.net/2301_76794217/article/details/139215356?spm=1001.2014.3001.5502
数据集地址:
https://download.csdn.net/download/2301_76794217/89359353?spm=1001.2101.3001.9500

AlexNet

提出时间:2012年
主要贡献:AlexNet是第一个在ImageNet竞赛中取得显著成绩的深度卷积神经网络,它引入了许多后来被广泛采用的技术,如局部响应归一化(LRN)、ReLU激活函数、使用GPU进行并行计算等。
结构特点:AlexNet包含5个卷积层、3个全连接层和两个用于防止过拟合的dropout层。它使用了大量的数据增强技术,包括随机裁剪、随机缩放、随机水平翻转等。
大小:大约2500万个参数 层数:5层卷积层,3层全连接层 特点:使用ReLU激活函数、LRN层、重叠池化、多尺度特征提取等

导入必要的库:

os:用于操作文件和目录。
cv2:OpenCV库,用于图像处理。
numpy:用于数值计算。
tensorflow:用于构建和训练深度学习模型。
tensorflow.keras.layers:Keras层,用于构建神经网络。
tensorflow.keras.models:Keras模型,用于创建模型架构。

import os
import cv2
import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, ZeroPadding2D
from tensorflow.keras.models import Sequential
加载类别名称:

打开classes.txt文件,读取其中的类别名称,并存储在classes列表中。

with open('99/classes.txt', 'r') as f:classes = f.read().splitlines()
创建标签映射字典:

label_mapping字典将数字标签映射到对应的情绪名称。

label_mapping = {'0': 'sad','1': 'happy','2': 'amazed','3': 'anger'
}
加载图像数据和对应的标签:

遍历image_folder中的所有图像文件。
读取图像,将其调整为AlexNet所需的输入大小(227x227像素),并将其添加到X_train列表。
读取与图像对应的标签文件(.txt格式),提取标签索引,将其映射到情绪名称,然后转换为数字标签,并添加到y_train列表。
将X_train和y_train转换为NumPy数组,并对图像数据进行归一化处理。

image_folder = '561'
label_folder = '99'X_train = []
y_train = []for image_file in os.listdir(image_folder):image_path = os.path.join(image_folder, image_file)image = cv2.imread(image_path)if image is not None:image = cv2.resize(image, (227, 227))  # AlexNet输入图像大小为227x227X_train.append(image)label_file = os.path.join(label_folder, image_file.replace('.jpg', '.txt'))with open(label_file, 'r') as f:label_index = f.readline().strip().split()[0]  # 只取第一个数字作为标签索引label_name = label_mapping[label_index]label = classes.index(label_name)y_train.append(label)X_train = np.array(X_train) / 255.0  # 归一化图像数据
y_train = np.array(y_train)
构建AlexNet模型:

使用Keras的Sequential模型,按照AlexNet的结构添加层。
模型包括卷积层(Conv2D)、最大池化层(MaxPooling2D)、全连接层(Dense)、dropout层(Dropout)等。
输出层使用softmax激活函数,因为这是一个多分类问题。

model = Sequential()
model.add(ZeroPadding2D((1, 1), input_shape=(227, 227, 3)))
model.add(Conv2D(96, (11, 11), strides=(4, 4), activation='relu'))
model.add(MaxPooling2D((3, 3), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(256, (5, 5), activation='relu'))
model.add(MaxPooling2D((3, 3), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(384, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(384, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(256, (3, 3), activation='relu'))
model.add(MaxPooling2D((3, 3), strides=(2, 2)))
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(len(classes), activation='softmax'))
编译模型:

使用Adam优化器、稀疏分类交叉熵损失函数(因为标签是整数),并监控准确率。

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
训练模型:

使用fit方法训练模型,指定训练数据、迭代次数(epochs)、批量大小(batch_size)。

model.fit(X_train, y_train, epochs=20, batch_size=32)

在这里插入图片描述

LeNet-5

提出时间:1998年 主要贡献:LeNet-5是由Yann
LeCun提出的,它是第一个在实际中使用的卷积神经网络,主要用于手写数字识别。LeNet-5的设计非常简单,但它在当时的技术条件下取得了很好的效果。
结构特点:LeNet-5包含两个卷积层、两个池化层、三个全连接层和两个输出层。它的设计非常紧凑,只包含6万个参数,这使得它可以在当时的硬件条件下运行。
大小:大约6万个参数 层数:2层卷积层,3层全连接层 特点:非常早期的卷积神经网络,用于手写数字识别,结构简单,参数少。

导入必要的库:

os:用于操作文件和目录。
cv2:OpenCV库,用于图像处理。
numpy:用于数值计算。
tensorflow:用于构建和训练深度学习模型。

import os
import cv2
import numpy as np
import tensorflow as tf
加载类别名称:

打开classes.txt文件,读取其中的类别名称,并存储在classes列表中。

with open('99/classes.txt', 'r') as f:classes = f.read().splitlines()
创建标签映射字典:

label_mapping字典将数字标签映射到对应的情绪名称。

label_mapping = {'0': 'sad','1': 'happy','2': 'amazed','3': 'anger'
}
加载图像数据和对应的标签:

构建LeNet模型:遍历image_folder中的所有图像文件。
读取图像,并将其添加到X_train列表。
读取与图像对应的标签文件(.txt格式),提取标签索引,将其映射到情绪名称,然后转换为数字标签,并添加到y_train列表。
将X_train和y_train转换为NumPy数组。

#加载图像数据和对应的标签
image_folder = '561'
label_folder = '99'X_train = []
y_train = []for image_file in os.listdir(image_folder):image_path = os.path.join(image_folder, image_file)image = cv2.imread(image_path)if image is not None:X_train.append(image)label_file = os.path.join(label_folder, image_file.replace('.jpg', '.txt'))with open(label_file, 'r') as f:label_index = f.readline().strip().split()[0]  # 只取第一个数字作为标签索引label_name = label_mapping[label_index]label = classes.index(label_name)y_train.append(label)X_train = np.array(X_train)
y_train = np.array(y_train)
构建LeNet模型:

使用Keras的Sequential模型,按照LeNet的结构添加层。
模型包括卷积层(Conv2D)、最大池化层(MaxPooling2D)、全连接层(Dense)等。
输出层使用softmax激活函数,因为这是一个多分类问题。

model = tf.keras.Sequential([tf.keras.layers.Conv2D(6, (5, 5), activation='relu', input_shape=(X_train.shape[1:])),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Conv2D(16, (5, 5), activation='relu'),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Flatten(),tf.keras.layers.Dense(120, activation='relu'),tf.keras.layers.Dense(84, activation='relu'),tf.keras.layers.Dense(len(classes), activation='softmax')
])
编译模型:

使用Adam优化器、稀疏分类交叉熵损失函数(因为标签是整数),并监控准确率。

model.fit(X_train, y_train, epochs=20, batch_size=32)

在这里插入图片描述

ResNet

提出时间:2015年 主要贡献:ResNet是第一个引入残差学习的深度网络,它通过引入残差块(Residual
Block)来解决深层网络训练困难的问题,这些残差块包含一个恒等连接,使得网络可以更稳定地训练更深层次的网络。
结构特点:ResNet包含多个残差块,每个残差块包含一个或多个卷积层,这些卷积层可以有不同的大小和数量。ResNet的层数通常比其他网络更深,如ResNet-50、ResNet-101、ResNet-152等。

大小:大约2500万个参数 层数:50层,包括17个残差块 特点:引入了残差学习,可以构建更深层次的网络,解决梯度消失和梯度爆炸问题。

导入必要的库:

os:用于操作文件和目录。
cv2:OpenCV库,用于图像处理。
numpy:用于数值计算。
tensorflow:用于构建和训练深度学习模型。
tensorflow.keras.applications:包含预训练的模型,如ResNet50。
tensorflow.keras.layers:Keras层,用于构建神经网络。
tensorflow.keras.models:Keras模型,用于创建模型架构。

import os
import cv2
import numpy as np
import tensorflow as tf
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.models import Model
加载类别名称:

打开classes.txt文件,读取其中的类别名称,并存储在classes列表中。

with open('99/classes.txt', 'r') as f:classes = f.read().splitlines()
创建标签映射字典:

label_mapping字典将数字标签映射到对应的情绪名称。

label_mapping = {'0': 'sad','1': 'happy','2': 'amazed','3': 'anger'
}
加载图像数据和对应的标签:

遍历image_folder中的所有图像文件。
读取图像,并将其调整为ResNet50所需的输入大小(224x224像素),并将其添加到X_train列表。
读取与图像对应的标签文件(.txt格式),提取标签索引,将其映射到情绪名称,然后转换为数字标签,并添加到y_train列表。

image_folder = '561'
label_folder = '99'X_train = []
y_train = []for image_file in os.listdir(image_folder):image_path = os.path.join(image_folder, image_file)image = cv2.imread(image_path)if image is not None:X_train.append(cv2.resize(image, (224, 224)))  # Resize images to (224, 224)label_file = os.path.join(label_folder, image_file.replace('.jpg', '.txt'))with open(label_file, 'r') as f:label_index = f.readline().strip().split()[0]  # 只取第一个数字作为标签索引label_name = label_mapping[label_index]label = classes.index(label_name)y_train.append(label)X_train = np.array(X_train)
y_train = np.array(y_train)
使用ResNet50模型进行迁移学习

加载预训练的ResNet50模型,但不包括顶部的全连接层。
添加一个全局平均池化层(GlobalAveragePooling2D)和一个全连接层(Dense),用于输出预测。
创建一个新的模型,将ResNet50的输出连接到新的全连接层。

base_model = ResNet50(weights='imagenet', include_top=False)
x = base_model.output
x = GlobalAveragePooling2D()(x)
output = Dense(len(classes), activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=output)
冻结预训练模型的权重:

通过设置base_model.layers中的每个层的trainable属性为False,可以冻结预训练模型的权重,只训练新添加的全连接层。

for layer in base_model.layers:
layer.trainable = False
编译模型:

使用Adam优化器、稀疏分类交叉熵损失函数(因为标签是整数),并监控准确率。

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
训练模型:

使用fit方法训练模型,指定训练数据、迭代次数(epochs)、批量大小(batch_size)。

model.fit(X_train, y_train, epochs=20, batch_size=32)

在这里插入图片描述

VGG-19

提出时间:2014年 主要贡献:VGG-16和VGG-19是由牛津大学的Karen Simonyan和Andrew
Zisserman提出的,它们通过使用非常小的3x3卷积核和大量重复的卷积层来构建深度网络,这使得它们在ImageNet竞赛中取得了很好的成绩。
结构特点:VGG-16包含16个卷积层和3个全连接层,而VGG-19包含19个卷积层和3个全连接层。VGG-16和VGG-19的卷积层都是使用3x3的卷积核,层与层之间使用2x2的最大池化层。

大小:大约1.38亿/1.45亿个参数 层数:16/19层卷积层,3层全连接层
特点:使用小尺寸的3x3卷积核和重复的卷积层,可以提取更丰富的特征。

导入必要的库:

os:用于操作文件和目录。
cv2:OpenCV库,用于图像处理。
numpy:用于数值计算。
tensorflow:用于构建和训练深度学习模型。
tensorflow.keras.applications:包含预训练的模型,如VGG19。
tensorflow.keras.layers:Keras层,用于构建神经网络。
tensorflow.keras.models:Keras模型,用于创建模型架构。

import os
import cv2
import numpy as np
import tensorflow as tf
from tensorflow.keras.applications import VGG19
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.models import Model
加载类别名称

打开classes.txt文件,读取其中的类别名称,并存储在classes列表中。

with open('99/classes.txt', 'r') as f:classes = f.read().splitlines()
创建标签映射字典:

label_mapping字典将数字标签映射到对应的情绪名称。

abel_mapping = {'0': 'sad','1': 'happy','2': 'amazed','3': 'anger'
}
加载图像数据和对应的标签:

遍历image_folder中的所有图像文件。
读取图像,并将其调整为VGG-19所需的输入大小(224x224像素),并将其添加到X_train列表。
读取与图像对应的标签文件(.txt格式),提取标签索引,将其映射到情绪名称,然后转换为数字标签,并添加到y_train列表。
将X_train和y_train转换为NumPy数组。

image_folder = '561'
label_folder = '99'X_train = []
y_train = []for image_file in os.listdir(image_folder):image_path = os.path.join(image_folder, image_file)image = cv2.imread(image_path)if image is not None:X_train.append(cv2.resize(image, (224, 224)))  # Resize images to (224, 224)label_file = os.path.join(label_folder, image_file.replace('.jpg', '.txt'))with open(label_file, 'r') as f:label_index = f.readline().strip().split()[0]  # 只取第一个数字作为标签索引label_name = label_mapping[label_index]label = classes.index(label_name)y_train.append(label)X_train = np.array(X_train)
y_train = np.array(y_train)
使用VGG-19模型进行迁移学习

加载预训练的VGG-19模型,但不包括顶部的全连接层。
添加一个全局平均池化层(GlobalAveragePooling2D)和一个全连接层(Dense),用于输出预测。
创建一个新的模型,将VGG-19的输出连接到新的全连接层。

base_model = VGG19(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = base_model.output
x = GlobalAveragePooling2D()(x)
output = Dense(len(classes), activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=output)
冻结预训练模型的权重:

通过设置base_model.layers中的每个层的trainable属性为False,可以冻结预训练模型的权重,只训练新添加的全连接层。

for layer in base_model.layers:layer.trainable = False
编译模型:

使用Adam优化器、稀疏分类交叉熵损失函数(因为标签是整数),并监控准确率。

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
训练模型:
model.fit(X_train, y_train, epochs=20, batch_size=32)

在这里插入图片描述

VGG-16

导入必要的库:

os:用于操作文件和目录。
cv2:OpenCV库,用于图像处理。
numpy:用于数值计算。
tensorflow:用于构建和训练深度学习模型。
tensorflow.keras.applications:包含预训练的模型。
tensorflow.keras.layers:Keras层,用于构建神经网络。
tensorflow.keras.models:Keras模型,用于创建模型架构。

import os
import cv2
import numpy as np
import tensorflow as tf
from tensorflow.keras.applications import VGG19
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.models import Model
加载类别名称

打开classes.txt文件,读取其中的类别名称,并存储在classes列表中。

with open('99/classes.txt', 'r') as f:classes = f.read().splitlines()
创建标签映射字典:

label_mapping字典将数字标签映射到对应的情绪名称。

abel_mapping = {'0': 'sad','1': 'happy','2': 'amazed','3': 'anger'
}
加载图像数据和对应的标签:

遍历image_folder中的所有图像文件。
读取图像,并将其调整为VGG-16所需的输入大小(224x224像素),并将其添加到X_train列表。
读取与图像对应的标签文件(.txt格式),提取标签索引,将其映射到情绪名称,然后转换为数字标签,并添加到y_train列表。
将X_train和y_train转换为NumPy数组。

image_folder = '561'
label_folder = '99'X_train = []
y_train = []for image_file in os.listdir(image_folder):image_path = os.path.join(image_folder, image_file)image = cv2.imread(image_path)if image is not None:X_train.append(cv2.resize(image, (224, 224)))  # Resize images to (224, 224)label_file = os.path.join(label_folder, image_file.replace('.jpg', '.txt'))with open(label_file, 'r') as f:label_index = f.readline().strip().split()[0]  # 只取第一个数字作为标签索引label_name = label_mapping[label_index]label = classes.index(label_name)y_train.append(label)X_train = np.array(X_train)
y_train = np.array(y_train)
使用VGG-16模型进行迁移学习

加载预训练的VGG-16模型,但不包括顶部的全连接层。
添加一个全局平均池化层(GlobalAveragePooling2D)和一个全连接层(Dense),用于输出预测。
创建一个新的模型,将VGG-16的输出连接到新的全连接层。

base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = base_model.output
x = GlobalAveragePooling2D()(x)
output = Dense(len(classes), activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=output)
冻结预训练模型的权重:

通过设置base_model.layers中的每个层的trainable属性为False,可以冻结预训练模型的权重,只训练新添加的全连接层。

for layer in base_model.layers:
layer.trainable = False
编译模型:

使用Adam优化器、稀疏分类交叉熵损失函数(因为标签是整数),并监控准确率。

训练模型:
model.fit(X_train, y_train, epochs=20, batch_size=32)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/336418.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop概览以及编译hadoop说明

一、Hadoop概述 Hadoop 是一个用于跨计算机集群存储和处理大型数据集的软件框架。它旨在处理大数据,即传统数据库无法有效管理的极其庞大和复杂的数据集。Hadoop不是传统意义上的数据仓库,因为它们的用途不同,架构也不同。Hadoop 是一个跨分布…

在Visual Studio Code和Visual Studio 2022下配置Clang-Format,格式化成Google C++ Style

项目开发要求好的编写代码格式规范,常用的是根据Google C Style Guide 网上查了很多博文,都不太一样有的也跑不起来,通过尝试之后,自己可算折腾好了,整理一下过程 背景: 编译器主要有三部分:前…

Django 里如何使用 sqlite (操作步骤)

在 settings.py 里,已经设定好 sqlite 了 DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,} }必须得设置好app # 在 settings.py 里INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contentt…

科技产业园3D探秘:未来科技之城的奇幻之旅

在数字时代的浪潮中,科技产业园区成为了推动城市经济发展、科技创新的重要引擎。 当我们打开科技产业园的3D可视化模型,仿佛穿越时空,来到了一个充满奇幻色彩的科技世界。在这里,高楼大厦鳞次栉比,绿色植被点缀其间&am…

React(四)memo、useCallback、useMemo Hook

目录 (一)memo API 1.先想一个情景 2.用法 (1)props传入普通数据类型的情况 (2)props传入对象的情况 (3)props传入函数的情况 (4)使用自定义比较函数 3.什么时候使用memo? (二)useMemo Hook 1.用法 2.useMemo实现组件记忆化 3.useMemo实现函数记忆化 …

记录jenkins中解决sqlite3报错的问题

参考博客python系列--Python3 No module named _sqlite3错误 - 知乎 安装sqlite3 2.1 下载sqlite3安装包 官网地址SQLite Download Page 下载安装包:wget https://www.sqlite.org/2024/sqlite-autoconf-3460000.tar.gz 2.2 上传服务器并进行安装 解压:tar -xv…

【运维】Linux 端口管理实用指南,扫描端口占用

在 Linux 系统中,你可以使用以下几种方法来查看当前被占用的端口,并检查 7860 到 7870 之间的端口: 推荐命令: sudo lsof -i :7860-7870方法一:使用 netstat 命令 sudo netstat -tuln | grep :78[6-7][0-9]这个命令…

618手把手教你捡漏服务器

618最全捡漏攻略 捡漏规则1、新人优惠⭐⭐⭐2、教育优惠⭐⭐3、回馈活动⭐️ ECS价格对比新人优惠💝京东云 50/年百度云 60.69/年阿里云 82/年腾讯云 99/年 回馈活动🎁阿里云 教育优惠🏫阿里云腾讯云 hi,好久不见各位,…

Spring Security整合Gitee第三方登录

文章目录 学习链接环境准备1. 搭建基本web应用引入依赖ThirdApp启动类创建index页面application.yml配置访问测试 2. 引入security引入依赖ProjectConfig访问测试 第三方认证简介注册gitee客户端实现1引入依赖application.yml配置文件创建index.html页面启动类InfoControllerPr…

SheetJS V0.17.5 导入 Excel 异常修复 Invalid HTML:could not find<table>

导入 Excel 提示错误&#xff1a;Invalid HTML:could not find<table> 检查源代码 发现 table 属性有回车符 Overview: https://docs.sheetjs.com/docs/ Source: https://git.sheetjs.com/sheetjs/sheetjs/issues The public-facing websites of SheetJS: sheetjs.com…

postman教程-7-文件上传接口

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了postman发送get请求的方法&#xff0c;本小节我们讲解一下postman文件上传接口的请求方法。 postman文件上传的方式大概有两种&#xff0c;一种是form-data类型上传文件&#xff0c;一种是bin…

redis数据类型之Hash,Bitmaps

华子目录 Hash结构图相关命令hexists key fieldhmset key field1 value1 [field2 value2...]hscan key cursor [MATCH pattern] [COUNT count] Bitmaps位图相关命令setbit1. **命令描述**2. **语法**3. **参数限制**4. **内存分配与性能**5. **应用实例**6. **其他相关命令**7.…

stm32学习-CubeIDE使用技巧

1.hex文件生成 右键工程 2.仿真调试 3.常用快捷键 作用快捷键代码提示alt/代码注释/反注释ctrl/ 4.项目复制 复制项目&#xff0c;将ioc文件名改为项目名即可图形化编辑

元宇宙三维互动展厅让体验者进入一个充满奇幻与创意的数字世界

元宇宙数字产品展厅搭建编辑器凭借强大的三维可视化互动功能&#xff0c;为用户带来前所未有的沉浸式数字展览体验。 在元宇宙数字产品展厅搭建编辑器中&#xff0c;用户可以轻松打造逼真的三维展览环境&#xff0c;通过VR虚拟现实技术&#xff0c;仿佛置身于一个充满奇幻与创意…

爬虫案例(读书网)

一.我们还是使用简单的bs4库和lxml&#xff0c;使用xpath&#xff1a; 导入下面的库&#xff1a; import requests from bs4 import BeautifulSoup from lxml import etree 我们可以看见它的div和每个书的div框架&#xff0c;这样会观察会快速提高我们的简单爬取能力。 二.实…

LabVIEW机器设备的振动监测

振动监测是工业和机械维护中重要的一部分&#xff0c;通过检测和分析机械振动&#xff0c;提前发现潜在故障&#xff0c;确保设备的可靠运行。LabVIEW是一种强大的图形化编程环境&#xff0c;非常适合用于振动监测系统的开发和实施。以下从多个角度详细介绍LabVIEW在振动监测中…

拷贝构造、移动构造、拷贝赋值、移动赋值

最近在学习C的拷贝构造函数时发现一个问题&#xff1a;在函数中返回局部的类对象时&#xff0c;并没有调用拷贝构造函数。针对这个问题&#xff0c;查阅了一些资料&#xff0c;这里记录整理一下。 调用拷贝构造函数的三种情况&#xff1a; ① 用一个类去初始化另一个对象时&a…

重学java 51.Collections集合工具类、泛型

"我已不在地坛&#xff0c;地坛在我" —— 《想念地坛》 24.5.28 一、Collections集合工具类 1.概述:集合工具类 2.特点: a.构造私有 b.方法都是静态的 3.使用:类名直接调用 4.方法: static <T> boolean addAll(collection<? super T>c,T... el…

民国漫画杂志《时代漫画》第17期.PDF

时代漫画17.PDF: https://url03.ctfile.com/f/1779803-1248612629-85326d?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络&#xff01;

LVM、磁盘配额

LVM与磁盘配额 一、LVM LVM(逻辑卷管理)&#xff1a;是Linux系统下对硬盘分区的管理机制。 LVM机制适合于管理管理大存储设备。可以动态对硬盘进行扩容。 逻辑上的磁盘&#xff0c;概念上的磁盘&#xff0c;文件系统创建之后不考虑底层的物理磁盘。 若干个磁盘分区或者物理…