如何评估我的自学MATCONNET CNN网络

时间:2017-03-30 15:22:15

标签: matlab computer-vision conv-neural-network matconvnet

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

现在我遇到了两个挑战。

  1. 我的网络没有收敛。我的稳定误差为0.977

  2. 我正在尝试评估我训练有素的网络,即使有这个错误率,但那是我最大的挑战。我还没有弄清楚如何在MATCONVNET中评估自我训练的网络,而且很少有帮助的材料可以提供帮助。

  3. 如果您对我需要改变或做得更好有所了解,请有人帮忙吗?

1 个答案:

答案 0 :(得分: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]) - 测试(D),训练(A,B,D) - 测试(C), ...训练(B,C,D) - 测试(A)并平均预测率

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

  2. 集合中的所有可能配置

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