在我的神经网络模型中,迭代中的测试精度会降低。我已经检查了学习率并将其调整得更小,但我的测试精度不断下降但没有振荡,所以我认为这不是问题的原因。
我使用tempotron学习规则,并使用Iris数据集,我使用了100个训练样本和50个测试样本。
我检查了我的代码,测试准确性在开始时有所增加,所以我认为学习规则对重量有效。
但我无法弄清楚为什么之后性能下降。 有人有什么想法吗? 感谢。
for Iterate = 1:iteration %% Run 100 times
%% Test the correct rate each time
正确= 0; for test_sample = 1:length(test)
% In each iteration, T = 100ms
for t = 1:T
for neuron = 1:neurons %% Response function for 48 neurons at time t
Response(neuron) = K(t,test(test_sample,neuron));
end
% Calculate PSP
for j = 1:3
V(j,t) = Response*weight(:,j) + V_rest;
end
end
%% find t_max: first index that V cross threshold
for j = 1:3
for timing = 1:T
if V(j,timing) >= threshold
t_max(j) = timing;
Max_state(j) = V(j,timing);
break;
end
end
V(j,t_max(j):end) = V(j,t_max(j)).*exp(-(Time(t_max(j):end)-Time(t_max(j)))/Tou_m);
end
[~,output_class] = min(t_max);
if output_class == test_target(test_sample)
correct = correct + 1;
end
端
correct_rate(Iterate)= correct /(length(test));
如果迭代> 1
if correct_rate(Iterate) < correct_rate(Iterate-1)
fprintf('Correct rate decrease\n');
%break;
end
端
%%培训
for samples = 1:size(InputSpike,1) %% Training samples for each iteration
% In each iteration, T = 100ms
for t = 1:T
for neuron = 1:neurons %% Response function for 48 neurons at time t
Response(neuron) = K(t,InputSpike(samples,neuron));
end
% Calculate PSP
for j = 1:3
V(j,t) = Response*weight(:,j) + V_rest;
end
end
%% find t_max: first index that V cross threshold
for j = 1:3
for timing = 1:T
if V(j,timing) >= threshold
t_max(j) = timing;
Max_state(j) = V(j,timing);
break;
end
end
V(j,t_max(j):end) = V(j,t_max(j)).*exp(-(Time(t_max(j):end)-
Time(t_max(j)))/Tou_m);
end
[~,output_class] = min(t_max);
%% weight modify when error occurs
if train_target(samples) ~= output_class
for j = 1:3
if j == train_target(samples) %% error in target neuron
if Max_state(j) < threshold %% if P+ error occurs
for i = 1:neurons
%% for all t_i < t_max
if InputSpike(samples,i) < t_max(j)
%% weight modified
weight(i,j) = weight(i,j) + ...
lr*K(t_max(j),InputSpike(samples,i));
end
end
end
elseif j ~= train_target(samples) %% error on other 2 output neurons
if Max_state(j) >= threshold %% if P- error occurs
for i = 1:neurons
%% for all t_i < t_max
if InputSpike(samples,i) < t_max(j)
%% weight modified
weight(i,j) = weight(i,j) - ...
lr*K(t_max(j),InputSpike(samples,i));
end
end
end
end
end
%% for neurons that fired but weaker than target neuron
elseif train_target(samples) == output_class
for j = 1:3
if j ~= train_target(samples) %% other 2 output neurons
if Max_state(j) >= threshold
for i = 1:neurons %% P- error occurs
%% for all t_i < t_max
if InputSpike(samples,i) < t_max(j)
%% weight modified
weight(i,j) = weight(i,j) - ...
lr*K(t_max(j),InputSpike(samples,i));
end
end
end
end
end
end
end
端
答案 0 :(得分:0)
您应该扩大您的训练数据集,以避免过度拟合。您也可以尝试增加训练次数。