解释张量板图

2024-10-03 09:11:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我还是一个新手,我正在努力了解在我的模特们的训练过程中发生了什么。简单地说,我使用slim模型在ImageNet上进行finetuning的预训练。以下是从tensorboard中提取的两个独立模型的一些图:

Model_1 (InceptionResnet_V2)

Inception resnet V2

^{pr2}$

InceptionV4

到目前为止,这两个模型在验证集上的结果都很差(平均Az(ROC曲线下的面积)=0.7(对于Model_1和0.79(对于Model_2),结果都很差)。我对这些图的解释是重量在小批量中没有变化。只是在小批量生产过程中会出现偏差,这可能就是问题所在。但我不知道从哪里可以证实这一点。这是我唯一能想到的解释,但考虑到我还是新手,这可能是错误的。你能和我分享一下你的想法吗?如果需要的话,不要犹豫要求更多的阴谋。在

编辑: 正如你在下面的图中所看到的,权重似乎几乎没有随时间而变化。这适用于两个网络的所有其他权重。这让我觉得某个地方出了问题,却不知道该怎么解释。在

InceptionV4 weights

InceptionV4 weights

InceptionResnetV2 weights

InceptionResnetV2 weights

编辑2: 这些模型最初是在ImageNet上训练的,这些图是在我的数据集上对它们进行微调的结果。我使用的是一个包含19个类的数据集,其中包含大约80万张图像。我在做一个多标签分类问题,我用sigmoid_交叉熵作为损失函数。班里的人很不平衡。在下表中,我们显示了2个子集中每个类的存在百分比(训练、验证):

Objects     train       validation
obj_1       3.9832 %    0.0000 %
obj_2       70.6678 %   33.3253 %
obj_3       89.9084 %   98.5371 %
obj_4       85.6781 %   81.4631 %
obj_5       92.7638 %   71.4327 %
obj_6       99.9690 %   100.0000 %
obj_7       90.5899 %   96.1605 %
obj_8       77.1223 %   91.8368 %
obj_9       94.6200 %   98.8323 %
obj_10      88.2051 %   95.0989 %
obj_11      3.8838 %    9.3670 %
obj_12      50.0131 %   24.8709 %
obj_13      0.0056 %    0.0000 %
obj_14      0.3237 %    0.0000 %
obj_15      61.3438 %   94.1573 %
obj_16      93.8729 %   98.1648 %
obj_17      93.8731 %   97.5094 %
obj_18      59.2404 %   70.1059 %
obj_19      8.5414 %    26.8762 %

超参数的值:

batch_size=32
weight_decay = 0.00004 #'The weight decay on the model weights.'
optimizer = rmsprop
rmsprop_momentum = 0.9 
rmsprop_decay = 0.9 #'Decay term for RMSProp.'

learning_rate_decay_type =  exponential #Specifies how the learning rate is decayed
learning_rate =  0.01 #Initial learning rate.
learning_rate_decay_factor = 0.94 #Learning rate decay factor
num_epochs_per_decay = 2.0 #'Number of epochs after which learning rate

关于层的稀疏性,以下是两个网络层稀疏性的一些示例:

sparsity (InceptionResnet_V2) 

enter image description here

sparsity (InceptionV4)

enter image description here

编辑3: 以下是两种模型的损失图:

Losses and regularization loss (InceptionResnet_V2) 

enter image description here

Losses and regularization loss (InceptionV4) 

enter image description here


Tags: 模型obj编辑modelrate过程v2learning
1条回答
网友
1楼 · 发布于 2024-10-03 09:11:07

我同意你的评估-重量在小批量中变化不大。似乎它们确实在某种程度上发生了变化。在

我敢肯定你知道,你正在对非常大的模型进行微调。因此,反支撑有时需要一段时间。但是,您正在运行许多训练迭代。我不认为这是问题所在。在

如果我没搞错的话,这两个都是在ImageNet上训练的。如果您的图像与ImageNet中的某个域完全不同,这就可以解释这个问题。在

backprop equations确实使偏差更容易随特定的激活范围而改变。如果模型高度稀疏(即,如果许多层的激活值为0,则权重将难以调整,但偏差不会调整),则ReLU可以是一个。此外,如果激活在范围[0, 1],则相对于权重的梯度将高于相对于偏移的梯度。(这就是为什么sigmoid是一个糟糕的激活函数)。在

它也可能与你的读出层有关-特别是激活功能。你是如何计算误差的?这是分类问题还是回归问题?如果可能的话,我建议您使用sigmoid以外的东西作为您的最终激活函数。tanh可以稍微好一点。线性读出有时也会加快训练速度(所有的梯度都必须“通过”读出层。如果读出层的导数总是1-线性-你就“让更多的梯度通过”来调整模型的权重)。在

最后,我注意到你的体重直方图正朝着负的方向发展。有时,特别是对于具有大量ReLU激活的模型,这可能是模型学习稀疏性的一个指标。或者是神经元死亡问题的征兆。或者两者都有联系。在

最终,我认为你的模型只是在努力学习。我也遇到过类似的柱状图重新训练的开始。我使用的是一个大约有2000张图片的数据集,我正努力将其提高到80%以上的准确率(碰巧,数据集有很大的偏差,准确度与随机猜测差不多)。当我将卷积变量设为常量并且只对完全连接的层进行更改时,这很有帮助。在


sigmoid熵确实是一个恰当的分类问题。而且你有一个相当大的数据集-当然大到可以微调这些模型。在

有了这些新信息,我建议降低初始学习率。我有两方面的理由:

(1)是我自己的经验。正如我提到的,我对RMSprop不是特别熟悉。我只在DNCs的上下文中使用过它(尽管,DNCs带有卷积控制器),但是我在那里的经验支持了我要说的。我认为.01对于从头开始训练模型是很高的,更不用说微调了。对亚当来说肯定很高。从某种意义上说,从较小的学习率开始是微调的“精细”部分。不要强迫重物移动太多。尤其是调整整个模型而不是最后(几个)层。在

(2)是稀疏性的增加和向负权重的转移。根据你的稀疏图(好主意顺便说一句),在我看来,由于过度校正,一些权重可能会陷入稀疏配置中。一、 例如,由于初始速率较高,权重“超出”了它们的最佳位置,并卡在某个地方,使得它们很难恢复并对模型做出贡献。也就是说,在ReLU网络中,稍负且接近零是不好的。在

正如我反复提到的,我对RMSprop不是很熟悉。但是,由于您已经在运行大量的训练迭代,所以请尝试低、低、低的初始速率并逐步提高。我是说,看看1e-8是如何工作的。它模型可能不会以如此低的速率响应训练,而是用学习率做一些非正式的超参数搜索。根据我使用Adam的经验,1e-4到{}效果很好。在

相关问题 更多 >