exponenta event banner

Оптимизация скорости обучения нейронной сети и памяти

Уменьшение памяти

В зависимости от конкретной нейронной сети моделирование и градиентные вычисления могут выполняться в MATLAB ® или MEX. MEX эффективнее памяти, но MATLAB можно сделать более эффективной памятью в обмен на время.

Чтобы определить, используется ли MATLAB или MEX, используйте 'showResources' , как показано в этой общей форме синтаксиса:

net2 = train(net1,x,t,'showResources','yes')

Если используется MATLAB и ограничения памяти являются проблемой, объем необходимого временного хранилища может быть уменьшен в два раза N, в обмен на выполнение вычислений N время последовательно на каждом из N подмножества данных.

net2 = train(net1,x,t,'reduction',N);

Это называется сокращением памяти.

Быстрый Эллиот Сигмоид

Некоторые простые вычислительные устройства могут не поддерживать экспоненциальную функцию напрямую, и реализация программного обеспечения может быть медленной. Сигмоид Эллиота elliotsig функция выполняет ту же роль, что и симметричный сигмоид tansig функция, но избегает экспоненциальной функции.

Вот сюжет сигмоида Эллиота:

n = -10:0.01:10;
a = elliotsig(n);
plot(n,a)

Figure contains an axes. The axes contains an object of type line.

Далее, elliotsig сравнивается с tansig.

a2 = tansig(n);
h = plot(n,a,n,a2);
legend(h,'elliotsig','tansig','Location','NorthWest')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent elliotsig, tansig.

Обучение нейронной сети с помощью elliotsig вместо tansig, преобразование функций передачи сети:

[x,t] = bodyfat_dataset;
net = feedforwardnet;
view(net)
net.layers{1}.transferFcn = 'elliotsig';
view(net)
net = train(net,x,t);
y = net(x)

Здесь, время для выполнения elliotsig и tansig сравнивают. elliotsig приблизительно в четыре раза быстрее в тестовой системе.

n = rand(5000,5000);
tic,for i=1:100,a=tansig(n); end, tansigTime = toc;
tic,for i=1:100,a=elliotsig(n); end, elliotTime = toc;
speedup = tansigTime / elliotTime

speedup =

    4.1406

Тем не менее, в то время как моделирование быстрее с elliotsig, тренировка не гарантирована более быстрой из-за различных форм двух передаточных функций. Здесь обучено 10 сетей каждая для tansig и elliotsig, но время обучения значительно варьируется даже при одной и той же проблеме с одной и той же сетью.

[x,t] = bodyfat_dataset;
tansigNet = feedforwardnet;
tansigNet.trainParam.showWindow = false;
elliotNet = tansigNet;
elliotNet.layers{1}.transferFcn = 'elliotsig';
for i=1:10, tic, net = train(tansigNet,x,t); tansigTime = toc, end
for i=1:10, tic, net = train(elliotNet,x,t), elliotTime = toc, end