ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

卷积神经网络详解(CNN)

2026/9/26 20:04:46 拓冰建站 浏览量
卷积神经网络详解(CNN) 卷积神经网络是一种稀疏连接的神经网络虽然由于稀疏连接较全连接神经网络失去了一些拟合能力但以此换来的对训练成本的降低却是极高的。在CNN发展史上一些经典模型有LeNet-5、AlexNet、VGG、ResNet等。1、conv2dimport torch import torch.nn as nn torch.nn.Conv2d(in_channels,out_channels,kernel_size,strade,padding,dilation,groups,bias,padding_modezeros)1、in_channels输入通道数即输入的特征图数量2、out_channels输出通道数即卷积核数量在groups参数为1的情况下每个卷积核会逐一与输入特征图交互3、kernel_size卷积核大小4、stride步长即卷积核单次移动步数5、padding填充即在特征图四周填充的0的层数6、dilation空洞率正常情况下为1大于等于2的情况下卷积核会间隔dilation-1个像素7、groups分组卷积输入通道和输出通道必须能被groups整除8、bias类似于axb中的b值是一个可学习参数9、padding_mode默认zeors2、示例代码import torch import torch.nn as nn from torchvision import transforms,datasets import torch.utils.data as Data torch.cuda.empty_cache() devicetorch.device(cuda:0 if torch.cuda.is_available() else cpu) BATCH_SIZE50 transformtransforms.Compose([ transforms.Resize((224,224)), transforms.ToTensor(), transforms.Normalize((0.1307,),( 0.3081,)) ]) train_datadatasets.MNIST( rootD:/mypython/MNISTdataset, trainTrue, downloadTrue, transformtransform ) #print(train_data.train_data.size()) #print(train_data.train_labels.size()) train_loaderData.DataLoader(datasettrain_data,batch_sizeBATCH_SIZE,shuffleTrue) traintest,labeltestnext(iter(train_loader)) #print(traintest.shape) #print(labeltest.shape) test_datadatasets.MNIST( rootD:/mypython/MNISTdataset, trainFalse, transformtransform ) test_loaderData.DataLoader(datasettest_data,batch_size50,shuffleFalse) test_x,test_ynext(iter(test_loader)) #print(test_x.size()) #print(test_y.size()) class CNN(nn.Module): def __init__(self): super(CNN, self).__init__() self.conv1nn.Conv2d(in_channels1,out_channels32,kernel_size2,stride2,padding0) self.relu1nn.ReLU() self.pool1nn.AvgPool2d(kernel_size2,stride2) self.fc1nn.Linear(32*56*56, 128) self.relu2nn.ReLU() self.fc2nn.Linear(128,10) def forward(self,x): xself.pool1(self.relu1(self.conv1(x))) xx.view(-1,32*56*56) xself.fc2(self.relu2(self.fc1(x))) return x modelCNN() modelmodel.to(devicedevice) optimizertorch.optim.Adam(model.parameters(),lr0.01) loss_functorch.nn.CrossEntropyLoss() for step,(x,y) in enumerate(train_loader): b_xx.to(devicedevice) b_yy.to(devicedevice) outputmodel(b_x) lossloss_func(output,b_y) optimizer.zero_grad() loss.backward() if step % 100 0: t_xtest_x.to(devicedevice) t_ytest_y.to(devicedevice) test_outputmodel(t_x) pred_ytorch.max(test_output,1)[1].data.squeeze() accuracy(pred_yt_y).sum().item()/float(test_y.size(0)) print(train loss%.4f %loss.data,|test accuracy:%.2f %accuracy)