基于深度学习模型去预测材料的吸声性能
训练轮数增加后训练时间变长,可能是由于多种原因造成的,比如模型复杂度高、学习率设置不合理、数据加载方式效率低等。下面为你提供一些调参建议以及修改后的代码示例。
调参建议
- 学习率:随着训练的进行,学习率过大可能导致模型在最优解附近震荡,难以收敛;学习率过小又会使训练速度变慢。可以采用学习率衰减策略,例如在训练一定轮数后降低学习率。
- 批量大小:增大批量大小可以提高训练效率,但可能会导致模型泛化能力下降;减小批量大小可以增加模型的随机性,但训练时间会变长。可以尝试不同的批量大小来找到一个合适的值。
- 优化器:不同的优化器对训练速度和模型性能有不同的影响。可以尝试使用不同的优化器,如 Adam、Adagrad 等。
- 模型复杂度:如果模型过于复杂,训练时间会显著增加。可以尝试减少模型的层数或神经元数量。
代码示例
以下是一个使用 PyTorch 实现的 DNN 模型,包含学习率衰减策略:
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
# 假设你已经有了数据集
# 输入特征维度为 14,输出维度为 600
input_size = 14
output_size = 600
# 定义 DNN 模型
class DNN(nn.Module):
def __init__(self):
super(DNN, self).__init__()
self.fc1 = nn.Linear(input_size, 128)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(128, 256)
self.fc3 = nn.Linear(256, output_size)
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
out = self.relu(out)
out = self.fc3(out)
return out
# 初始化模型
model = DNN()
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 学习率衰减策略
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=20, gamma=0.1)
# 假设你已经将数据集转换为 PyTorch 张量
# 这里使用随机数据作为示例
X_train = torch.randn(1000, input_size)
y_train = torch.randn(1000, output_size)
# 创建数据集和数据加载器
train_dataset = TensorDataset(X_train, y_train)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
# 训练模型
num_epochs = 500
for epoch in range(num_epochs):
running_loss = 0.0
for i, (inputs, labels) in enumerate(train_loader):
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
# 学习率衰减
scheduler.step()
print(f'Epoch {
epoch + 1}/{
num_epochs}, Loss: {
running_loss / len(train_loader)}')
print('Training finished.')
代码解释
- 模型定义:定义了一个简单的三层全连接神经网络。
- 优化器:使用 Adam 优化器,并设置初始学习率为 0.001。
- 学习率衰减:使用
StepLR
学习率衰减策略,每 20 个 epoch 将学习率降低为原来的 0.1 倍。 - 训练过程:在每个 epoch 结束后,调用
scheduler.step()
来更新学习率。
你可以根据实际情况调整模型结构、批量大小、学习率等参数,以获得更好的模型性能。
除了之前提到的 Adam 和 Adagrad 优化器,还有许多其他优化器可用于 DNN 模型,以下是一些常见的优化器及其特点:
1. SGD(随机梯度下降)
- 原理:SGD 是最基础的优化器,它每次迭代从训练数据中随机选取一个样本(或小批量样本),计算其梯度并更新模型参数。更新公式为 θ = θ − η ⋅ ∇ L ( θ ) \theta = \theta - \eta \cdot \nabla L(\theta) θ=θ−η⋅∇L(θ),其中 θ \theta θ 是模型参数, η \eta η 是学习率, ∇ L ( θ ) \nabla L(\theta)