卷积
1x1卷积核的作用
1,灵活的控制特征图的深度
2,减少参数
3,现了跨通道的信息组合,并增加了非线性特征
一次卷积后特征图大小
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,就会退出训练循环。