这篇文章主要记录的是在学习过程中,根据老师所讲解的有关于Raytune自动化调参的实例的记录。
Ray tune调参
主要对pytorch的神经网络进行自动调参
定义实验对象
在进行自动调参之前,需要创建一个实验对象的函数,该函数内需要给Ray tune提交调参监控指标,如正确率,误差平方等。
import ray
from ray import tune
from ray.tune.schedulers import AsyncHyperBandScheduler
首先,定义一个可根据传入参数动态调整的网络结构,其中的hidden_size用来控制隐藏层的神经元个数。
import os
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.utils.data import DataLoader
import torch.utils.data as Data
from torchvision import transforms,datasets
import matplotlib.pyplot as plt
import numpy as np
from tqdm.notebook import tqdm
class MNISTNet(nn.Module):
def __init__(self,hidden_size = 512):
# 定义网络使用的结构
super(MNISTNet,self).__init__()
self.fc1 = nn.Linear(28*28,hidden_size)
self.fc2 = nn.Linear(hidden_size,10)
def forward(self,x):
# 定义网络计算全过程
# x(batch_size,channel,height,width)
batch_size = x.shape[0]
x = torch.squeeze(x,1).reshape(batch_size,-1) #因为mnist图像时灰度图,故channel为1,需要squeeze降维
a1 = F.relu(self.fc1(x))
z2 = self.fc2(a1)
#最后的softmax函数包含在了损失函数中,因此不需要在此计算
return z2
其次,需要向训练pytorch神经网络一样,编写训练以及测试时的代码,同时需要在每次训练完成添加一个保存参数的步骤,并将所有过程封装程函数调用。
def train(model,optimizer,train_loader,loss_function=None,device = "cpu",epoch = 0):
# print("当前使用的训练设备为:",device)
model.train()
for data in train_loader:
image