Я делаю Стэнфордский CS231n. Пытаясь понять, почему происходит следующее. Вот код Данные имеют форму (49000, 32, 32, 3).
from cs231n.solver import Solver
from cs231n.classifiers.fc_net import FullyConnectedNet
from cs231n.data_utils import get_CIFAR10_data
data = get_CIFAR10_data()
for k, v in list(data.items()):
print(('%s: ' % k, v.shape))
best_model = None
best_val_acc = -1
hidden_dims = [100, 100, 100, 100, 100]
reg= 0.0
std= 1e-2
learning_rates = [1e-4, 1e-5, 1e-6, 1e-7]
for lr in learning_rates:
model = FullyConnectedNet(hidden_dims, reg= reg, weight_scale= std, normalization= None)
solver = Solver(model, data, num_epochs = 10,
batch_size = 200, update_rule= 'adam',
lr_decay = 0.95,
optim_config= {
'learning_rate': lr,
},
verbose = True, print_every= 1000)
solver.train()
val_acc = solver.check_accuracy(data['X_val'], data['y_val'])
if val_acc > best_val_acc:
best_val_acc = val_acc
best_model = model
best_lr = lr
del model
del solver
print("Best learning rate found to be: ", best_lr)
Проблема в том, что первый экземпляр, то есть lr = 1e-4
работает нормально, но со второго экземпляра выполнение кода происходит очень медленно.
Это не проблема скорости обучения, потому что я пробовал разные значения 'learning_rates'
, и learning_rates[0]
всегда работает нормально, но очень медленно, со следующими learning_rates
, независимо от того, какие фактические значения.
Я добавил несколько операторов print()
в класс Solver()
, чтобы попытаться отладить его. С lr[0]
все идет номинально. Но, начиная с lr[1]
, каждое утверждение внутри Solver.train()
, похоже, выполняется медленнее.
Моя гипотеза состоит в том, что, когда вторые экземпляры FullyConnectedNet()
и Solver()
входят в память, первые экземпляры все еще там вместе со всеми параметрами, и, возможно, это вызывает замедление выполнения кода. Я не уверен, как это проверить, хотя.
Редактировать: я хочу знать, как мне выполнить все модели в одном цикле for
вместо того, чтобы запускать их по отдельности? Я не ищу хороших курсов обучения.