如何在wordpress中加备案编号网站建设公司十年乐云seo
2026/2/12 13:08:56 网站建设 项目流程
如何在wordpress中加备案编号,网站建设公司十年乐云seo,亚马逊雨林面积有多大,适合做资源站wordpress主题基于ResNet的图像分类--算法实现 数据准备ResNet概述核心思想1. ResNet-18/342. ResNet-50/101/152 网络架构ResNet-34 示例结构#xff1a;各版本详细配置#xff1a; ResNet34网络代码实现数据增强数据集封装Dataset类数据集封装DataLoader类 数据准备 导包 from PIL imp…基于ResNet的图像分类--算法实现数据准备ResNet概述核心思想1. ResNet-18/342. ResNet-50/101/152网络架构ResNet-34 示例结构各版本详细配置ResNet34网络代码实现数据增强数据集封装Dataset类数据集封装DataLoader类数据准备导包fromPILimportImageimportcv2importnumpyasnpimportosfromsklearn.model_selectionimporttrain_test_splitfromsklearn.kernel_approximationimportAdditiveChi2Samplerimportrandomimportmathfromimutilsimportpaths读取数据# 图像数据data[]# 图像对应的标签labels[]# 储存标签信息的临时变量labels_tep[]# 数据集的地址# 请读者自行下载数据集并将数据集放在代码的同级目录下image_pathslist(paths.list_images(E:\\jupyterNotebook\\Hands-on-CV-main\\10classify\\caltech-101))forimage_pathinimage_paths:# 获取图像类别labelimage_path.split(os.path.sep)[-2]# 读取每个类别的图像imagecv2.imread(image_path)# 将图像通道从BGR转换为RGBimagecv2.cvtColor(image,cv2.COLOR_BGR2RGB)# 统一输入图像的尺寸imagecv2.resize(image,(200,200),interpolationcv2.INTER_AREA)data.append(image)labels_tep.append(label)name2label{}tep{}foridx,nameinenumerate(labels_tep):tep[name]idxforidx,nameinenumerate(tep):name2label[name]idxforidx,image_pathinenumerate(image_paths):labels.append(name2label[image_path.split(os.path.sep)[-2]])datanp.array(data)labelsnp.array(labels)数据集划分(x_train,X,y_train,Y)train_test_split(data,labels,test_size0.4,stratifylabels,random_state42)(x_val,x_test,y_val,y_test)train_test_split(X,Y,test_size0.5,random_state42)print(fx_train examples:{x_train.shape}\n\ x_test examples:{x_test.shape}\n\ x_val examples:{x_val.shape})上面数据获取部分和前面一节是一致的不再赘述ResNet概述ResNetResidual Network残差网络是2015年由微软研究院的何恺明等人提出的一种深度卷积神经网络架构。它通过引入残差学习Residual Learning解决了深度神经网络中的梯度消失/爆炸和退化问题使得可以训练非常深的网络超过100层。核心思想残差块Residual BlockResNet的核心创新是残差块它通过跳跃连接skip connection将输入直接传递到输出输出 F(x) x其中x是输入F(x)是需要学习的残差映射F(x) x通过跳跃连接实现数学表达传统网络H(x) F(x)残差网络H(x) F(x) x目标学习F(x) H(x) - x残差1. ResNet-18/34使用基本的残差块Conv 3×3 ReLU Conv 3×3跳跃连接如果输入输出维度相同直接相加如果维度不同使用1×1卷积调整维度。2. ResNet-50/101/152使用瓶颈结构BottleneckConv 1×1, 减少通道数 Conv 3×3, 主要计算 Conv 1×1, 恢复通道数网络架构ResNet-34 示例结构输入 → Conv 7×7 → MaxPool ↓ [Residual Block ×3] 通道数:64 ↓ [Residual Block ×4] 通道数:128 ↓ [Residual Block ×6] 通道数:256 ↓ [Residual Block ×3] 通道数:512 ↓ 全局平均池化 → 全连接层 → 输出各版本详细配置网络层ResNet-18ResNet-34ResNet-50ResNet-101ResNet-152卷积层17×7,64,stride27×7,64,stride27×7,64,stride27×7,64,stride27×7,64,stride2池化层3×3 max pool, stride23×3 max pool, stride23×3 max pool, stride23×3 max pool, stride23×3 max pool, stride2卷积层2[3×3,64]×2[3×3,64]×3[1×1,643×3,641×1,256]×3[1×1,643×3,641×1,256]×3[1×1,643×3,641×1,256]×3卷积层3[3×3,128]×2[3×3,128]×4[1×1,1283×3,1281×1,512]×4[1×1,1283×3,1281×1,512]×4[1×1,1283×3,1281×1,512]×8卷积层4[3×3,256]×2[3×3,256]×6[1×1,2563×3,2561×1,1024]×6[1×1,2563×3,2561×1,1024]×23[1×1,2563×3,2561×1,1024]×36卷积层5[3×3,512]×2[3×3,512]×3[1×1,5123×3,5121×1,2048]×3[1×1,5123×3,5121×1,2048]×3[1×1,5123×3,5121×1,2048]×3参数数量11.7M21.8M25.6M44.5M60.2MResNet34网络代码实现左图为传统网络结构右图为残差网络结构importtorchastfromtorchimportnnfromtorch.nnimportfunctionalasF# 残差结构classResidualBlock(nn.Module):# 深度学习中的图像和利用模型提取的特征图往往有很多通道channel# 比如RGB图像的通道为3即R通道、B通道与G通道def__init__(self,inchannel,outchannel,stride1,shortcutNone):super(ResidualBlock,self).__init__()# 观察图 不难发现残差结构可大致分为左右两部分# 左边是一系列的网络层级右边是一个跳跃连接# 定义左边self.leftnn.Sequential(# 对应图 中第一个权重层nn.Conv2d(inchannel,outchannel,3,stride,1,biasFalse),nn.BatchNorm2d(outchannel),# 对应图中的 RELUnn.ReLU(inplaceTrue),# 对应图中第二个权重层nn.Conv2d(outchannel,outchannel,3,1,1,biasFalse),nn.BatchNorm2d(outchannel))# 定义右边self.rightshortcut# forward()函数在网络结构中起到举足轻重的作用它决定着网络如何对数据进行传播defforward(self,x):outself.left(x)# 构建残差结构residualxifself.rightisNoneelseself.right(x)outresidualreturnF.relu(out)# 在这一模块中将实现 ResNet34classResNet(nn.Module):def__init__(self,num_classes102):super(ResNet,self).__init__()# 前几层图像转换self.prenn.Sequential(nn.Conv2d(3,64,7,2,3,biasFalse),nn.BatchNorm2d(64),nn.ReLU(inplaceTrue),nn.MaxPool2d(3,2,1),)# 重复的网络层分别有3、4、6、3个残差块self.layer1self._make_layer(64,128,3)self.layer2self._make_layer(128,256,4,stride2)self.layer3self._make_layer(256,512,6,stride2)self.layer4self._make_layer(512,512,3,stride2)# 分类用的全连接层将一个多通道的特征图映射到一个维度为类别数目的向量self.fcnn.Linear(512,num_classes)def_make_layer(self,inchannel,outchannel,block_num,stride1):# 定义shortcut连接shortcutnn.Sequential(nn.Conv2d(inchannel,outchannel,1,stride,biasFalse),nn.BatchNorm2d(outchannel))layers[]# 给当前网络层级添加残差块layers.append(ResidualBlock(inchannel,outchannel,stride,shortcut))foriinrange(1,block_num):layers.append(ResidualBlock(outchannel,outchannel))returnnn.Sequential(*layers)defforward(self,x):xself.pre(x)xself.layer1(x)xself.layer2(x)xself.layer3(x)xself.layer4(x)xF.avg_pool2d(x,7)xx.view(x.size(0),-1)returnself.fc(x)数据增强# 定义训练图像增强变换的方法train_transformtransforms.Compose([transforms.ToPILImage(),# transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize(mean[0.485,0.456,0.406],std[0.229,0.224,0.225])])# 定义训练图像增强变换的方法val_transformtransforms.Compose([transforms.ToPILImage(),# transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize(mean[0.485,0.456,0.406],std[0.229,0.224,0.225])])数据集封装Dataset类# 数据集classImageDataset(Dataset):def__init__(self,images,labelsNone,transformsNone):self.Ximages self.ylabels self.transformstransformsdef__len__(self):return(len(self.X))# 用于深度学习训练构建的数据类中__getitem__()函数非常重要# __getitem__()决定着数据如何传入模型# 在下面的代码中可以发现当transforms非空时:# 数据将先经过transforms进行数据增强再返回进行后续操作def__getitem__(self,i):dataself.X[i][:]ifself.transforms:dataself.transforms(data)ifself.yisnotNone:return(data,self.y[i])else:returndata生成dataset类# 生成不同的类用于训练、验证以及测试train_dataImageDataset(x_train,y_train,train_transform)val_dataImageDataset(x_val,y_val,val_transform)test_dataImageDataset(x_test,y_test,val_transform)数据集封装DataLoader类BATCH_SIZE128trainloaderDataLoader(train_data,batch_sizeBATCH_SIZE,shuffleTrue)valloaderDataLoader(val_data,batch_sizeBATCH_SIZE,shuffleTrue)testloaderDataLoader(test_data,batch_sizeBATCH_SIZE,shuffleFalse)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询