深度学习笔记


卷积

1x1卷积核的作用

1,灵活的控制特征图的深度
2,减少参数
3,现了跨通道的信息组合,并增加了非线性特征

image-20230325092154807

image-20230325092221763

image-20230325092404361

一次卷积后特征图大小

image-20221005211847652

early stopping

在 PyTorch 中,实现 early stopping 可以使用 Callbacks 来实现。Callbacks 是一种 PyTorch 的机制,它可以在模型训练过程中插入一些自定义的代码块。

下面是一个示例代码,用于实现 early stopping 功能:

import numpy as np
import torch

# 定义 EarlyStopping Callback
class EarlyStopping:
    def __init__(self, patience=10, delta=0):
        self.patience = patience
        self.delta = delta
        self.best_score = None
        self.counter = 0
        self.early_stop = False

    def __call__(self, val_loss):
        score = -val_loss
        if self.best_score is None:
            self.best_score = score
        elif score < self.best_score + self.delta:
            self.counter += 1
            if self.counter >= self.patience:
                self.early_stop = True
        else:
            self.best_score = score
            self.counter = 0

# 构建模型
model = torch.nn.Sequential(
    torch.nn.Linear(64, 128),
    torch.nn.ReLU(),
    torch.nn.Linear(128, 10),
    torch.nn.Softmax(dim=1)
)

# 定义损失函数和优化器
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters())

# 定义 EarlyStopping 实例
early_stopping = EarlyStopping(patience=5)

# 训练模型
for epoch in range(num_epochs):
    for data, target in train_loader:
        # 将数据加载到 GPU 上
        data, target = data.cuda(), target.cuda()

        # 前向传播、反向传播和优化
        output = model(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()
        optimizer.zero_grad()

    # 验证模型
    model.eval()
    with torch.no_grad():
        val_loss = 0
        for data, target in val_loader:
            # 将数据加载到 GPU 上
            data, target = data.cuda(), target.cuda()

            # 前向传播和计算验证集上的损失
            output = model(data)
            val_loss += criterion(output, target).item()

        val_loss /= len(val_loader)

        # 判断是否需要提前结束训练
        early_stopping(val_loss)
        if early_stopping.early_stop:
            print("Early stopping")
            break

    # 打印当前训练的 epoch 和验证集上的损失
    print("Epoch [{}/{}], Validation loss: {:.4f}".format(epoch+1, num_epochs, val_loss))

在训练过程中,每个 epoch 结束后都会计算一次验证集上的损失,并调用 EarlyStopping 实例的 call() 方法判断是否需要提前结束训练。如果 EarlyStopping 实例的 early_stop 属性被设置为 True,就会退出训练循环。


文章作者: 马克图布
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 马克图布 !
评论
  目录