使用 epoch 和 batch 进行神经网络优化

Posted

技术标签:

【中文标题】使用 epoch 和 batch 进行神经网络优化【英文标题】:Neural Network optimization using epoch and batch 【发布时间】:2021-04-25 22:35:40 【问题描述】:

我正在尝试通过查找提供最高准确度的 epoch 和 batch 的数量来优化给定的神经网络(例如 Perceptron Multilayer,具有 2 个隐藏层)。

   for epoch from 10 to 200 (in steps of 10):
         for batch from 40 to 200 (in steps of 20):
                modele.fit (X_train, Y_train, epochs = epoch, batch_size = batch)
                I save batch, epoch, Accuracy;

之后我保留了最小的epoch,对应的batch最小,识别度最高 ex best_params: epoch = 10, batch = 150 => 准确率 = 94%

我的问题是,当我使用 best_params 重新运行我的模型时,它并没有给我相同的结果(损失、准确度),甚至有时准确度非常低(例如 10%)。

我尝试修复种子,但没有最好的结果

问候

Djam75

【问题讨论】:

请附上型号的代码。 【参考方案1】:

感谢您的更新。

我通过保存模型并在之后加载它来解决我的问题。

感谢想法(批量标准化)和额外的想法:不是用户;-)

问候

【讨论】:

【参考方案2】:

这可能是由于随机参数初始化而发生的。因为如果您要构建一个没有迁移的端到端模型,则学习权重,每次训练架构时都会获得其参数的随机值。

在这种情况下,一个好的做法是根据您的架构在某些层之后使用批量标准化层。 tensoflow-implementation

pytorch-implmentation

额外的想法: 不要在模型实现中使用任何“for”、“while”循环。 您可以按照 TensorFlow 或 PyTorch 中的模板进行操作。 或者,如果您从头开始构建一个完整的模型,请使用类似 NumPy 的指标操作库矢量化操作

【讨论】:

非常感谢您的帮助,我会实施的。【参考方案3】:
df=pd.DataFrame(columns=['Nb_Batch','Nb_Epoch','Accuracy'])
i=0
lst_loss=[]
lst_accuracy=[]
lst_epoch=list(np.arange(10,200,10))
lst_batch=list(np.arange(100,400,20))
for epoch in lst_epoch:
    print ('---------------- Epoch ' + str(epoch)+ '------------------')
    for batch in lst_batch:
        modelSimple.fit(X_train, Y_train, nb_epoch = epoch, batch_size = batch, verbose = 0)
        score = modelSimple.evaluate(X_test, Y_test)
        df.loc[i,"Nb_Batch"]=batch
        df.loc[i,"Nb_Epoch"]=epoch
        df.loc[i,"Accuracy"]=score[1]*100
        i=i+1

【讨论】:

【参考方案4】:

我认为在完成某些批量大小和时期的训练后,您可能不会更新权重矩阵。

请同时包含代码以查看问题

【讨论】:

以上是关于使用 epoch 和 batch 进行神经网络优化的主要内容,如果未能解决你的问题,请参考以下文章

深度学习基础Epoch, Batch, Iteration这三个概念的区别与联系

神经网络 专业术语解释(Step, Batch Size, Iteration,Epoch)

2020-07-10epoch、iteration、batch_size的关系和选择

深度学习中epoch,batch的概念--笔记

深度学习中epoch,batch的概念--笔记

深度学习中epoch,batch的概念--笔记