从雄安 “极数” 模型看:结构化数据大模型如何成为实体经济智能化的新引擎

核心内容摘要

matlab anybody opensim包括人机耦合建模、缩放、运动学/逆动力学分析,以及自由度扩建、肌肉重建、RRA/CMC仿真,从理论到代码手把手教会运动生物力学数据代处理、辅导 paper
如何评估企业的量子密钥分发城际网络安全性

RetinaFace多场景落地:会议签到、门禁系统、在线教育人脸对齐实战

基于ResNet的图像分类--算法实现数据准备ResNet概述核心思想

ResNet-18/

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-

)forimage_pathinimage_paths:# 获取图像类别labelimage_path.split(os.path.sep)[-2]# 读取每个类别的图像imagecv

imread(image_path)# 将图像通道从BGR转换为RGBimagecv

cvtColor(image,cv

COLOR_BGR2RGB)# 统一输入图像的尺寸imagecv

resize(image,(200,

,interpolationcv

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_size

4,stratifylabels,random_state

(x_val,x_test,y_val,y_test)train_test_split(X,Y,test_size

5,random_state

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残差

ResNet-18/34使用基本的残差块Conv 3×3 ReLU Conv 3×3跳跃连接如果输入输出维度相同直接相加如果维度不同使用1×1卷积调整维度。

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参数数量

1

7M

2

8M

2

6M

4

5M

6

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_classes

:super(ResNet,self).__init__()# 前几层图像转换self.prenn.Sequential(nn.Conv2d(3,64,7,2,3,biasFalse),nn.BatchNorm2d(

,nn.ReLU(inplaceTrue),nn.MaxPool2d(3,2,

,)# 重复的网络层分别有

3、

4、

3个残差块self.layer1self._make_layer(64,128,

self.layer2self._make_layer(128,256,4,stride

self.layer3self._make_layer(256,512,6,stride

self.layer4self._make_layer(512,512,3,stride

# 分类用的全连接层将一个多通道的特征图映射到一个维度为类别数目的向量self.fcnn.Linear(512,num_classes)def_make_layer(self,inchannel,outchannel,block_num,stride

:# 定义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,

xx.view(x.size(

,-

returnself.fc(x)数据增强# 定义训练图像增强变换的方法train_transformtransforms.Compose([transforms.ToPILImage(),# transforms.Resize((224,

),transforms.ToTensor(),transforms.Normalize(mean[

485,

456,

406],std[

229,

224,

225])])# 定义训练图像增强变换的方法val_transformtransforms.Compose([transforms.ToPILImage(),# transforms.Resize((224,

),transforms.ToTensor(),transforms.Normalize(mean[

485,

456,

406],std[

229,

224,

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)

嘘别告诉妈妈-嘘别告诉妈妈应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123