torch.optim as optim

本文深入探讨了PyTorch中Adam优化器的使用方法,包括如何设置学习率、动量参数以及权重衰减等关键参数,为深度学习模型训练提供了优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

import torch.optim as optim

optimizer = optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999))

optimizer.step()

优化步骤: 
所有的优化器Optimizer都实现了step()方法来对所有的参数进行更新,它有两种调用方法:

optimizer.step()

参数:

params(iterable):可用于迭代优化的参数或者定义参数组的dicts。
lr (float, optional) :学习率(默认: 1e-3)
betas (Tuple[float, float], optional):用于计算梯度的平均和平方的系数(默认: (0.9, 0.999))
eps (float, optional):为了提高数值稳定性而添加到分母的一个项(默认: 1e-8)
weight_decay (float, optional):权重衰减(如L2惩罚)(默认: 0)
step(closure=None)函数:执行单一的优化步骤
closure (callable, optional):用于重新评估模型并返回损失的一个闭包 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

from typing import List,Tuple import torch import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): def __init__(self, input_size:int, hidden_size:List[int], output_size:int, dropout:float): super(Net, self).__init__() self.input_size = input_size self.hidden_size = hidden_size self.output_size = output_size self.dropout = dropout # Construct the hidden layers self.hidden_layers = nn.ModuleList() for i in range(len(hidden_size)): if i == 0: self.hidden_layers.append(nn.Linear(input_size, hidden_size[i])) else: self.hidden_layers.append(nn.Linear(hidden_size[i-1], hidden_size[i])) # Construct the output layer self.output_layer = nn.Linear(hidden_size[-1], output_size) # Set up the dropout layer self.dropout_layer = nn.Dropout(p=dropout) def forward(self, x:torch.Tensor) -> torch.Tensor: # Pass the input through the hidden layers for layer in self.hidden_layers: x = F.relu(layer(x)) x = self.dropout_layer(x) # Pass the output from the last hidden layer through the output layer x = self.output_layer(x) return x def train_model(model:Net, train_data:Tuple[torch.Tensor, torch.Tensor], test_data:Tuple[torch.Tensor, torch.Tensor], batch_size:int, num_epochs:int, learning_rate:float): # Extract the inputs and labels from the training data train_inputs, train_labels = train_data # Define the loss function and optimizer criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=learning_rate) # Loop over the training data for the specified number of epochs for epoch in range(num_epochs): # Shuffle the training data perm = torch.randperm(train_inputs.size(0)) train_inputs = train_inputs[perm] train_labels = train_labels[perm] # Loop over the training data in batches for i in range(0, train_inputs.size(0), batch_size): # Extract the current batch of data inputs = train_inputs[i:i+batch_size] labels = train_labels[i:i+batch_size] # Zero the gradients optimizer.zero_grad() # Forward pass outputs = model(inputs) loss = criterion(outputs, labels) # Backward pass and update parameters loss.backward() optimizer.step() # Evaluate the model on the test data test_inputs, test_labels = test_data test_outputs = model(test_inputs) test_loss = criterion(test_outputs, test_labels) test_accuracy = accuracy(test_outputs, test_labels) # Print the epoch number, training loss, and test accuracy print(f"Epoch {epoch+1}/{num_epochs}: Train loss={loss:.4f}, Test loss={test_loss:.4f}, Test accuracy={test_accuracy:.4f}") def accuracy(outputs:torch.Tensor, labels:torch.Tensor) -> float: predictions = torch.argmax(outputs, dim=1) correct_predictions = torch.sum(predictions == labels) accuracy = correct_predictions.float() / labels.size(0) return accuracy.item()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值