logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Matlab] Jak uwzględnić współczynnik funkcji liniowej w neuronach?

vRadekv 24 Sty 2012 20:30 1569 1
REKLAMA
  • #1 10443546
    vRadekv
    Poziom 10  
    Posty: 5
    Mam takie zadanie:
    Dana jest sztuczna sieć neuronowa złożona z jednej warstwy, w której jest jedna jednostka posiadająca cztery wyjścia, dane są cztery sygnały na wejściu: p1=0.1, p2=0.2, p3=0.8, p4=1.0, dane są wartości wag: w1=0.8,w2=0.5, w3=0.3, w4=1; dana jest funkcja przejścia (transfer function) w postaci funkcji liniowej f(x)=ax o współczynniku a=0.8 dany współczynnik uczenia (learning rate) lr=0.5 dany jest wzorzec na wyjściu sieci t=0.2 Obliczyć trzy wartości sygnałów na wyjściu sieci metodą gradientową zastosowaną do zmiany wag.

    Chciałbym rozwiązać to w MatLabie i stworzyłem taki kod:

    Kod: text
    Zaloguj się, aby zobaczyć kod



    Jednak pojęcia nie mam, gdzie mogę wstawić, użyć współczynnika funkcji liniowej..

    Z góry dziękuje za wszelka pomoc

    P.s Nie wiem co to za język ... Matlaba wybrać się nie da
  • REKLAMA
  • #2 10460339
    Marvinn8686
    Poziom 20  
    Posty: 281
    Pomógł: 39
    Ocena: 44
    Witam, minęło parę dni od opublikowania pytania, ale być może odpowiedź jest nadal pożądana. Generalnie radzę użyć do stworzenia sieci funkcji newff() zamiast newlin() i wstawić swoją funkcję aktywacji.
    Przykładowa składnia funkcji netff:

    net=newff([-1 1],[4 1],{'tansig','tansig'},'trainscg'); %utworzenie sieci; pierwszy argument reprezentuje zakresy danych wejściowych,
    %drugi - liczbę neuronów w warstwie ukrytej i wyjściowej, trzeci - typy funkcji aktywacji w tych warstwach, czwarty - metodę uczenia sieci
    %funkcja zwraca obiekt sieci net


    dla jednej warstwy będzie to chyba:
    
    net=newff([-1 1],l_neur,'tansig,'trainscg'); %utworzenie sieci; pierwszy argument reprezentuje zakresy danych wejściowych,
    %drugi - liczbę neuronów w warstwie ukrytej i wyjściowej, trzeci - typy funkcji aktywacji w tych warstwach, czwarty - metodę uczenia sieci
    %funkcja zwraca obiekt sieci net
    


    zamiast 'tansig' należy wstawić własną funkcję aktywacji. Najbardziej zbliżoną do f=a*x jest funkcja 'purelin', która jednak ma stały współczynnik a=1. Należy odnaleźć tę funkcję w folderze z toolboxem do cieci neuronowych (np. "C:\Programy\MATLAB7\toolbox\nnet\nnet\purelin.m"), utworzyć jej kopię np. purelinx.m w tym samym folderze (oczywiście chodzi nam o zawartość funkcji, więc plik powinien zawierać to samo co purelin.m). Po otwarciu zmodyfikowanego pliku w ostatniej linijce powinno być napisane "a = n". Zmodyfikuj to żeby uzyskać np. "a = 2*n", lub "a = 3*n" w zależności jakie 'a' chcesz uzyskać. Później w funkcji newff() wywołaj 'purelinx'.
    Podejrzewam, że można w łatwiejszy sposób użyć własnej funkcji, jednak mnie nie udało się dojść jak i robiłem to w ten sposób. Postać funkcji newff() dla swoich warunków musisz skorygować, nie testowałem przedstawionego rozwiązania gdyż nie mam już zainstalowanego Matlaba.
REKLAMA