原型网络Prototypical Network的python代码逐行解释,新手小白也可学会!!-----系列3

在这里插入图片描述


一、原始代码----搭建卷积神经网络CNN

import os
import numpy as np
import h5py
import random
import csv
import torch
import torchvision
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.autograd as autograd
from torch.autograd import Variable

class CNNnet(torch.nn.Module):
	def __init__(self,input_shape,outDim):	
		super(CNNnet,self).__init__()
		self.conv1 = torch.nn.Sequential(
			torch.nn.Conv2d(in_channels=input_shape[0],
							out_channels=16,
							kernel_size=3,
							stride=1,
							padding=1),
			torch.nn.BatchNorm2d(16),
			torch.nn.MaxPool2d(2),
			torch.nn.ReLU()
		)
		self.conv2 = torch.nn.Sequential(
			torch.nn.Conv2d(16,32,3,1,1),
			torch.nn.BatchNorm2d(32),
			nn.MaxPool2d(2),
			torch.nn.ReLU()
		)
		self.conv3 = torch.nn.Sequential(
			torch.nn.Conv2d(32,64,3,1,1),
			torch.nn.BatchNorm2d(64),
			nn.MaxPool2d(2),
			torch.nn.ReLU()
		)
		self.conv4 = torch.nn.Sequential(
			torch.nn.Conv2d(64,64,3,1,1),
			torch.nn.BatchNorm2d(64),
			#nn.MaxPool2d(2)
			torch.nn.ReLU()
		)
		self.conv5 = torch.nn.Sequential(
			torch.nn.Conv2d(64,64,3,1,1),
			torch.nn.BatchNorm2d(64),
			#nn.MaxPool2d(2)
			torch.nn.ReLU()
		)
		self.mlp1 = torch.nn.Linear(10816,125)
		self.mlp2 = torch.nn.Linear(125,outDim)
		
	def forward(self, x):
		x = self.conv1(x)
		x = self.conv2(x)
		x = self.conv3(x)
		x = self.conv4(x)
		x = self.conv5(x)
		x = self.mlp1(x.view(x.size(0),-1))
		x = self.mlp2(x)
		return x

二、每一行代码详细解释

import os:导入Python的os库。这个库提供了很多与操作系统交互的功能,比如访问文件系统、环境变量等。

import numpy as np:导入NumPy库,并给它取了一个简短的别名np。NumPy是一个用于处理数组和矩阵的Python库,广泛应用于科学计算。

import h5py:导入h5py库。h5py是Python的一个库,用于读写HDF5文件。HDF5是一种存储大量数据的文件格式。

import random:导入random库,用于生成随机数。

import csv:导入csv库,用于读写CSV文件。

import torch:导入PyTorch库。PyTorch是一个用于机器学习和深度学习的开源库。

import torchvision:导入torchvision库。torchvision是PyTorch的一个库,提供了用于计算机视觉任务的各种数据集、预训练模型和图像处理工具。

import torchvision.transforms as transforms:从torchvision库中导入transforms模块,用于图像预处理。

from torch.utils.data import DataLoader:从torch库中导入DataLoader类,用于加载数据。

import torch.nn as nn:导入torch库的nn模块,用于神经网络操作。

import torch.nn.functional as F:导入torch库的nn.functional模块,用于神经网络的功能操作。

import torch.optim as optim:导入torch库的optim模块,用于优化神经网络的参数。

import torch.autograd as autograd:导入torch库的autograd模块,用于自动微分和梯度计算。

from torch.autograd import Variable:从torch库的autograd模块中导入Variable类。Variable是PyTorch中用于包装张量和计算梯度的类。

class CNNnet(torch.nn.Module)::定义一个名为CNNnet的类,它继承了PyTorch中的torch.nn.Module类,表示它是一个神经网络。

def __init__(self,input_shape,outDim)::定义类的初始化函数,它接受两个参数,input_shape和outDim。input_shape定义了输入图像的大小,而outDim是输出维数,可能表示分类的类别数量。

super(CNNnet,self).__init__():调用父类torch.nn.Module的初始化函数。

self.conv1 = torch.nn.Sequential(...):定义一个名为conv1的卷积层,它包含一个大小为3x3的卷积核,输入通道数为input_shape[0],输出通道数为16,步长为1,填充为1。后面跟着一个批量归一化层(BatchNorm2d(16)),一个最大池化层(MaxPool2d(2)),以及一个ReLU激活函数(torch.nn.ReLU())。

self.conv2 = torch.nn.Sequential(...):定义一个名为conv2的卷积层,配置与conv1类似,但卷积核数量变为32,并且也有一个最大池化层和一个ReLU激活函数。

self.conv3 = torch.nn.Sequential(...):定义一个名为conv3的卷积层,配置与conv2类似,但卷积核数量变为64,并且也有一个最大池化层和一个ReLU激活函数。

self.conv4 = torch.nn.Sequential(...):定义一个名为conv4的卷积层,配置与conv3类似,但此次没有最大池化层,并且有一个ReLU激活函数。

self.conv5 = torch.nn.Sequential(...):定义一个名为conv5的卷积层,配置与conv4类似,但此次没有最大池化层,并且有一个ReLU激活函数。

self.mlp1 = torch.nn.Linear(10816,125):定义一个名为mlp1的全连接层,输入节点数为10816(这可能是经过上述卷积层处理后的特征数量),输出节点数为125。

self.mlp2 = torch.nn.Linear(125,outDim):定义一个名为mlp2的全连接层,输入节点数为125,输出节点数为outDim。

def forward(self, x)::定义前向传播函数。这个函数将输入数据x通过所有的卷积层和全连接层处理,并返回处理后的结果。这个网络设计是标准的卷积神经网络结构,通过多个卷积层、全连接层和激活函数来处理输入数据并产生输出。


总结

这是一个使用PyTorch实现的卷积神经网络(CNN)的代码。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值