gpt4 book ai didi

python - 解释张量板图

转载 作者:太空狗 更新时间:2023-10-29 18:33:39 26 4
gpt4 key购买 nike

我还是新手 tensorflow当我的模型训练继续时,我试图了解正在发生的细节。简而言之,我正在使用 slimImageNet 上预训练的模型做finetuning在我的数据集上。以下是从 tensorboard 中为 2 个独立模型提取的一些图:

Model_1 (InceptionResnet_V2)

Inception resnet V2
Model_2 (InceptionV4)

InceptionV4

到目前为止,这两个模型在验证集上的结果都很差( Model_1 的平均 Az(ROC 曲线下的面积)= 0.7, Model_2 的平均值为 0.79)。我对这些图的解释是权重在小批量中没有变化。只有偏差会随着小批量而改变,这可能是问题所在。但我不知道去哪里验证这一点。这是我能想到的唯一解释,但考虑到我仍然是新手,这可能是错误的。你能和我分享你的想法吗?如有需要,请不要犹豫,索取更多地块。

编辑:
正如您在下图中所看到的,权重似乎几乎没有随时间变化。这适用于两个网络的所有其他权重。这让我觉得某处有问题,但不知道如何解释。
InceptionV4 weights

InceptionV4 weights
InceptionResnetV2 weights

InceptionResnetV2 weights

编辑2:
这些模型首先在 ImageNet 上训练,这些图是在我的数据集上对它们进行微调的结果。我正在使用一个包含 19 个类的数据集,其中包含大约 800000 张图像。我正在做一个多标签分类问题,我使用 sigmoid_crossentropy 作为损失函数。类(class)高度不平衡。在下表中,我们显示了每个类在 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

最佳答案

我同意您的评估 - 小批量中的权重变化不大。看起来他们确实有所改变。

我相信您知道,您正在对非常大的模型进行微调。因此,反向传播有时需要一段时间。但是,您正在运行许多训练迭代。我真的不认为这是问题所在。

如果我没记错的话,这两个最初都是在 ImageNet 上训练的。如果您的图像与 ImageNet 中的图像处于完全不同的域中,则可以解释问题。

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

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

最后,我注意到您的权重直方图正在向负权重方向发展。有时,尤其是对于具有大量 ReLU 激活的模型,这可以作为模型学习稀疏性的指标。或死亡神经元问题的指标。或者两者兼而有之——两者有些联系。

最终,我认为您的模型只是在努力学习。我在重新训练 Inception 时遇到了非常相似的直方图。我使用了一个包含大约 2000 张图像的数据集,我正在努力将其提高到 80% 以上的准确率(碰巧的是,该数据集存在严重偏差——准确率大致与随机猜测一样好)。当我使卷积变量保持不变并且只对全连接层进行更改时,它会有所帮助。

事实上,这是一个分类问题,sigmoid 交叉熵是合适的激活函数。而且你确实有一个相当大的数据集——当然足够大来微调这些模型。

有了这个新信息,我建议降低初始学习率 .我在这里有两个理由:

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

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

正如我(反复)提到的,我对 RMSprop 不是很熟悉。但是,由于您已经进行了大量的训练迭代,请尝试低、低、低的初始速率并逐步提高。我的意思是,看看如何 1e-8作品。模型可能不会以如此低的速率响应训练,而是使用学习速率进行一些非正式的超参数搜索。根据我使用 Adam 的 Inception 经验,1e-41e-8工作得很好。

关于python - 解释张量板图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48012287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com