ChatGPT学习笔记之Linear层和ReLU 激活函数
有一个简单的学习模型
class SimpleModel(nn.Module): def __init__(self): super(SimpleModel, self).__init__() self.fc1 = nn.Linear(4, 16) # 输入4维,隐藏层16维 self.fc2 = nn.Linear(16, 4) # 隐藏层16维,输出4类 self.relu = nn.ReLU() # 激活函数ReLU def forward(self, x): x = self.relu(self.fc1(x)) x = self.fc2(x) return x
问:为什么模型中需要Linear和ReLU
问:4维向量如何映射到16维
问:16维如何映射到4维
常见的层
-
卷积层 (
nn.Conv2d
):- 用于处理图像数据,进行卷积操作,提取局部特征。
- 例子:
nn.Conv2d(in_channels, out_channels, kernel_size)
-
池化层 (
nn.MaxPool2d
,nn.AvgPool2d
):- 用于下采样操作,减少特征图的尺寸,同时保留重要信息。
- 例子:
nn.MaxPool2d(kernel_size, stride)
-
批量归一化层 (
nn.BatchNorm2d
):- 用于对每一批数据进行归一化,稳定训练过程。
- 例子:
nn.BatchNorm2d(num_features)
-
循环神经网络层 (
nn.RNN
,nn.LSTM
,nn.GRU
):- 用于处理序列数据,例如时间序列、文本等。
- 例子:
nn.LSTM(input_size, hidden_size, num_layers)
-
嵌入层 (
nn.Embedding
):- 用于将离散的词汇表示为连续的向量,用于自然语言处理任务。
- 例子:
nn.Embedding(num_embeddings, embedding_dim)
常见的激活函数
-
ReLU (
nn.ReLU
):- 例子:
nn.ReLU()
- 例子:
-
Sigmoid (
nn.Sigmoid
):- 用于将输出映射到(0, 1)区间。
- 例子:
nn.Sigmoid()
-
Tanh (
nn.Tanh
):- 用于将输出映射到(-1, 1)区间。
- 例子:
nn.Tanh()
-
Leaky ReLU (
nn.LeakyReLU
):- 类似于ReLU,但允许小的负梯度。
- 例子:
nn.LeakyReLU(negative_slope)
-
Softmax (
nn.Softmax
):- 用于多分类问题,将输出转换为概率分布。
- 例子:
nn.Softmax(dim)
常见的损失函数
-
交叉熵损失 (
nn.CrossEntropyLoss
):- 用于多分类问题。
- 例子:
nn.CrossEntropyLoss()
-
均方误差损失 (
nn.MSELoss
):- 用于回归问题。
- 例子:
nn.MSELoss()
-
二分类交叉熵损失 (
nn.BCELoss
):- 用于二分类问题。
- 例子:
nn.BCELoss()
常见的优化器
-
随机梯度下降 (
torch.optim.SGD
):- 例子:
torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
- 例子:
-
Adam (
torch.optim.Adam
):- 例子:
torch.optim.Adam(model.parameters(), lr=0.001)
- 例子:
-
RMSprop (
torch.optim.RMSprop
):- 例子:
torch.optim.RMSprop(model.parameters(), lr=0.01)
- 例子:
这些层和函数可以组合起来构建各种复杂的神经网络模型,适用于不同的任务和数据类型。具体选择哪些层和函数取决于你要解决的问题和数据的特性。