Uczymy AI przewidywać kursy krypto: Część druga, uczymy przewidywania funkcji liniowej

in #hive-1251254 days ago

W poprzedniej części nauczyliśmy nasz model sieci neuronowej dodawania liczb od 1 do 1000. Wiemy też jak sprawdzić czy wyniki są dobre, jak nim sterować... Przejdźmy więc do kolejnego kroku

Część druga: Uczymy przewidywania funkcji liniowej.

Celem ćwiczenia jest nauczenie naszego modelu, rozpoznawania ukrytej funkcji. Tylko ważne jest by tą funkcję dobrze ukryć, skoro naszym celem jest przewidywanie kursów kryptowalut. Bo przyjmuję założenie, że w kursach są takie funkcje ukryte. Ale właśnie, liczba mnoga ukryte są różne funkcje, zmieniające się w czasie oraz zaburzają ją częste zdarzenia losowe.

Więc nasza funkcja liniowa będzie wyglądała tak

  • oś X - czas
  • os Y - cena
  • okres od dnia 0 do dnia 70 cena spada o 1%
  • okres od dnia 71 do dnia 100 cena wzrasta 1%
  • wprowadzamy ukrycie losowy wzrost/spadek ceny o 5%

Jak w poprzedniej części kod można pobrać, zapisać, przeanalizować, zmodyfikować i uruchomić:
https://github.com/fatmusicpl/voters.github.io/blob/master/neural_network2.html

Albo tylko go uruchomić w swojej przeglądarce:
https://fatmusicpl.github.io/voters.github.io/neural_network2.html

Przejdźmy zatem do nowych rzeczy w kodzie:

  1. Budowanie danych:

    function generateData() {
    for (; day < 71; day++ ){ currentPrice /= 1 + (0.01 + (Math.random() - 0.5) * 0.1);}
    for (; 70 < day && day < 101; day++) { currentPrice *= 1 + (0.01 + (Math.random() - 0.5) * 0.1);}
    }

    Jako dane wejściowe, używamy cen z dni od 0 do 100, właściwie od 1, bo talice zaczynają się od zera i pierwszy element ma klucz 0.
    Jako daną wyjściową, którą model ma wyznaczyć jest ostatni element tablicy.

    inputs.push(prices.slice(0, 100));
    outputs.push(prices[100])

  2. Budowanie modelu i dodawanie warstw neuronów - to podobno jest istotne, by badać zagadnienie głębiej, dodawać więcej wag:
    function createModel()

    // Warstwa ukryta (100 dni)
    model.add(tf.layers.dense({ units: 64, activation: 'relu', inputShape: [100] }));
    // Dodatkowe warstwy ukryte
    model.add(tf.layers.dense({ units: 128, activation: 'relu' })); // Warstwa ukryta 1
    model.add(tf.layers.dense({ units: 64, activation: 'relu' })); // Warstwa ukryta 2
    model.add(tf.layers.dense({ units: 32, activation: 'relu' })); // Warstwa ukryta 3
    model.add(tf.layers.dense({ units: 1, activation: 'linear' })); // Warstwa wyjściowa

To raczej tyle z istotnych dla działania sieci neuronowej. Dodałem jeszcze rysowanie wykresu. Który powinien wyglądać mniej więcej w taki sposób, za każdym razem będzie inny ponieważ podczas generowania wprowadzamy losowe zakłócenia, by utrudnić sieci znalezienie wzoru:


Cena do dnia 70 spada, od 70 rośnie.

Jest też możliwość konfiguracji modelu:

To w sumie tyle wystarczy kliknąć przycisk Rozpocznij trening i jak sieć się nauczy, przycisk Przetestuj model. 😀

Dziękuję osobom wspierającym, fajnie że ktoś to czyta 😀 Mam nadzieję że dzięki temu nawet jak ktoś nie umie w programowanie, to czegoś się dowie. Że sztuczna inteligencja (właściwie uczenie maszynowe) to tylko narzędzie, którego można nauczyć się używać. Tak jak internet, nikt nie zaprzecza że internet zmienił świat. Kwestią dyskusyjną jest czy na lepsze. Ale moim zdaniem, tak. Choć są bardzo duże minusy, albo zagrożenia. Ale to kwestia już na osobny artykuł.


---=== reklama ===---


pivx.promo - Kranik PIVX, fajna moneta pod PoS
Honeygain - Udostępnianie sieci oraz content delivery, za nagrody
Grass - Udostępnianie sieci za nagrody w kryptowalucie Solana (SOL)
AutoFaucet - Kranik z bardzo dużym wyborem monet
Final Autoclaim - Kranik z bardzo dużym wyborem monet
FaucetCrypto - Kranik z dużym wyborem moet i możliwośćią wypłaty BTC bezpośrednio na portfel
Vie Faucet - Jeden z większych kraników