0

我正在尝试使用 MATCONVNET 构建自己的 CNN(Alexnet 模型)用于交通标志识别。我使用来自德国交通标志识别基准 (GTSRB) 网站 ( http://benchmark.ini.rub.de/?section=gtsrb&subsection=datase ) 的图像数据集创建了我自己的 IMDB,其中包括标记良好的训练、验证以及43类道路交通标志的测试数据。

现在我面临两个挑战。

  1. 我的网络没有融合。我有一个大约 0.977 的稳定误差

  2. 即使有这个错误率,我也在尝试评估我训练有素的网络,但这就是我面临的最大挑战。我还没有弄清楚如何在 MATCONVNET 中评估自训练网络,并且几乎没有有用的材料可以提供帮助。

如果您对我需要更改或做得更好有什么想法,请有人帮忙?

4

1 回答 1

0

我对 MATCONVNET 不太熟悉,所以我可能会误解您的问题,但评估分类器的一般规则是交叉验证(即在不同的子集上训练和测试,并在多个子集配置中重复)。

对于一种配置

要生成一种数据配置,您可以使用

nObservations = size(data,1);
y_act = ... ; % class labels for each observation
ratio = .5; 
net = ... %your net definition

[Train,Test] = crossvalind('HoldOut',nObservations,ratio);
[net,...] = train(net,data(Train,:))
y_exp = predict(net,data(Test,:))
rate = length(find(y_exp == y_act(Test)))/...
       numel(y_act(Test));

费率是比原来的更好的指标。根据您的模型,您可能希望确保类以均匀的比例分布(或者甚至可能相等的数量,这将需要您折腾一些观察结果,以便您拥有相等的类总数)。为了确保这一点,您可以独立划分每个类crossvalind,然后合并以形成您的训练/测试集。

您还可以玩弄您的火车:测试比率。.5 是一个很好的起点。如果您无法对测试集进行分类,请逐渐增加。

置换配置

此分析的一个问题是仅评估一种配置。对于泛化不重要的海量数据集或集合,这可能没问题。但是您可以通过将上述分析置换为

  1. 一组配置中的所有组合

    假设您将数据集分为 A、B、C 和 D。您可以训练 ([A,B,C])-test(D), train(A,B,D)-test(C), ... train(B,C,D)-test(A) 并平均预测率

    这通常“足够好”,但您必须承认,在小型数据集中,您的一个集合中可能存在倾斜的表示

  2. 一组内所有可能的配置

    使用nchoosek(...)您可以表示所有可能的配置并测试每个配置以进行训练测试。很快变得不可能长。选择任意数量的这些配置也可以。如果您的观察数量非常低,这在低成本下很有用,尤其是在使用bootstrapping进行验证时。可能与您的分析无关。

于 2017-03-30T16:41:27.133 回答