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

AlexNet网络搭建

AlexNet网络模型搭建

环境准备

首先在某个盘符下创建一个文件夹,就叫AlexNet吧,用来存放源代码。

然后新建一个python文件,就叫plot.py吧,往里面写入以下代码,用于下载数据集:

# FashionMNIST里面包含了许多数据集
from click.core import batch
from spacy.cli.train import train
from torchvision.datasets import FashionMNIST
from torchvision import transforms # 处理数据集,归一化
import torch.utils.data as Data
import numpy as np
import matplotlib.pyplot as plt# 下载FashionMMIST数据集
train_data = FashionMNIST(root="./data", # 指定数据集要下载的路径train=True,# 要训练集# 将数据进行归一化操作transform=transforms.Compose([transforms.Resize(size=224), # 调整数据的大小transforms.ToTensor() # 将数据转换为tensor]),download=True # 开启下载
)# 加载数据集集
train_loader = Data.DataLoader(dataset=train_data,# 要加载的数据集batch_size=64 ,# 批量数据大小shuffle=True, # 打乱数据顺序num_workers=0, # 加载数据线程数量
)# 绘制出训练集
for step,(b_x,b_y) in enumerate(train_loader):if step > 0:breakbatch_x = b_x.squeeze().numpy() # 将四维张量移除第一维,将数据转换为numpy格式batch_y = b_y.numpy() # 将张量数据转成numpy格式class_label = train_data.classes # 训练集标签
print("class_label,",class_label)# 绘图
plt.figure(figsize=(12,5))
for ii in np.arange(len(batch_y)):plt.subplot(4,16,ii+1)plt.imshow(batch_x[ii, : , :],cmap=plt.cm.gray)plt.title(class_label[batch_y[ii]],size=10)plt.axis('off')plt.subplots_adjust(wspace=0.05)plt.show()

执行上述代码后,就会开始下载所需要的数据集文件,只不过下载的速度比较慢,然后下载完成,项目的根目录会多出data文件夹,以下是data的目录结构:

--data--FashionMNIST--raw # 该文件夹下就存放数据集文件

搭建网络模型

创建model.py文件,用于构建模型代码。

import torch
from torch import nn  # nn层
from torchsummary import summary  # 查看网络模型参数
import torch.nn.functional as F  # 用于dropout# 搭建模型
class AlexNet(nn.Module):def __init__(self):# 初始化网络层super(AlexNet, self).__init__()self.ReLU = nn.ReLU()  # ReLU 激活函数# kernel_size=11 : 卷积核大小 11*11self.c1 = nn.Conv2d(in_channels=1, out_channels=96, kernel_size=11, stride=4)  # 第一层:卷积self.s2 = nn.MaxPool2d(kernel_size=3, stride=2)  # 第二层:最大池化层self.c3 = nn.Conv2d(in_channels=96, out_channels=256, kernel_size=5, padding=2)  # 第三层:卷积层self.s4 = nn.MaxPool2d(kernel_size=3, stride=2)  # 第四层:最大池化层self.c5 = nn.Conv2d(in_channels=256, out_channels=384, kernel_size=3, padding=1)  # 第五层:卷积层self.c6 = nn.Conv2d(in_channels=384, out_channels=384, kernel_size=3, padding=1)  # 第六层:卷积层self.c7 = nn.Conv2d(in_channels=384, out_channels=256, kernel_size=3, padding=1)  # 第七层:卷积层self.s8 = nn.MaxPool2d(kernel_size=3, stride=2)  # 第八层:最大池化层self.flatten = nn.Flatten()  # 第九层:平展层self.f1 = nn.Linear(6 * 6 * 256, 4096)  # 第十层:全连接层self.f2 = nn.Linear(4096, 4096)  # 第十一层:全连接层self.f3 = nn.Linear(4096, 10)  # 第十二层:全连接层# 前向传播def forward(self, x):# 卷积完后,然后进行激活函数x = self.ReLU(self.c1(x))x = self.s2(x)x = self.ReLU(self.c3(x))x = self.s4(x)x = self.ReLU(self.c5(x))x = self.ReLU(self.c6(x))x = self.ReLU(self.c7(x))x = self.s8(x)x = self.flatten(x)  # 平展层x = self.ReLU(self.f1(x))  # 线性全连接层x = F.dropout(x, 0.5)x = self.ReLU(self.f2(x))x = F.dropout(x, 0.5)x = self.f3(x)  # 输出层return x# 测试模型的搭建有没有成功(仅测试)
if __name__ == "__main__":device = torch.device("cuda" if torch.cuda.is_available() else "cpu")model = AlexNet().to(device)print(summary(model, (1, 227, 227)))

模型训练

创建一个model_train.py 文件

import copy
import timeimport torch
from torchvision.datasets import FashionMNIST
from torchvision import transforms
import torch.nn as nn
import torch.utils.data as Data
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltfrom model import AlexNet# 处理训练集核数据集
def train_val_data_process():# 加载数据集train_data = FashionMNIST(root="./data",# 数据集所在路径train=True, # 要训练集# 将数据进行归一化操作transform=transforms.Compose([transforms.Resize(size=227), # 修改数据的大小transforms.ToTensor() # 将数据转成Tensor格式]),download=True # 开启加载)# 随机 划分训练集 和 验证集train_data,val_data = Data.random_split(train_data, # 要划分的数据集[round(0.8*len(train_data)), # 划分80%给训练集round(0.2*len(train_data)) # 划分20%给验证集])# 加载训练集数据train_dataloader = Data.DataLoader(dataset=train_data,# 要加载的训练集batch_size=32,# 每轮的训练批次数shuffle=True,# 打乱数据顺序num_workers=2,# 加载数据线程数量)# 加载验证集数据val_dataloader = Data.DataLoader(dataset=val_data,# 要加载的验证集batch_size=32,# 每轮的训练批数shuffle=True,# 打乱数据顺序num_workers=2,# 加载数据集的线程数量)return train_dataloader,val_dataloader# 模型训练
def train_model_process(model,train_dataloader,val_dataloader,num_epochs):# model:需要训练的模型,train_dataloader:训练集数据,val_dataloader:验证集数据,num_epochs:训练轮数# 指定设备device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# 定义优化器optimizer = torch.optim.Adam(model.parameters(),lr=0.001)# 定义交叉熵损失函数criterion = nn.CrossEntropyLoss()# 将模型放入到设备中进行训练model.to(device)# 复制当前模型的参数best_model_wts = copy.deepcopy(model.state_dict())# 初始化参数,记录模型的的精确度和损失值best_acc = 0.0 # 最高精确度train_loss_all = [] # 训练集的总损失train_acc_all = [] # 训练集的总精度val_loss_all = [] # 验证集的总损失val_acc_all = [] # 验证集的总精度since = time.time() # 记录开始训练的时间# 开始训练模型 每轮参数for epoch in range(num_epochs):print("Epoch {}/{}".format(epoch,num_epochs-1))print("-"*10)# 初始化参数,记录本轮的模型的损失之和精度train_loss = 0.0 # 训练的损失train_corrects = 0  # 训练的准确度val_loss = 0.0 # 验证集的损失val_corrents = 0 # 验证集的准确度train_num = 0 # 本轮训练集的数量val_num = 0 # 本轮验证集的数量# 取出每轮中的数据集进行训练for step,(b_x,b_y) in enumerate(train_dataloader):b_x = b_x.to(device) # 将训练集数据放入到设备当中b_y = b_y.to(device) # 将标签数据放入到设备当中model.train() # 开启模型训练模式# 将每批次中的标签数据放入到模型中,进行前向传播output = model(b_x)# 查找每一行中最大值对应的行标,即预测值pre_lab = torch.argmax(output,dim=1)# 计算当前批次的损失值(模型的输出,标签)loss = criterion(output,b_y)# 每批次训练完后,将梯度初始化成0optimizer.zero_grad()# 反向传播计算loss.backward()# 更新参数optimizer.step()# 本批次损失值的累加train_loss += loss.item() * b_x.size(0)# 如果模型预测的结果正确,本批次的准确度+1train_corrects += torch.sum(pre_lab == b_y.data)# 本此次的训练数据累加train_num += b_y.size(0)# 取出每轮中的数据进行验证for step,(b_x,b_y) in enumerate(val_dataloader):# 将数据和标签分别放入到设备中b_x = b_x.to(device)b_y = b_y.to(device)model.eval() # 设置模型为评估模式# 前向传播,输入一个批次,输出该批次的对应的预测值output = model(b_x)# 查找每一行中最大值对应的行标,即预测值pre_lab = torch.argmax(output,dim=1)# 计算本此次的损失函数loss = criterion(output,b_y)# 本批次的损失函数累加val_loss += loss.item() * b_x.size(0)# 如果预测正确,那就本批次的精度度累加val_corrents += torch.sum(pre_lab==b_y.data)# 当前用于验证的样本数累加val_num += b_x.size(0)# 计算每轮次的损失值和准确率train_loss_all.append(train_loss / train_num) # 本轮训练集的loss值train_acc_all.append(train_corrects.double().item() / train_num) # 本轮训练集的准确率val_loss_all.append(val_loss / val_num) # 本轮验证集的loss值val_acc_all.append(val_corrents.double().item() / val_num) # 本轮验证集的准确率print("{} train loss:{:.4f} train acc: {:.4f}".format(epoch, train_loss_all[-1], train_acc_all[-1]))print("{} val loss:{:.4f} val acc: {:.4f}".format(epoch, val_loss_all[-1], val_acc_all[-1]))# 寻找最高准确度 和 模型的权重参数if val_acc_all[-1] > best_acc:best_acc = val_acc_all[-1] # 最高准确度best_model_wts = copy.deepcopy(model.state_dict()) # 最佳模型参数# 计算训练耗时time_use = time.time() - sinceprint("训练耗费的时间:{:.0f}m{:.0f}s".format(time_use//60,time_use%60))# 将最佳的模型参数保存torch.save(best_model_wts,"best_model.pth") # .pth是权重文件的后缀# 保存训练好的模型参数train_process = pd.DataFrame(data={"epoch":range(num_epochs),"train_loss_all":train_loss_all,"train_acc_all":train_acc_all,"val_loss_all":val_loss_all,"val_acc_all":val_acc_all})return train_process# 定义绘图的函数,绘制loss和准确度
def matplot_acc_loss(train_process):plt.figure(figsize=(12,4))# 绘制训练集和验证集的损失值图像plt.subplot(1,2,1) # 一行两列,第一列plt.plot(train_process['epoch'],train_process.train_loss_all,"ro-",label="train loss")plt.plot(train_process['epoch'],train_process.val_acc_all,"bs-",label="val loss")plt.legend() # 图例plt.xlabel("epoch") # x轴标签plt.ylabel("loss") # y轴标签# 绘制训练集和验证集的准确度图像plt.subplot(1,2,2) # 一行两列,第二列plt.plot(train_process['epoch'],train_process.val_loss_all,"ro-",label="train acc")plt.plot(train_process['epoch'],train_process.val_acc_all,"bs-",label="va acc")if __name__ == '__main__':# 实例化自定义模型类model = AlexNet()# 加载数据集train_dataloader,val_dataloader = train_val_data_process()# 训练模型train_process = train_model_process(model,train_dataloader,val_dataloader,20)# 绘制图像matplot_acc_loss(train_process)

模型测试

创建一个model_test.py文件,用于模型的测试

import torch
import torch.utils.data as Data
from numpy.random import shuffle
from torchvision import transforms
from torchvision.datasets import FashionMNISTfrom model import AlexNet# 加载要训练的数据
def test_data_process():# 加载测试集数据test_data = FashionMNIST(root="./data",# 指定数据集要下载的路径train=False,# 不要训练集数据# 数据归一化操作transform=transforms.Compose([transforms.Resize(size=227), # 将数据转成227*227大小transforms.ToTensor(),# 将数据转成Tensor格式]),download=True # 加载数据)# 通过DataLoader加载器 来加载数据test_dataloader = Data.DataLoader(dataset=test_data,# 要加载的数据batch_size=1, # 每轮训练的批次数shuffle=True, # 打乱数据集num_workers=0, # 加载数据集的线程数量)return test_dataloader# 测试模型
def test_model_process(model,test_dataloader):# 指定设备device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# 将模型放入设备中model.to(device)# 初始化模型训练的每轮参数test_correct = 0.0 # 准确度test_num = 0 # 测试样本数量# 只进行前向传播with torch.no_grad(): # 将梯度设置为0for test_data_x,test_data_y in enumerate(test_dataloader): # 遍历每轮次# 由于上面设置批次为1,所以这里就不需要循环批次了test_data_x = test_data_x.to(device) # 将测试数据放入到设备中test_data_y = test_data_y.to(device) # 将标签数据放入到设备中# 模型切换成评估模式model.eval()# 前向传播 将测试数据放入到模型中output = model(test_data_x)# 查找每一行中最大值的行标pre_lab = torch.argmax(output,dim=1)# 模型预测的结果 将pre_lab 与 标签数据 进行比较# 如果预测正确,则加1test_correct += torch.sum(pre_lab==test_data_y.data)# 测试样本数量累加test_num += test_data_y.size(0)# 计算最终测试的准确率 每轮的准确度 / 总样本数量test_acc = test_correct.double().item() / test_numprint("测试模型的准确率为:",test_acc)if __name__ == '__main__':# 加载模型model = AlexNet()# 加载训练好的模型最佳参数model.load_state_dict(torch.load('best_model.pth'))# 加载测试的数据集test_dataloader = test_data_process()# 开始训练# test_model_process(model, test_dataloader)# 模型具体的训练过程device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# 将模型放入到设备当中model = model.to(device)# 数据的类别classes = ('T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot')# 梯度设置为0with torch.no_grad():# 遍历测试集中的 测试数据 和 标签for b_x,b_y in test_dataloader:# 将模型设置为评估模式model.eval()# 将数据放入到模型中,得出预测结果output = model(b_x)# 获取最大值的行标pre_lab = torch.argmax(output,dim=1)# 取出张量中的下标result = pre_lab.item()label = b_y.item()print("预测结果为:",classes[result],"标签为:",classes[label])

相关文章:

AlexNet网络搭建

AlexNet网络模型搭建 环境准备 首先在某个盘符下创建一个文件夹,就叫AlexNet吧,用来存放源代码。 然后新建一个python文件,就叫plot.py吧,往里面写入以下代码,用于下载数据集: # FashionMNIST里面包含了…...

常用第三方库:sqflite数据库应用

常用第三方库:sqflite数据库应用 一、基础概念 1.1 什么是sqflite? sqflite是Flutter官方推荐的SQLite数据库插件,它提供了在Flutter应用中使用SQLite数据库的能力。SQLite是一个轻量级的、嵌入式的关系型数据库,特别适合移动应…...

【论文阅读】-周总结-第5周

1. 【论文阅读24】并行 TCN-LSTM 风电预测模型(2024-02) 链接 论文信息: Liu S, Xu T, Du X, et al. A hybrid deep learning model based on parallel architecture TCN-LSTM with Savitzky-Golay filter for wind power prediction. Ener…...

深入理解 JavaScript 的 typeof 运算符:返回的数据类型

JavaScript 的 typeof 运算符是开发中用于检测值类型的基础工具。虽然看似简单,但其行为存在需要开发者理解的微妙细节。本文将解析 typeof 返回的数据类型,探讨边界案例,并分享类型检查的最佳实践。 typeof 会返回哪些类型? typ…...

前端零基础入门到上班:【Day8】JavaScript 基础语法入门

前端零基础入门到上班:【Day8】JavaScript 基础语法入门(超全!!!) 一、JavaScript 简介二、引入 JavaScript 的三种方式三、变量与常量(var、let、const)3.1 var (传统方式&#xff…...

ppt流程图怎么?ppt流程图模板大全

ppt流程图怎么?ppt流程图剪头模板,ppt流程图模板大全: ppt流程图_模板素材_PPT模板_ppt素材_免抠图片_AiPPTer...

makefile总结

Makefile 学习视频:1、野火的基础入门篇-第32讲 Makefile三要素_哔哩哔哩_bilibili ​ 2、b站视频04 一个稍复杂的Makefile_哔哩哔哩_bilibili 学习资料:第2个视频对应的Make/make.md 无限十三年/CPP - 码云 - 开源中国 ch0_Makefile简介 Makefile是什…...

MIME 类型是个什么东西?

MIME 类型(Multipurpose Internet Mail Extensions)即多用途互联网邮件扩展类型,它是一种标准,用于表示文档、文件或字节流的性质和格式。 最初设计用于电子邮件系统,后来被广泛应用于网页、HTTP 协议等领域&#xff0…...

javaWeb开发---前后端开发全景图解(基础梳理 + 技术体系)

在现代互联网开发中,前端与后端的分工协作非常重要。本文结合实际架构图,全面梳理前端技术栈、后端技术栈以及服务器端整体流程,帮助初学者建立清晰的整体认知。 一、整体架构概览 系统整体划分为三个主要部分: B端(…...

spring-rabbit的CachingConnectionFactory默认参数导致消费者Channel数量暴增问题解决

文章目录 1.前言2.解决2.1消费监听方法中关闭channel2.2 配置设置两个参数 3.总结 1.前言 由于之前写了一个好用的rabbitmq-spring-boot-start启动器,后面在生产实践之后反馈消费者连接的Channel数量过多,一个消费者的Channel数量可以达到好几百&#xf…...

线上JVM调优与全栈性能优化 - Java架构师面试实战

线上JVM调优与全栈性能优化 - Java架构师面试实战 本文通过一场互联网大厂的Java架构师面试,深入探讨了线上JVM调优、OOM定位、死锁定位、内存和CPU调优、线程池调优、数据库调优、缓存调优、网络调优、微服务调优及分布式调优等关键领域。 第一轮提问 面试官&am…...

【KWDB创作者计划】_企业级多模数据库实战:用KWDB实现时序+关系数据毫秒级融合(附代码、性能优化与架构图)

一、技术背景与行业痛点 1.1 多模数据融合挑战 场景痛点: 工业物联网设备每秒产生百万级传感器数据(时序数据)。需关联设备档案(关系数据)生成设备健康报告,传统方案需多数据库跳转,延迟>5…...

“八股训练营”学习总结

在参加为期 40 天的八股训练营的这段时间里,我收获满满,不仅在知识技能上得到了提升,更在学习习惯和自我认知方面有了很大的进步。 在知识层面,训练营涵盖了网络、数据库、缓存以及python测试开发等多方面的知识点。 网络方面&a…...

java工具类

LocalDateTime LocalDateTime可以获取当前时间: LocalDateTime now LocalDateTime.now(); 同时他也可以获取指定时间: LocalDateTime dateTime LocalDateTime.of(2023, 5, 15, 10, 30) 若我们时间值超出了我们的实际情况值,我们将会出现…...

「OC」源码学习——alloc与init的实现

「OC」源码学习——alloc与init的实现 前言 费劲千辛万苦终于项目给写完了,进入下一个阶段,源码的学习 alloc的调用顺序 我们在main函数之中打上断点,先运行 再在alloc之中的各个函数之中打上断点,在关键步骤上打上断点&#…...

AOSP Android14 Launcher3——动画核心类QuickstepTransitionManager详解

Launcher3中,有一个类在跟桌面相关的各种动画中扮演着非常关键的角色,这个类就是QuickstepTransitionManager。 QuickstepTransitionManager在aosp中的路径为:aosp/packages/apps/Launcher3/quickstep/src/com/android/launcher3/QuickstepT…...

STM32:看门狗

独立看门狗 简介 独立看门狗(IWDG)由独立的低速时钟(LSI)驱动,即便主时钟发生故障,它依然能够正常工作。其主要作用是在程序出现异常时,通过复位来保障系统的稳定性。独立看门狗的喂狗操作相对…...

第十三步:vue

Vue 1、上手 1、安装 使用命令:npm create vuelatestvue文件后缀为.vueconst app createApp(App):初始化根组件app.mount("#app"):挂载根组件到页面 2、文件 script标签:编写jstemplate标签:编写htmls…...

《代码整洁之道》第8章 边界 - 笔记

甚至是你团队里其他组写的你无法随意修改的代码。 这些外部代码是你的**“边界”。它们可能会升级、可能会有 Bug、可能会有反人类的设计、甚至你将来可能想换一个类似的库或服务。如果你的应用代码直接且紧密地依赖**这些外部代码的具体类、方法、异常等细节,那么…...

【CF】Day45——Codeforces Round 1021 (Div. 2) BC

阅读理解。。。不过挺有意思( B. Sasha and the Apartment Purchase 题目: 思路: 看了半天没看懂... 题目叽里咕噜一大堆,说白了就是让我们在一个 可删除k个数 的 数组 中选 一些点 且 这些点的f(x) 是此时 删完了k个数之后的数组…...

《代码整洁之道》第5章 格式 - 笔记

你应该选择一套管理代码格式的简单规则。如果是团队,应该选择一套团队一致同意采用的简单格式规则。 最重要的原则:一致性(Consistency)! 没有完美的格式规范,但有统一的规范。 整个团队(或者…...

通过示例学习:连续 XOR

通过示例学习:连续 XOR 如果我们想在 PyTorch 中构建神经网络,可以使用 (with) 指定所有参数(权重矩阵、偏差向量),让 PyTorch 计算梯度,然后调整参数。但是,如果我们有很…...

加密算法 AES、RSA、MD5、SM2 的对比分析与案例(AI)

加密算法 AES、RSA、MD5、SM2 的对比分析 一、相同点 ‌密码学基础‌ 均为现代密码学核心算法,用于保障数据安全。‌数据处理‌ 均涉及数据转换(加密、签名、哈希等)。‌密钥依赖‌ AES、RSA、SM2 依赖密钥(对称或非对称&#x…...

基于STM32、HAL库的MAX31865模数转换器ADC驱动程序设计

一、简介: MAX31865是一款高精度的铂电阻温度检测器(RTD)至数字转换器,具有以下特点: 支持2线、3线或4线RTD配置 15位ADC分辨率 可编程RTD和基准电阻 内置故障检测(开路、短路等) SPI接口通信 工作电压:3.0V至3.6V 二、硬件接口: STM32L4XX <--> MAX31865 PA5(SCK…...

Laravel5.7的一些用法

1、事件需要运行 php artisan queue:work 2、数据库对象关联 1对1 hasOne 1对多 hasMany 1依赖多 belongsTo 多依赖多 belongsToMany 3、 关联查询 with 关联统计 withCount 统计时指定字段名。 如: withCount([cardHolderOrders as order_count]); 4、 // 一次查询&…...

Vue3 + OpenLayers 开发教程 (六)WebGL渲染优化

1. WebGL 渲染优化 1.1 WebGL 渲染器配置 创建 src/utils/webgl.ts&#xff1a; import { Map } from ol; import { WebGLPointsLayer } from ol/layer; import { Vector as VectorSource } from ol/source; import { Style, Circle, Fill, Stroke } from ol/style;// 创建 …...

【C++】C++11新特性(一)

文章目录 列表初始化initializer_list左值引用和右值引用 列表初始化 在 C98 中可以使用{}对数组或者结构体元素进行统一的列表初始值设定 struct Point {int _x;int _y; }; int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; …...

【网络原理】 网络编程套接字

文章目录 一、网络编程基础1. 为什么需要网络编程&#xff1f;2. 什么是网络编程3 .网络编程中的基本概念发送端和接收端请求和响应客户端和服务端 4. 常见的客户端服务端模型 二、Socket套接字1. 概念2.分类3. Java数据报套接字通信模型4.Java流套接字通信模型 三、UDP数据报套…...

每天五分钟深度学习框架pytorch:使用visdom绘制损失函数图像

visdom的安装 pip install visdom如果安装失败 pip install --upgrade visdom开启visdom python -m visdom.server nohup python -m visdom.server后台启动然后就会出现,下面的页面,我们可以使用下面的链接打开visdom页面 Visdom中有两个重要概念: env环境。不同环境的可…...

【MySQL专栏】MySQL数据库表的内外连接

文章目录 1、表的内连接&#xff08;1&#xff09;内连接的语法格式①显示SMITH的名字和部门名称 2、外连接&#xff08;1&#xff09;左外连接左外连接的语法格式通过实例演示&#xff1a; &#xff08;2&#xff09;右外连接右外连接的语法格式通过实例演示 1、表的内连接 什…...

-信息革命-

信息革命-马歇尔麦克卢汉&#xff08;MARSHALL McLUHAN&#xff09;&#xff0c;1964年 随着大系统的加速崩溃&#xff0c;作为塑造经济生活和收入分配的一个因素&#xff0c;系统性的强 制将会式微。很快&#xff0c;在社会机构的组织中&#xff0c;效率将会比权力的分配更加重…...

Charles 抓包入门教程

一、什么是 Charles&#xff1f; Charles 是一款功能强大的抓包工具&#xff0c;可以拦截、查看、分析电脑和手机上的 HTTP/HTTPS 网络请求。常用于&#xff1a; 查看网页或App发送的请求和返回的数据调试接口、分析问题模拟网络环境&#xff08;断网、慢速网络&#xff09;修…...

深度学习新趋势:利用MLP取代卷积层——S2-MLPv2模型解析

深度学习新趋势&#xff1a;利用MLP取代卷积层——S2-MLPv2模型解析 近年来&#xff0c;深度学习领域不断涌现出新的技术革新&#xff0c;而其中最引人注目的趋势之一就是用多层感知机&#xff08;MLP&#xff09;替代传统的卷积层。这种转变不仅带来了计算效率的提升&#xf…...

【玩转 JS 函数式编程_016】DIY 实战:巧用延续传递风格(CPS)重构倒计时特效逻辑

文章目录 巧用延续传递风格&#xff08;CPS&#xff09;重构倒计时特效逻辑1 起因2 换一种思路3 填坑之旅4 复盘与小结 写在前面 都说念念不忘&#xff0c;必有回响。写过的文章也好&#xff0c;看过的视频也罢&#xff0c;其实只要用心积累&#xff0c;不必刻意去死记硬背&…...

虚函数表的设计和多态的实现

虚表指针 类直接定义虚函数&#xff1a;编译器自动在对象头部插入 vptr。 继承含虚函数的父类&#xff1a;子类复用父类的 vptr&#xff0c;不会创建新的vptr 单继承&#xff08;子类继承一个含虚函数的父类&#xff09; 1.创建新的虚函数表 2.沿用父类的虚表指针&#xff…...

中国科学院大学计算机考研历年初试分数线分析以及计算机所考的科目有哪些?

以下是对中国科学院大学计算机考研历年初试分数线分析以及计算机所考科目的介绍&#xff1a; 历年初试分数线分析 • 2024 年 &#xff1a;计算机应用技术专业&#xff08;专业代码 081203&#xff09;和计算机技术专业&#xff08;专业代码 085404&#xff09;的复试分数线为…...

Simulink与C的联合仿真调试

背景 simulink的Matlab Function&#xff0c;默认采用double类型的数据&#xff0c;无法定制int或者single类型的数据&#xff1b;Simulink中的Matlab Function直接调用.m文件中的函数&#xff08;该函数中对数据类型有single或者int的定义&#xff09;&#xff0c;该函数中的…...

DeepSeek 多头潜在注意力(Multi-Head Latent Attention, MLA)技术

1. 核心原理 多头潜在注意力&#xff08;MLA&#xff09;是Transformer架构的扩展技术&#xff0c;通过潜在空间投影和多注意力头并行计算增强模型对长序列和复杂特征的建模能力。 1.1 关键技术点 潜在空间压缩 将原始高维注意力矩阵投影到低维潜在空间&#xff0c;降低计算复…...

C# 类(Class)教程

在现代面向对象编程中&#xff0c;**类&#xff08;Class&#xff09;**是最基础、最重要的概念之一。通过学习类&#xff0c;我们可以理解怎样定义自己的数据类型&#xff0c;封装数据与行为&#xff0c;构建复杂的软件体系结构。本文将详细介绍C#中的类&#xff0c;从基础定义…...

Kubernetes学习笔记-环境变量的使用

如果项目需要一些灵活配置&#xff0c;减少硬编码或者避免敏感信息的暴露&#xff0c;可以考虑使用Kubernetes Pod下的容器的环境变量。 Pod容器设置环境变量的方式&#xff1a; 可以通过Deployment配置文件的env字段来设置环境变量 value env:- name: ACTIVE_PROFILEvalue: …...

git提交规范记录,常见的提交类型及模板、示例

Git提交规范是一种约定俗成的提交信息编写标准&#xff0c;旨在使代码仓库的提交历史更加清晰、可读和有组织。以下是常见的Git提交类型及其对应的提交模板&#xff1a; 提交信息的基本结构 一个标准的Git提交信息通常包含以下三个主要部分&#xff1a; Header‌&#xff1a;描…...

关于指针和指针算术

第一次读C primer plus 第六版时&#xff0c;关于指针的语法一些名词没有用心去理解&#xff0c;再读的时候&#xff0c;讲到指针算术这个词时&#xff0c;感觉之前读像是漏了很关键的点&#xff0c;这次读&#xff0c;写下关于指针算术的思考。 有漏了的感觉是&#xff0c;在…...

el-input限制输入只能是数字 限制input只能输入数字

方法一&#xff1a; 通过设置type属性&#xff1a;type“number”&#xff0c;这种方式一般会影响样式&#xff0c;不建议使用&#xff0c;如下图&#xff1a; <el-input type"number" v-model"aaa"></el-input>方法二&#xff1a; 通过绑定值…...

Pydantic:校验器(@validator)、模型嵌套、模型继承

&#x1f4da; 1. 校验器&#xff08;validator&#xff09; Pydantic 允许你自定义字段验证逻辑。用 validator 装饰器可以在字段赋值时自动进行检查或修改。 例子&#xff1a; from pydantic import BaseModel, validatorclass User(BaseModel):name: strage: intvalidato…...

343. 整数拆分

给定一个正整数 n&#xff0c;将其拆分为至少两个正整数的和&#xff0c;并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2输出: 1解释: 2 1 1, 1 1 1。 示例 2: 输入: 10输出: 36解释: 10 3 3 4, 3 3 4 36。说明: 你可以假设 n 不小于 2…...

前端面试 js

作用域链 内存管理 垃圾回收器 引用计数 默认栈里面会有一次引用 问题&#xff1a;循环引用&#xff0c;会产生内存泄漏 标记清除 垃圾回收期会定期从根开始遍历&#xff0c;找到有引用的对象 闭包 内存泄漏 this的指向 默认绑定 独立调用的this都是window function foo()…...

Linux CentOS 安装Python 3.8.0

在 CentOS 上升级 Python 3.6.8 到 3.8.0&#xff0c;可以按照以下步骤操作&#xff1a; 1. 安装依赖 sudo yum groupinstall -y "Development Tools" sudo yum install -y openssl-devel bzip2-devel libffi-devel zlib-devel wget 如果遇到报错“File "/bin…...

EXCEL常用函数公式和VBA汇总第二篇

系列文章目录 文章目录 系列文章目录前言一、excel公式应用1.rand函数2.rand函数随机排序3.rand函数提取数据4.correl函数5.SUBSTITUTE函数6.MAX组合函数7.分析下班时间8.柏拉图自动排序 总结 前言 一、excel公式应用 1.rand函数 用excel生成1-5的随机数字&#xff0c;其中对…...

Python 基础核心知识

1. Python 特点 简洁易读&#xff1a;代码简洁&#xff0c;强制缩进&#xff08;取代花括号&#xff09;。动态类型&#xff1a;变量无需声明类型&#xff08;如 x 10&#xff09;。跨平台&#xff1a;支持 Windows、Linux、macOS。丰富的库&#xff1a;如 NumPy&#xff08;…...

软考:软件设计师考试数据结构知识点详解

文章目录 1. 引言1.1 数据结构的重要性1.2 软件设计师考试中数据结构的考察目标 2. 基本概念和术语2.1 数据结构的定义2.2 算法和数据结构的关系2.3 抽象数据类型&#xff08;ADT&#xff09; 3. 线性结构3.1 数组3.1.1 数组的定义和特点3.1.2 数组的存储结构3.1.3 数组的优缺点…...