- 单通道是指图像仅包含一种颜色通道的图像。在单通道图像中,每个像素的数值代表了该像素在该颜色通道中的强度或亮度。
- 灰度图像和纯黑白图像相当于只有一个通道的彩色图像。
- filter1T = tf.Variable(tf.ones([2,2,1,1]), dtype=tf.float32)
本条语句定义了一个卷积核,形态为[2,2,1,1],高与宽都是2﹐输入和输出通道数都是1. - 卷积核的数量决定了输出特征图的通道数。在卷积神经网络(CNN)中,每个卷积核生成一个输出通道。
- 批次(batch)是指同时处理的一组样本数据
- 批次的大小(batch size)是指每个批次中包含的样本数
- nn.Module 是一个在 PyTorch 中用于构建神经网络模型的基本类
- 通过继承 nn.Module 类并实现其中的方法,可以创建自定义的神经网络模型。在子类中,通常会在构造函数 init 中定义网络的层和参数,并在 forward 方法中定义前向传播的逻辑。
- super(Net, self)表示调用了父类nn.Module,其中Net是当前子类的类名,self是子类的实例对象。而__init__()是nn.Module父类中的构造方法
- nn.Conv2d是 PyTorch 中用于创建二维卷积层的类
- nn.Conv2d(in_channels输入张量通道数, out_channels输出张量通道数, kernel_size卷积核大小, stride=1步长, padding=0输入张量四周的填充大小)
- nn.Linear是 PyTorch 中用于创建线性(全连接)层的类。线性层用于将输入张量与权重矩阵相乘并添加偏置,生成输出特征。
- 输入张量的形状通常是 (batch_size, input_size),其中 batch_size 表示批处理的大小,而 input_size 表示每个样本的输入特征的大小。
- nn.MaxPool2d 是 PyTorch 中用于创建二维最大池化层的类。
- kernel_size:池化窗口的大小,表示池化窗口的高度和宽度。
stride:池化窗口的步长,默认为 kernel_size。
padding:输入张量四周的填充大小,默认为 0。 - num_flat_features 用于计算输入张量中特征的总数量,将输入张量展平为一维向量时所需的元素数量。
- 三个卷积核分别在三个通道上滑动,然后矩阵相乘,得到的三个矩阵相加
- init 是Python中的一个特殊方法,用作构造函数。它在创建一个类的对象时被自动调用,并且可以用来初始化对象的属性和数据成员。
- self参数是必须的,它代表当前对象的引用。通过self参数,可以在构造函数中访问和操作对象的属性和方法。
- 需要注意的是,在Python 2.x中,super函数的用法有所不同。在Python 2.x中,我们需要传递两个参数给super函数,分别是子类和实际的对象。例如,super(ChildClass, self).some_method()。但在Python 3.x中,可以直接使用无参数的super()来调用父类的方法。
- 在类的方法中,可以使用self.attribute来引用对象的属性,并对其进行读取或赋值操作。
- input_variable.size() 来获取输入张量 input_variable 的大小。在输出结果中,返回的是一个包含四个元素的元组,分别表示批次大小、通道数、高度和宽度。
- conv_layer.weight.size:用于获取卷积层权重大小的方法,返回一个元组,其中包含了权重张量的尺寸信息。这意味着卷积层的输出通道数为 16,输入通道数为 3,卷积核的高度为 3,卷积核的宽度也为 3。
- 在输出结果中,返回的是一个包含四个元素的元组,分别表示批次大小、通道数、高度和宽度
- iter(testloader) 是一个Python函数调用,用于将给定的testloader对象转换为一个可迭代的对象。这样可以在后续的代码中使用for循环来迭代遍历testloader中的数据。
- test_data_iter 的迭代器中获取下一个数据。根据Python 3的语法,这个方法应该是 next(test_data_iter)。
transform
是一个torchvision.transforms.Compose
对象。它定义了一个数据预处理的操作序列,该序列包含两个变换操作:
-
transforms.ToTensor()
:将输入的 PIL 图像或 ndarray 转换为张量(Tensor)形式。同时,它会将像素值从 0 到 255 缩放到 0 到 1 的范围内。 -
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
:对张量进行标准化处理。它会将每个通道的像素值减去 0.5,并除以 0.5,以便将像素值范围从 0 到 1 缩放到 -1 到 1 之间。
这个 Compose
对象可以在数据集加载或图像预处理过程中使用,以便将特定的变换按顺序应用到输入数据上。
-
loss_function 是一个用于计算交叉熵损失的 PyTorch 的损失函数对象。nn.CrossEntropyLoss() 是一个常用的分类问题损失函数,在训练神经网络模型时经常使用。
-
net.parameters() 是指将神经网络模型 net 的参数传递给优化器。优化器会根据损失函数的计算结果以及设置的学习率来更新模型的参数。
-
使用Dropout的方式在网络正向传播过程中随机失活一部分神经元,p 是保留输入单元的概率。通常,它是一个介于0和1之间的值。在这里,p=0.5 表示每个输入单元有50%的概率被保留,50%的概率被置零。
-
按住shift键+鼠标右键 打开powershell窗口
-
nn.Sequential 是一种简化神经网络模型构建的方式,特别适合顺序层的堆叠。
-
input_size。如果你的图像是 3 通道的彩色图像,且每张图像的大小是 224x224 像素,那么 input_size 可以设置为 3×224×224。
-
nn.Linear(12866,2048),这意味着在前向传播过程中,输入特征将通过 128×6×6 个权重连接到这 2048 个神经元,形成 2048 个输出值。
-
isinstance() 是 Python 中的一个内置函数,用于检查一个对象是否属于指定的类或类型。
-
self.modules() 是 PyTorch 中用于迭代模型中所有子模块的方法。它是 nn.Module 类的一个成员方法,通常用于遍历神经网络模型中的所有子模块,包括嵌套在模型中的子模块。这个方法返回一个迭代器,允许你逐个访问模型中的每个子模块,包括模型本身。
-
nn.init.kaiming_normal 使用正态分布(高斯分布)来随机初始化权重,并考虑了权重矩阵的尺寸。这个方法适用于具有 ReLU(修正线性单元)激活函数的网络层,因为它可以有效地解决梯度消失和梯度爆炸问题。
-
torch.device 是PyTorch中用于管理设备(如CPU或GPU)的类。它允许你在PyTorch中明确指定要在哪个设备上执行张量操作,
-
datasets.ImageFolder 是 PyTorch 中的一个数据集类,用于加载包含图像的文件夹数据集。它是 torchvision 库的一部分,通常用于处理图像分类任务。
-
具体来说,datasets.ImageFolder 返回一个包含以下信息的数据集对象:①数据:已经加载的图像数据,通常是张量的形式。这些张量包含了图像的像素值,经过预处理操作。②标签:每个图像的标签,代表图像所属的类别。这些标签通常是整数值,从0到类别数量-1。
-
DataLoader 是PyTorch中的一个实用工具,用于批量加载和处理数据,通常用于训练深度学习模型。shuffle=True:这表示在每个时代(epoch)开始时是否随机打乱数据集的顺序。
-
在一个 with torch.no_grad(): 块中的代码将不会跟踪计算梯度,这可以提高代码的执行效率,尤其是当你不打算反向传播或更新模型权重时。
-
torch.unsqueeze 是 PyTorch 中的一个函数,用于在张量中增加一个新的维度。具体来说