为什么GoogLeNet将所有输入归为同一输出类?

时间:2019-06-27 05:00:43

标签: machine-learning neural-network classification conv-neural-network

我似乎在使用GoogLeNet进行分类时遇到问题。

我正在使用以10 KHz采样的振动数据(420×10002矩阵)。取振动数据的CWT并获得比例图。这些比例尺用于训练GoogLeNet,以对以下六个输出类别进行分类:“十”,“二十”,“三十”,“四十”,“五十”和“六十”。

但是不管输入如何,我都得到输出“ TWENTY”。

我正在使用cwtfilterbank绘制比例图。对于GoogLeNet,我仅使用默认条件,

80%用于验证,20%用于测试

MiniBatchSize = 15

MaxEpochs = 50至200

InitialLearnRate = 1e-4

ValidationFrequency = 10

我发现最佳数量的MaxEpochs是验证精度最高的那个。

我已附上代码片段和网络层图

% Scalogram
Fs = 10000;
filb = cwtfilterbank('SignalLength',10000,'SamplingFrequency',Fs,...
'VoicesPerOctave',12);
sg = vibhistory.data(1,1:10000);
[cfs,freq] = wt(filb,sg);
t = (0:9999)/Fs;
figure;
pcolor(t,freq,abs(cfs));
% GoogLeNet
rng default
[imgTr,imgVal] = splitEachLabel(allImg,0.8,'randomized');
net = googlenet;
lgraph = layerGraph(net);
options = trainingOptions('sgdm',...
                      'MiniBatchSize',15,...
                      'MaxEpochs',120,...
                      'InitialLearnRate',1e-4,...
                      'ValidationData',imgVal,...
                      'ValidationFrequency',10,...
                      'Verbose',1,...
                      'ExecutionEnvironment','cpu',...
                      'Plots','training-progress');
rng default
mygn = trainNetwork(imgTr,lgraph,options);

Layer Graph

我正在使用Mathworks网站上提供的示例代码来解决ECG分类问题(CWTGoogLeNet)。尽管对于他们的数据来说很好用,但对我的数据却不起作用。

我已经在Internet上广泛搜索了类似的问题,并且也实现了答案,

  1. 我尝试过更改初始学习率
  2. 重新安排了培训批次
  3. 使用较小的培训批次(约20张图像)
  4. 归一化输入图像

但是我只得到相同的相似输出。

我在这里做错了什么?我是否应该以特定的方式安排训练集和输出标签,还是需要替换网络中的某些层?还有什么可能是这里的问题? 任何帮助都会很棒。谢谢。

0 个答案:

没有答案