В зависимости от конкретной нейронной сети, симуляция и градиентные вычисления могут происходить в 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)

Далее, elliotsig сравнивается с tansig.
a2 = tansig(n); h = plot(n,a,n,a2); legend(h,'elliotsig','tansig','Location','NorthWest')

Чтобы обучить нейронную сеть, используя 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