<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe%2F%C4%86wiczenia_3</id>
	<title>Uczenie maszynowe i sztuczne sieci neuronowe/Ćwiczenia 3 - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe%2F%C4%86wiczenia_3"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/%C4%86wiczenia_3&amp;action=history"/>
	<updated>2026-05-03T19:56:03Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/%C4%86wiczenia_3&amp;diff=829&amp;oldid=prev</id>
		<title>Jarekz: Utworzono nową stronę &quot;=Zadanie: Filtr adaptywny= W tym zadaniu symulujemy działanie filtra, który może się adaptować do zmiennych warunków pracy. Jako przykład rozważymy redukcję szu...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/%C4%86wiczenia_3&amp;diff=829&amp;oldid=prev"/>
		<updated>2015-05-21T18:24:25Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;=Zadanie: Filtr adaptywny= W tym zadaniu symulujemy działanie filtra, który może się adaptować do zmiennych warunków pracy. Jako przykład rozważymy redukcję szu...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Zadanie: Filtr adaptywny=&lt;br /&gt;
W tym zadaniu symulujemy działanie filtra, który może się adaptować do zmiennych warunków pracy.&lt;br /&gt;
Jako przykład rozważymy redukcję szumu zniekształconego przez otoczenie. Załóżmy, że chcemy przekazywać głos pilota z kokpitu. Głos ten jest zniekształcony przez szum silników. W metodzie tej musimy mieć dwa mikrofony: jeden z nich rejestruje czysty odgłos silników, a drugi ten odgłos po przejściu drogi do okolic gdzie rejestrowany jest głos pilota. Można zastosować sieć neuronową do modelowania zniekształcenia  szumu i ten zniekształcony szum odjąć od sygnału rejestrowanego przez mikrofon pilota.&lt;br /&gt;
[[Plik:kokpit.png|thumb|center|600px|Schemat ]]&lt;br /&gt;
&lt;br /&gt;
==Przygotuj sygnały: ==&lt;br /&gt;
* częstość próbkowania niech będzie 100Hz&lt;br /&gt;
* czysty sygnał niech będzie reprezentowany przez sinusa o częstości 10Hz i trwający 2 s&lt;br /&gt;
* czysty szum niech będzie modelowany jako sygnał o tej samej długości co czysty sygnał, ale jego próbki to zmienne losowe z rozkładu normalnego&lt;br /&gt;
* szum zniekształcony niech będzie sumą osłabionego o 70% szumu i echa (sygnał opóźniony o jedną próbkę i amplitudzie zmniejszonej o 80%)&lt;br /&gt;
* sygnał zaburzony szumem to suma sinusa i szumu zniekształconego&lt;br /&gt;
&lt;br /&gt;
==Symulacja sieci==&lt;br /&gt;
* Konstruujemy sieć liniową o dwóch wejściach i jednym wyjściu &lt;br /&gt;
* Przygotowujemy pusty zbiór uczący i przekazujemy go do  obiektu typu BackpropTrainer, któremu przekazujemy sieć, ciąg uczący oraz parametry uczenia: współczynnik uczenia i bezwładność.&lt;br /&gt;
* Główna pętla symulacji iteruje się po kolejnych próbkach czasu:&lt;br /&gt;
*# Do bufora pobieramy wycinek czystego szumu z chwili bieżącej i tylu poprzednich jaki jest rozmiar wejścia.&lt;br /&gt;
*# Nadpisujemy zbiór uczący próbką zawierającą bieżący bufor i aktualną wartość zniekształconego szumu.&lt;br /&gt;
*# Uczymy sieć na tym jedno-przykładowym zbiorze uczącym.&lt;br /&gt;
*# Obliczamy sygnał jaki sieć zwróciłaby dla aktualnego bufora.&lt;br /&gt;
*# Jako &amp;quot;oczyszczony sygnał&amp;quot; traktujemy różnicę między sygnałem zaburzonym i aktualnym wyjściem sieci.&lt;br /&gt;
*# Zbieramy we wcześniej przygotowanych tablicach:&lt;br /&gt;
*#* aktualne wagi sieci &lt;br /&gt;
*#* kolejno otrzymane próbki &amp;quot;oczyszczonego sygnału&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Wykresy ==&lt;br /&gt;
Na subplotach przedstaw:&lt;br /&gt;
* sygnał czysty na tle sygnału zaburzonego&lt;br /&gt;
* ewolucję wag&lt;br /&gt;
* sygnał oczyszczony na tle sygnału zaburzonego&lt;br /&gt;
&lt;br /&gt;
==Szkielet rozwiązania:==&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# demostracja redukcji szumu znieksztalconego przez otoczenie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
# przygotowujemy dane wejsciowe&lt;br /&gt;
Fs = 100.   # częstość próbkowania niech będzie 100Hz&lt;br /&gt;
dt = 1/Fs&lt;br /&gt;
f = 10.&lt;br /&gt;
# 2 sek. wektor czasu&lt;br /&gt;
t=np.arange(0,2,dt)&lt;br /&gt;
# to jest czysty sygnal: csinus o częstości 10Hz i trwający 2 s&lt;br /&gt;
&lt;br /&gt;
sygnal= ...&lt;br /&gt;
# to jest oryginalny szum: czysty szum niech będzie modelowany jako sygnał o tej samej długości co czysty sygnał, ale jego próbki to zmienne losowe z rozkładu normalnego&lt;br /&gt;
szum = ...&lt;br /&gt;
&lt;br /&gt;
# ciag wzorcow: na wejscie podajemy czysta postac szumu&lt;br /&gt;
X = szum&lt;br /&gt;
# szum ten jest modyfikowany na drodze od swojego zrodla do mikrofonu&lt;br /&gt;
# np zmniejsza sie jego amplituda do 30%&lt;br /&gt;
Z = 0.3*X&lt;br /&gt;
# i dodaje sie echo z amplitudą 20%&lt;br /&gt;
Z[2:] = Z[2:] + 0.2*X[1:-1];&lt;br /&gt;
# zmodyfikowany szum (obcinamy efekty brzegowe)&lt;br /&gt;
Z = Z[2:-1];&lt;br /&gt;
t=t[2:-1];&lt;br /&gt;
sygnal = sygnal[2:-1]&lt;br /&gt;
X = X[2:-1]&lt;br /&gt;
# do mikrofonu efektywnie trafia sygnal i znieksztalcony szum&lt;br /&gt;
zaszum_sygnal = sygnal + Z   #0.3*szum;&lt;br /&gt;
&lt;br /&gt;
# narysuj na 3 subplotach:&lt;br /&gt;
# - czysty sygnał&lt;br /&gt;
# - czysty szum&lt;br /&gt;
# - to co trafia do mikrofonu&lt;br /&gt;
&lt;br /&gt;
# tu zaczynamy rysunek, który będzdie obrazował c dzieje się w trakcie symulacji&lt;br /&gt;
py.figure(1)&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,sygnal,t,zaszum_sygnal)&lt;br /&gt;
py.title('stan poczatkowy')&lt;br /&gt;
&lt;br /&gt;
# pomysl zastosowania tu sieci polega na tym, aby sieć modelowala to co&lt;br /&gt;
# dzieje sie z szumem na drodze od zrodla do mikrofonu:&lt;br /&gt;
# zmodyfikowany_szum = F(szum).&lt;br /&gt;
# Znajac czysty szum,&lt;br /&gt;
# odwzorowanie modyfikujace szum i zaszumiony sygnal mozemy odtworzyc&lt;br /&gt;
# czysty sygnal&lt;br /&gt;
# sygnal = zaszum_sygnal - F(szum)&lt;br /&gt;
&lt;br /&gt;
# importujemy moduły do konstrukcji sieci&lt;br /&gt;
from pybrain.structure import FeedForwardNetwork, LinearLayer, FullConnection&lt;br /&gt;
from pybrain.supervised.trainers import BackpropTrainer&lt;br /&gt;
from pybrain.datasets import SupervisedDataSet&lt;br /&gt;
&lt;br /&gt;
#Konstruujemy sieć liniową o dwóch wejściach i jednym wyjściu&lt;br /&gt;
# wytwarzamy pustą sieć&lt;br /&gt;
siec = ...&lt;br /&gt;
# tworzymy węzły wejściowe i wyjściowe&lt;br /&gt;
N_wej = ...&lt;br /&gt;
warstwaWejsciowa = ...&lt;br /&gt;
warstwaWyjsciowa = ...&lt;br /&gt;
# dodajemy węzły do sieci&lt;br /&gt;
# warstwy wejściowej&lt;br /&gt;
...(warstwaWejsciowa)&lt;br /&gt;
# warstwy wyjściowej&lt;br /&gt;
...(warstwaWyjsciowa)&lt;br /&gt;
# łączymy węzły&lt;br /&gt;
wej_do_wyj = ...&lt;br /&gt;
siec.addConnection(...)&lt;br /&gt;
# inicjujemy strukturę sieci&lt;br /&gt;
siec. ...&lt;br /&gt;
&lt;br /&gt;
#Przygotowujemy pusty zbiór uczący&lt;br /&gt;
CU = SupervisedDataSet(...)&lt;br /&gt;
# przekazujemy go do obiektu typu BackpropTrainer&lt;br /&gt;
trainer = BackpropTrainer(...,...,learningrate=0.01, momentum=0.9,verbose = True)&lt;br /&gt;
# przygotowujemy tablice na zbieranie historii wag&lt;br /&gt;
w = np.zeros((len(t),N_wej) )&lt;br /&gt;
b = np.zeros(len(t))&lt;br /&gt;
# i na poprawiony sygnal oraz wyjście sieci&lt;br /&gt;
syg_poprawiony = np.zeros(len(t))&lt;br /&gt;
wyj = np.zeros(len(t))&lt;br /&gt;
&lt;br /&gt;
# Główna pętla symulacji iteruje się po kolejnych próbkach czasu&lt;br /&gt;
for i in range(N_wej,len(t)):&lt;br /&gt;
    # Do bufora pobieramy wycinek czystego szumu z chwili bieżącej&lt;br /&gt;
    bufor_wyjściowy = ... #aktualną wartość zniekształconego szumu [i]&lt;br /&gt;
    bufor_wejsciowy = ...# wycinek czystego szumu z chwili bieżącej i tylu poprzednich jaki jest rozmiar wejścia i to odwrócony w czasie [i:i-N_wej:-1]&lt;br /&gt;
    # Nadpisujemy zbiór uczący próbką zawierającą bieżący bufor i aktualną wartość zniekształconego szumu&lt;br /&gt;
    CU = SupervisedDataSet(N_wej, 1)    &lt;br /&gt;
    CU.addSample(...)&lt;br /&gt;
    #Uczymy sieć na tym jedno-przykładowym zbiorze uczącym &lt;br /&gt;
    trainer.trainOnDataset(CU)&lt;br /&gt;
    # zapamiętujemy parametry w tablicy &lt;br /&gt;
    w[i,...] = ...&lt;br /&gt;
    # Obliczamy sygnał jaki sieć zwróciłaby dla aktualnego bufora:&lt;br /&gt;
    wyj[i] = ...&lt;br /&gt;
    #Jako &amp;quot;oczyszczony sygnał&amp;quot; traktujemy różnicę między sygnałem zaburzonym i aktualnym wyjściem sieci.&lt;br /&gt;
    syg_poprawiony[i] = ... &lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(w) # rysujemy ewolucję wag&lt;br /&gt;
py.title('wagi')&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(syg_poprawiony,'r') # sygnał oczyszczony na tle sygnału zaburzonego&lt;br /&gt;
py.plot(zaszum_sygnal,'g') &lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pytania==&lt;br /&gt;
* Czy jest związek między stanem wag i oczyszczaniem sygnału? O czym on świadczy?&lt;br /&gt;
* Dodaj do symulacji zmianę zaburzenia sygnału, np. w połowie symulacji niech dwukrotnie wzrośnie udział echa. Czy układ podąża za zmianą ?&lt;br /&gt;
* Spróbuj w punkcie 2 głównej pętli zamienić pożądaną wartość z  aktualnej wartości zniekształconego szumu na aktualną wartość sygnału zaburzonego. Czy sieć nadal jest w stanie odfiltrować zaburzenia? Jeśli tak to dlaczego?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{hidden begin|title=Szkic przykładowego rozwiązania}}&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# demostracja redukcji szumu znieksztalconego przez otoczenie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
# przygotowujemy dane wejsciowe&lt;br /&gt;
Fs = 100.&lt;br /&gt;
dt = 1/Fs&lt;br /&gt;
t=np.arange(0,4,dt)&lt;br /&gt;
# to jest czysty sygnal&lt;br /&gt;
f = 10.&lt;br /&gt;
sygnal=np.sin(2*np.pi*f*t)&lt;br /&gt;
# to jest oryginalny szum&lt;br /&gt;
szum = np.random.randn(len(sygnal))&lt;br /&gt;
&lt;br /&gt;
# ciag wzorcow: na wejscie podajemy czysta postac szumu&lt;br /&gt;
X = szum&lt;br /&gt;
# szum ten jest modyfikowany na drodze od swojego zrodla do mikrofonu&lt;br /&gt;
# np zmniejsza sie jego amplituda&lt;br /&gt;
Z = 0.5*X&lt;br /&gt;
# i dodaje sie echo&lt;br /&gt;
Z[2:] = Z[2:] + 0.2*X[1:-1];&lt;br /&gt;
# zmodyfikowany szum&lt;br /&gt;
Z = Z[2:-1];&lt;br /&gt;
t=t[2:-1];&lt;br /&gt;
sygnal = sygnal[2:-1]&lt;br /&gt;
X = X[2:-1]&lt;br /&gt;
# do mikrofonu efektywnie trafia sygnal i znieksztalcony szum&lt;br /&gt;
zaszum_sygnal = sygnal + Z   #0.3*szum;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.figure(1)&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,sygnal,t,zaszum_sygnal)&lt;br /&gt;
py.title('stan poczatkowy')&lt;br /&gt;
#py.legend('czysty sygnal', 'zaszumiony sygnal')&lt;br /&gt;
#py.show()&lt;br /&gt;
&lt;br /&gt;
# pomysl zastosowania tu sieci polega na tym, aby sieć modelowala to co&lt;br /&gt;
# dzieje sie z szumem na drodze od zrodla do mikrofonu:&lt;br /&gt;
# zmodyfikowany_szum = F(szum).&lt;br /&gt;
# Znajac czysty szum,&lt;br /&gt;
# odwzorowanie modyfikujace szum i zaszumiony sygnal mozemy odtworzyc&lt;br /&gt;
# czysty sygnal&lt;br /&gt;
# sygnal = zaszum_sygnal - F(szum)&lt;br /&gt;
&lt;br /&gt;
# inicjujemy struktury sieci&lt;br /&gt;
from pybrain.structure import FeedForwardNetwork, LinearLayer, FullConnection&lt;br /&gt;
from pybrain.supervised.trainers import BackpropTrainer&lt;br /&gt;
from pybrain.datasets import SupervisedDataSet&lt;br /&gt;
&lt;br /&gt;
# wytwarzamy pustą sieć&lt;br /&gt;
siec = FeedForwardNetwork()&lt;br /&gt;
# tworzymy węzły wejściowe i wyjściowe&lt;br /&gt;
N_wej = 2&lt;br /&gt;
warstwaWejsciowa = LinearLayer(N_wej)&lt;br /&gt;
warstwaWyjsciowa = LinearLayer(1)&lt;br /&gt;
# dodajemy węzły do sieci&lt;br /&gt;
siec.addInputModule(warstwaWejsciowa)&lt;br /&gt;
siec.addOutputModule(warstwaWyjsciowa)&lt;br /&gt;
# łączymy węzły&lt;br /&gt;
wej_do_wyj = FullConnection(warstwaWejsciowa, warstwaWyjsciowa)&lt;br /&gt;
siec.addConnection(wej_do_wyj)&lt;br /&gt;
# inicjujemy strukturę sieci&lt;br /&gt;
siec.sortModules()&lt;br /&gt;
&lt;br /&gt;
#uczymy neuron&lt;br /&gt;
CU = SupervisedDataSet(N_wej, 1)&lt;br /&gt;
#CU.addSample(np.zeros(N_wej), (0,))&lt;br /&gt;
trainer = BackpropTrainer(siec, CU,learningrate=0.01, momentum=0.9,verbose = True)  &lt;br /&gt;
w = np.zeros((len(t),N_wej) )&lt;br /&gt;
b = np.zeros(len(t))&lt;br /&gt;
syg_poprawiony = np.zeros(len(t))&lt;br /&gt;
wyj = np.zeros(len(t))&lt;br /&gt;
for i in range(N_wej,len(t)):&lt;br /&gt;
    CU = SupervisedDataSet(N_wej, 1)&lt;br /&gt;
    bufor_wejsciowy = X[i:i-N_wej:-1]&lt;br /&gt;
    CU.addSample(bufor_wejsciowy, zaszum_sygnal[i])#Z[i])          &lt;br /&gt;
    trainer.trainOnDataset(CU)&lt;br /&gt;
    print 'Parametry: ', siec.params&lt;br /&gt;
    w[i,...] = siec.params&lt;br /&gt;
    wyj[i]=siec.activate(bufor_wejsciowy)&lt;br /&gt;
    syg_poprawiony[i] = zaszum_sygnal[i]-wyj[i] &lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(w)&lt;br /&gt;
py.title('wagi')&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(syg_poprawiony,'r')&lt;br /&gt;
py.plot(zaszum_sygnal,'g')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{hidden end}}&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
</feed>