Riješeno: rekurentna neuronska mreža pytorch

Posljednje ažuriranje: 09/11/2023

rekurentna neuronska mreža Rekurentne neuronske mreže (RNN) su vrsta umjetne neuronske mreže dizajnirane za obradu i analizu nizova podataka. Pokazali su se posebno korisnim u raznim aplikacijama, uključujući obradu prirodnog jezika, prepoznavanje govora i predviđanje vremenskih serija. U ovom članku ćemo zaroniti duboko u svijet RNN-a, istražiti kako oni rješavaju problem sekvencijalne obrade podataka i proći kroz korak po korak implementaciju jednostavnog RNN-a u Python-u.

Razumijevanje rekurentnih neuronskih mreža

A Rekurentna neuronska mreža je vrsta neuronske mreže koja sadrži petlje, omogućavajući informacijama da traju kroz više vremenskih koraka. Ovo je posebno korisno za obradu nizova podataka, gdje redoslijed i vrijeme elemenata igraju ključnu ulogu u razumijevanju osnovnih obrazaca. Tradicionalne neuronske mreže unapred nemaju ovu mogućnost, jer samostalno obrađuju ulaze i izlaz jednog sloja se ne vraća nazad u sebe.

Jedna od ključnih komponenti RNN-a je skriveno stanje, što je reprezentacija prethodnih elemenata u nizu. Skriveno stanje se ažurira u svakom vremenskom koraku, uzimajući u obzir i trenutni unos i prethodno skriveno stanje. Ovo omogućava RNN-ovima da hvataju i uče obrasce koji se protežu kroz više vremenskih koraka i prilagođavaju svoje ponašanje na osnovu cijelog konteksta sekvence.

Implementacija jednostavnog RNN-a u Python-u

U ovom odeljku ćemo implementirati jednostavan RNN koristeći Python i Tensorflow, popularnu biblioteku dubokog učenja. Naš cilj je stvoriti RNN koji može predvidjeti sljedeći karakter u tekstu, dajući isječak teksta kao ulaz.

import tensorflow as tf
import numpy as np

# Preprocess the text data
text = "The quick brown fox jumps over the lazy dog."
chars = sorted(set(text))
char_to_index = {char: index for index, char in enumerate(chars)}
index_to_char = {index: char for index, char in enumerate(chars)}

# Prepare the input and output sequences
sequence_length = 10
input_sequences = []
output_sequences = []
for i in range(0, len(text) - sequence_length):
  input_sequences.append([char_to_index[c] for c in text[i:i + sequence_length]])
  output_sequences.append(char_to_index[text[i + sequence_length]])

input_sequences = np.array(input_sequences)
output_sequences = np.array(output_sequences)

# Build the RNN model
model = tf.keras.Sequential([
  tf.keras.layers.Embedding(len(chars), 8, input_length=sequence_length),
  tf.keras.layers.SimpleRNN(16, return_sequences=False, activation="tanh"),
  tf.keras.layers.Dense(len(chars), activation="softmax")
])

model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])

U kodu iznad, prvo uvozimo potrebne biblioteke i prethodno obrađujemo tekstualne podatke. Tekstualni podaci se zatim pretvaraju u ulazne i izlazne sekvence.

RNN model je izgrađen pomoću Keras API-ja iz Tensorflowa. Prvo kreiramo sloj za ugrađivanje za mapiranje znakova u kontinuirani vektorski prostor, a zatim slijedi sloj SimpleRNN sa 16 skrivenih jedinica. Na kraju, gusti sloj sa softmax aktivacijskom funkcijom je dodan kako bi se generirale konačne vjerovatnoće za svaki karakter.

Obuka i testiranje RNN-a

Jednom kada je naš model izgrađen, možemo ga trenirati na ulaznim sekvencama i njihovim odgovarajućim izlaznim_sekvencijama.

# Train the model
model.fit(input_sequences, output_sequences, epochs=100, batch_size=1)

# Generate a new text sequence from the trained model
seed = "The quick "
input_seed = np.array([[char_to_index[c] for c in seed]])
output_chars = []
for _ in range(sequence_length):
  predictions = model.predict(input_seed)
  next_char = index_to_char[np.argmax(predictions)]
  output_chars.append(next_char)
  input_seed = np.roll(input_seed, -1)
  input_seed[-1] = char_to_index[next_char]

generated_text = "".join(output_chars)
print(seed + generated_text)

RNN je obučen korištenjem Adamovog optimizatora i rijetkog kategoričkog gubitka krosentropije. Nakon obuke, generišemo novu tekstualnu sekvencu tako što obučenom RNN-u unosimo početni tekst i predviđamo sledeći znak, a zatim ažuriramo unos predviđenim karakterom i nastavljamo ovaj proces za željenu dužinu.

U zaključku, rekurentne neuronske mreže su moćan alat za obradu sekvencijalnih podataka, hvatajući složene odnose u više vremenskih koraka. Implementacijom jednostavnog RNN-a u Python-u, pokazali smo njihov potencijal za zadatke generiranja teksta. Ovi modeli se mogu proširiti i poboljšati kako bi se uhvatili u koštac sa širokim spektrom problema od sekvence do sekvence, što ih čini bitnom komponentom u polju dubokog učenja.

Slični postovi: