FTDNN имел выделенную память линии задержки только на входе в первый слой статической сети прямого распространения. Можно также распределить линии задержки по сети. Распределенный TDNN был впервые введен в [WaHa89] для распознавания фонемы. Оригинальная архитектура была очень специализирована для этой конкретной задачи. Следующий рисунок показывает общий двухуровневый распределенный TDNN.
Эта сеть может использоваться для упрощенной задачи, которая подобна распознаванию фонемы. Сеть попытается распознать частотное содержимое входного сигнала. Следующий рисунок показывает сигнал, в котором одна из двух частот присутствует в любое заданное время.
Следующий код создает этот сигнал и выход целевой сети. Целевой выход равен 1, когда вход на низкой частоте и -1, когда вход на высокой частоте.
time = 0:99; y1 = sin(2*pi*time/10); y2 = sin(2*pi*time/5); y = [y1 y2 y1 y2]; t1 = ones(1,100); t2 = -ones(1,100); t = [t1 t2 t1 t2];
Теперь создайте распределенную сеть TDNN с distdelaynet
функция. Единственное различие между distdelaynet
функции и timedelaynet
функция заключается в том, что первый входной параметр является массивом ячеек, который содержит отсроченные задержки, используемые в каждом слое. В следующем примере задержки от нуля до четырех используются в слое 1, и от нуля до трех используются в слое 2. (Чтобы добавить некоторое разнообразие, функция обучения trainbr
используется в этом примере вместо значения по умолчанию, которое является trainlm
. Можно использовать любую функцию обучения, обсуждаемую в Multilayer Shallow Neural Networks and Backpropagation Training.)
d1 = 0:4; d2 = 0:3; p = con2seq(y); t = con2seq(t); dtdnn_net = distdelaynet({d1,d2},5); dtdnn_net.trainFcn = 'trainbr'; dtdnn_net.divideFcn = ''; dtdnn_net.trainParam.epochs = 100; dtdnn_net = train(dtdnn_net,p,t); yp = sim(dtdnn_net,p); plotresponse(t,yp)
Сеть способна точно различать две «фонемы».
Вы заметите, что обучение, как правило, медленнее для распределенной сети TDNN, чем для FTDNN. Это связано с тем, что распределенный TDNN должен использовать динамическое обратное распространение.