使用for循环创建神经网络实例并针对不同的学习率进行训练。从第二个实例开始总是卡住

我正在学习斯坦福大学的CS231n课程。试图理解为什么会发生以下情况。这是代码。数据的形状为(49000, 32, 32, 3)。

from cs231n.solver import Solverfrom cs231n.classifiers.fc_net import FullyConnectedNetfrom cs231n.data_utils import get_CIFAR10_datadata = get_CIFAR10_data()for k, v in list(data.items()):  print(('%s: ' % k, v.shape))best_model = Nonebest_val_acc = -1hidden_dims = [100, 100, 100, 100, 100]reg= 0.0std= 1e-2learning_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 solverprint("Best learning rate found to be: ", best_lr)

问题在于第一个实例,即lr = 1e-4运行正常,但从第二个实例开始,代码执行变得非常慢。

这不是学习率的问题,因为我尝试了不同的'learning_rates'值,learning_rates[0]总是正常进行,但无论实际值是什么,后续的learning_rates都变得非常慢。

我在Solver()类中添加了一些print()语句来尝试调试它。使用lr[0]时,一切正常进行。但从lr[1]开始,Solver.train()内的每个语句似乎都执行得更慢了。

我的猜想是,当第二个FullyConnectedNet()Solver()实例进入内存时,第一个实例和所有参数仍然存在,这可能导致代码执行变慢。我不确定如何测试这一点。

编辑:我想知道如何在一个for循环中执行所有模型,而不是一个接一个地分别运行它们?我不是在寻找好的学习率。


回答:

我在FullyConnectedNet()类的实现中犯了一个错误。我没有复制一个列表,而是将其赋值给另一个,然后对其进行了更改,导致第一个隐藏层的大小变为3072,进而导致了所有减速。

这么基本的错误。但我学到了一些教训。

对不起浪费了大家的时间。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注