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