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输入图像大小为227x227
        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) / 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)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

程序卡在 B.处什么原因?如何处理?(串口配置无问题,重写putc无问题,但不打印)

文章目录 前提现象:debug:原因总结 前提 为了张流量券多加更一篇,是我2月份遇到的问题的总结,在我的笔记中,一直没发 现象: 已经配置好串口但不打印输出(printf指向串口1 的SR寄存器&#xf…

CentOS下安装SVN客户端及使用方法

一、前言 Subversion(SVN)是一款开源的版本控制系统,它可以帮助开发者追踪和管理代码、文档或其他文件的更改历史。在Linux系统中,特别是在CentOS环境下,安装和使用SVN客户端是日常工作中常见的任务。本文将介绍如何在…

Neovim 配置全面解析(下)

Neovim 配置全面解析(下) 原文:Neovim 配置全面解析(下) - 知乎 (zhihu.com) 环境:Ubuntu 20.04 宿主机:windows (windows terminal)WSL 2 NVIM:v 0.10.0-de…

如何解压忘记了密码的加密zip压缩包?这两个方法收藏好!

加密是一种保护信息不被未经授权访问的重要手段。ZIP压缩包作为一种常见的文件压缩格式,zip文件加密是很多人都回去做的一件事情,那么zip加密文件如何解密?有几种方法可以解密呢?今天介绍几种方法给大家。 一、尝试常用密码 我们…

【Python】解决Python报错:TypeError: ‘xxx‘ object does not support item assignment

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

【busybox记录】【shell指令】unlink

目录 内容来源: 【GUN】【unlink】指令介绍 【busybox】【unlink】指令介绍 【linux】【unlink】指令介绍 使用示例: 删除文件 - 默认 常用组合指令: 指令不常用/组合用法还需继续挖掘: 内容来源: GUN &#x…

xcode依赖包package已经安装,但是提示No such module ‘Alamofire‘解决办法

明明已经通过xcode自带的swift包管理器安装好了依赖包,但是却还是提示:No such module,这个坑爹的xcode,我也只能说服气,但是无奈,没办法攻打苹果总部,只能自己想解决办法了 No such module Ala…

ClickHouse 与其他数仓架构的对比——Clickhouse 架构篇(四)

文章目录 前言ClickHouse与Hive的对比计算引擎的差异ClickHouse比Hive查询速度快的原因 ClickHouse与HBase的对比HBase的存储系统与ClickHouse的异同HBase的适用场景及ClickHouse不适合的原因 ClickHouse与Kylin的对比Kylin的架构Kylin解决性能问题的思路Kylin方案的缺陷ClickH…

图片处理软件有哪些?这三款软件好用

图片处理软件有哪些?在当今这个数字化时代,图片处理软件成为了我们日常生活和工作中不可或缺的工具。无论是为了修饰个人照片,还是为了设计专业海报,这些软件都能帮助我们轻松实现创意和美化。那么,究竟有哪些热门的图…

CEEMDAN +组合预测模型(CNN-Transfromer + XGBoost)

注意:本模型继续加入 组合预测模型全家桶 中,之前购买的同学请及时更新下载! 往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 VMD CEEMDAN 二次分解,Transformer-BiGRU预测模…

read test

功能性语言: 在.sh脚本下,read -p ——答应 read -t 时间 ——时间完成限制 特别注意空格。 test -n测试是内容一定要加双引号。 test 变量1 -ne 变量2 即比较大小。

视频汇聚EasyCVR平台视图库GA/T 1400协议与GB/T 28181协议的区别

在公安和公共安全领域,视频图像信息的应用日益广泛,尤其是在监控、安防和应急指挥等方面。为了实现视频信息的有效传输、接收和处理,GA/T 1400和GB/T 28181这两个协议被广泛应用。虽然两者都服务于视频信息处理的目的,但它们在实际…

22net冒泡排序与插入排序

冒泡排序 观看视频 【python练习题】每日一练_第八天_冒泡排序_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1QT4y197pa/?spm_id_from333.337.search-card.all.click&vd_source498ae9e9c7a8a7d16da872c9d74cdc38PS:视频中用的了numpy库,大…

10W QPS高并发,如何防止重复下单?

小北说在前面 10wqps高并发,如何防止重复提交/支付订单? 10wqps高并发,如何防止重复下单? 10wqps高并发,如何防止重复支付? 10wqps高并发,如何解决重复操作问题? 最近有小伙伴在面试…

这有一封“数字赋能 强农兴村”的邀请函,请查收→

2024年6月5日至7日,以“数字赋能 强农兴村”为主题的2024中国(南京)数字乡村博览会暨第八届中国(南京)国际智慧农业博览会将在江苏南京举办。珈和科技在农业AI大数据展区的H16展位与您相约,共襄盛会。 私信…

iPhone用户推荐使用的藏汉翻译小助手:藏汉翻译通小程序,支持藏文OCR识别文字提取,卫藏语、安多语、康巴语学习背单词!

网上冲浪时,遇到不会的汉语词汇,可以复制到藏汉翻译通小程序中进行翻译。如果不会拼音,可以使用图片识别功能扫一扫文字,即可OCR识别提取文字。 此外,藏汉翻译通小程序现在还支持背单词和会话速成课程,支持…

java调用远程接口下载文件

在postman中这样下载文件 有时下载文件太大postman会闪退,可以通过代码下载,使用hutool的http包

HAL库使用FreeRTOS实时操作系统时配置时基源(TimeBase Source)

需要另外的定时器,用systic的时候生成项目会有警告 https://blog.51cto.com/u_16213579/10967728

java高级——Collection集合之List探索(包含ArrayList、LinkedList、Vector底层实现及区别,非常详细哦)

java高级——Collection集合之List探索 前情提要文章介绍提前了解的知识点1. 数组2. 单向链表3. 双向链表4. 为什么单向链表使用的较多5. 线程安全和线程不安全的概念 ArrayList介绍1. 继承结构解析1.1 三个标志性接口1.2 AbstractList和AbstractCollection 2. ArrayList底层代…

企业网站有必要进行软件测试吗?网站测试有哪些测试流程?

企业网站在现代商业中扮演着重要的角色,它不仅是企业形象的重要体现,也是与客户、合作伙伴进行沟通与交流的重要渠道。然而,由于企业网站的复杂性和关键性,其中可能存在各种潜在的问题和隐患。因此,对企业网站进行软件…