torch.nn.Linear
torch.nn.Linear
是PyTorch中的一个线性层,它实现了一个全连接层,即输入和输出之间的每个神经元都连接到彼此。它的构造函数接受两个参数:输入特征的数量和输出特征的数量。例如,如果你想要将一个长度为100的输入向量映射到一个长度为10的输出向量,可以使用以下代码创建一个线性层:
import torch
import torch.nn as nn
linear_layer = nn.Linear(100, 10)
在前向传递过程中,你可以将输入张量传递给线性层,然后通过调用线性层的函数来计算输出张量。例如:
input_tensor = torch.randn(2, 100) # 随机生成2个100维的输入向量
print("input_tensor: ", input_tensor)
output_tensor = linear_layer(input_tensor) # 计算输出张量
print("output_tensor: ", output_tensor)
在这个例子中,我们创建了一个大小为100x10的线性层,然后将一个大小为32x100的输入张量传递给它。线性层将对每个输入向量进行线性变换,并输出一个大小为32x10的输出张量。
线性层在深度学习中非常常用,它可以用于实现神经网络中的任何层,例如全连接层、卷积层等等。
输出结果如图所示,注意每次执行上述代码,输出的tensor不一样:
torch.nn.Dropout
torch.nn.Dropout
是PyTorch中的一个Dropout层,它可以在训练期间随机地将一些神经元的输出设置为0,以减少过拟合。Dropout层通常被用于全连接层和卷积层中,可以在训练期间随机地将一些神经元的输出设置为0,然后将剩余的神经元的输出乘以一个缩放因子,以保持其期望值不变。
Dropout层的构造函数接受一个参数,即dropout_prob
,它指定了每个神经元被设置为0的概率。例如,如果你想要在每个Dropout层中随机丢弃50%的神经元,可以使用以下代码创建一个Dropout层:
import torch
import torch.nn as nn
dropout_layer = nn.Dropout(0.5)
在前向传递过程中,你可以将输入张量传递给Dropout层,然后通过调用Dropout层的函数来计算输出张量。例如:
input_tensor = torch.randn(2, 100) # 同上
output_tensor = dropout_layer(input_tensor) # 计算输出张量
print("output_tensor: ", output_tensor)
在这个例子中,我们创建了一个Dropout层,它会随机地将每个神经元的输出设置为0或缩放因子的倒数。然后,我们将一个大小为32x100的输入张量传递给它,并计算一个大小相同的输出张量。
Dropout层是一种常用的正则化技术,可以有效地减少神经网络的过拟合。它可以用于任何深度学习模型中,特别是在训练数据较少或模型较大时,可以帮助提高模型的泛化能力。
输出结果如图所示,可以看出,不论正负,约有一半0.0000: