Diselesaikan: pytorch jaringan saraf berulang

Pembaharuan Terakhir: 09/11/2023

jaringan saraf berulang Recurrent Neural Networks (RNNs) adalah jenis jaringan saraf tiruan yang dirancang untuk memproses dan menganalisis urutan data. Mereka telah terbukti sangat berguna dalam berbagai aplikasi, termasuk pemrosesan bahasa alami, pengenalan suara, dan prediksi deret waktu. Pada artikel ini, kita akan menyelam jauh ke dalam dunia RNN, menjelajahi bagaimana mereka memecahkan masalah pemrosesan data berurutan, dan menelusuri implementasi langkah demi langkah dari RNN sederhana dengan Python.

Memahami Recurrent Neural Networks

A Jaringan Neural Berulang adalah jenis jaringan saraf yang berisi perulangan, yang memungkinkan informasi bertahan dalam beberapa langkah waktu. Ini sangat berguna untuk memproses urutan data, di mana urutan dan waktu elemen memainkan peran penting dalam memahami pola yang mendasarinya. Jaringan saraf feedforward tradisional tidak memiliki kemampuan ini, karena mereka memproses input secara independen dan output dari satu lapisan tidak diumpankan kembali ke lapisan itu sendiri.

Salah satu komponen kunci dari RNN adalah keadaan tersembunyi, yang merupakan representasi dari elemen sebelumnya dalam urutan. Status tersembunyi diperbarui pada setiap langkah waktu, dengan mempertimbangkan input saat ini dan status tersembunyi sebelumnya. Hal ini memungkinkan RNN untuk menangkap dan mempelajari pola yang menjangkau beberapa langkah waktu dan menyesuaikan perilakunya berdasarkan seluruh konteks urutan.

Implementasi RNN Sederhana dengan Python

Pada bagian ini, kita akan mengimplementasikan RNN sederhana menggunakan Python dan Tensorflow, library deep learning yang populer. Tujuan kami adalah membuat RNN yang dapat memprediksi karakter berikutnya dalam teks, dengan memberikan potongan teks sebagai masukan.

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"])

Dalam kode di atas, pertama-tama kita mengimpor pustaka yang diperlukan dan memproses data teks terlebih dahulu. Data teks kemudian diubah menjadi urutan input dan output.

Model RNN dibangun menggunakan Keras API dari Tensorflow. Pertama-tama kita membuat layer Embedding untuk memetakan karakter ke ruang vektor kontinu, diikuti oleh layer SimpleRNN dengan 16 unit tersembunyi. Terakhir, lapisan Padat dengan fungsi aktivasi softmax ditambahkan untuk menghasilkan probabilitas akhir untuk setiap karakter.

Melatih dan Menguji RNN

Setelah model kami dibangun, kami dapat melatihnya pada urutan input dan output_sequences yang sesuai.

# 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 dilatih menggunakan pengoptimal Adam dan kehilangan lintas entropi kategoris yang jarang. Setelah pelatihan, kami menghasilkan urutan teks baru dengan memberi RNN yang terlatih teks benih dan memprediksi karakter berikutnya, kemudian memperbarui input dengan karakter yang diprediksi dan melanjutkan proses ini selama yang diinginkan.

Kesimpulannya, Recurrent Neural Networks adalah alat yang ampuh untuk memproses data sekuensial, menangkap hubungan kompleks dalam beberapa langkah waktu. Dengan mengimplementasikan RNN sederhana dengan Python, kami mendemonstrasikan potensinya untuk tugas pembuatan teks. Model-model ini dapat diperluas dan ditingkatkan untuk mengatasi berbagai macam masalah urutan-ke-urutan, menjadikannya komponen penting dalam bidang pembelajaran mendalam.

Pos terkait: