☰
卷积神经网络详解(CNN)
2026/9/26 20:04:08 网站建设 项目流程

卷积神经网络是一种稀疏连接的神经网络,虽然由于稀疏连接较全连接神经网络失去了一些拟合能力,但以此换来的对训练成本的降低却是极高的。在CNN发展史上一些经典模型有LeNet-5、AlexNet、VGG、ResNet等。

1、conv2d

import torch import torch.nn as nn torch.nn.Conv2d(in_channels,out_channels,kernel_size,strade,padding,dilation,groups,bias,padding_mode='zeros')

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

类似于ax+b中的b值,是一个可学习参数

9、padding_mode

默认zeors

2、示例代码

import torch import torch.nn as nn from torchvision import transforms,datasets import torch.utils.data as Data torch.cuda.empty_cache() device=torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') BATCH_SIZE=50 transform=transforms.Compose([ transforms.Resize((224,224)), transforms.ToTensor(), transforms.Normalize((0.1307,),( 0.3081,)) ]) train_data=datasets.MNIST( root='D:/mypython/MNISTdataset', train=True, download=True, transform=transform ) #print(train_data.train_data.size()) #print(train_data.train_labels.size()) train_loader=Data.DataLoader(dataset=train_data,batch_size=BATCH_SIZE,shuffle=True) traintest,labeltest=next(iter(train_loader)) #print(traintest.shape) #print(labeltest.shape) test_data=datasets.MNIST( root='D:/mypython/MNISTdataset', train=False, transform=transform ) test_loader=Data.DataLoader(dataset=test_data,batch_size=50,shuffle=False) test_x,test_y=next(iter(test_loader)) #print(test_x.size()) #print(test_y.size()) class CNN(nn.Module): def __init__(self): super(CNN, self).__init__() self.conv1=nn.Conv2d(in_channels=1,out_channels=32,kernel_size=2,stride=2,padding=0) self.relu1=nn.ReLU() self.pool1=nn.AvgPool2d(kernel_size=2,stride=2) self.fc1=nn.Linear(32*56*56, 128) self.relu2=nn.ReLU() self.fc2=nn.Linear(128,10) def forward(self,x): x=self.pool1(self.relu1(self.conv1(x))) x=x.view(-1,32*56*56) x=self.fc2(self.relu2(self.fc1(x))) return x model=CNN() model=model.to(device=device) optimizer=torch.optim.Adam(model.parameters(),lr=0.01) loss_func=torch.nn.CrossEntropyLoss() for step,(x,y) in enumerate(train_loader): b_x=x.to(device=device) b_y=y.to(device=device) output=model(b_x) loss=loss_func(output,b_y) optimizer.zero_grad() loss.backward() if step % 100 ==0: t_x=test_x.to(device=device) t_y=test_y.to(device=device) test_output=model(t_x) pred_y=torch.max(test_output,1)[1].data.squeeze() accuracy=(pred_y==t_y).sum().item()/float(test_y.size(0)) print('train loss;%.4f' %loss.data,'|test accuracy:%.2f' %accuracy)

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

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

立即咨询