欢迎访问宙启技术站
智能推送

PyTorch中的leaky_relu()函数在深度学习中的实践

发布时间:2023-12-24 04:44:00

PyTorch中的leaky_relu()函数是激活函数的一种实现,也被称为带泄露的ReLU。相比于ReLU函数,leaky ReLU函数在输入小于零的时候不会完全截断,而是对小于零的输入进行一个小的线性变换。这一特性使得leaky ReLU函数在处理较大的负输入时更加平滑,有助于减轻梯度消失的问题。

以下是一个使用leaky_relu()函数的实例,展示其在深度学习中的应用:

import torch
import torch.nn as nn

# 定义一个简单的神经网络模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 5)
        self.fc2 = nn.Linear(5, 1)
        
    def forward(self, x):
        x = torch.leaky_relu(self.fc1(x))
        x = torch.leaky_relu(self.fc2(x))
        return x

# 创建网络实例
net = Net()

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.01)

# 构造数据集
x = torch.randn(100, 10)
y = torch.randn(100, 1)

# 训练网络
for epoch in range(100):
    # 前向传播
    output = net(x)
    # 计算损失
    loss = criterion(output, y)
    
    # 反向传播和优化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    
    if (epoch+1) % 10 == 0:
        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, 100, loss.item()))

在这个例子中,我们定义了一个简单的神经网络模型,包含两个线性层。在每个线性层之后,我们使用leaky_relu()函数对输出进行激活。然后我们定义了损失函数和优化器,并利用随机生成的数据集对网络进行训练。

在训练过程中,我们使用了MSELoss作为损失函数,并使用SGD作为优化器。在每个epoch中,我们进行前向传播、计算损失、反向传播和优化。最后打印出每10个epoch的损失值。

通过使用leaky ReLU函数作为激活函数,网络可以更好地处理负数输入,在一定程度上缓解了梯度消失的问题。这使得网络更容易收敛,并提高了模型的性能。