Keras - Prediksi Rangkaian Waktu menggunakan LSTM RNN
Dalam bab ini, mari kita tulis RNN sederhana berbasis Long Short Term Memory (LSTM) untuk melakukan analisis urutan. Urutan adalah sekumpulan nilai di mana setiap nilai sesuai dengan contoh waktu tertentu. Mari kita perhatikan contoh sederhana membaca kalimat. Membaca dan memahami kalimat melibatkan membaca kata dalam urutan tertentu dan mencoba memahami setiap kata dan artinya dalam konteks yang diberikan dan akhirnya memahami kalimat dalam sentimen positif atau negatif.
Di sini, kata-kata dianggap sebagai nilai, dan nilai pertama sesuai dengan kata pertama, nilai kedua sesuai dengan kata kedua, dll., Dan urutannya akan dipertahankan dengan ketat. Sequence Analysis sering digunakan dalam pemrosesan bahasa alami untuk menemukan analisis sentimen dari teks yang diberikan.
Mari kita buat model LSTM untuk menganalisis review film IMDB dan menemukan sentimen positif / negatifnya.
Model untuk analisis sekuens dapat direpresentasikan sebagai berikut -
Fitur inti dari model ini adalah sebagai berikut -
Input layer menggunakan lapisan Embedding dengan 128 fitur.
Layer pertama, Dense terdiri dari 128 unit dengan dropout normal dan dropout berulang diatur ke 0.2.
Output layer, Dense terdiri dari 1 unit dan fungsi aktivasi 'sigmoid'.
Menggunakan binary_crossentropy sebagai fungsi kerugian.
Menggunakan adam sebagai Pengoptimal.
Menggunakan accuracy sebagai metrik.
Gunakan 32 sebagai ukuran batch.
Gunakan 15 sebagai epoch.
Gunakan 80 sebagai panjang maksimum kata.
Gunakan 2000 sebagai jumlah kata maksimum dalam kalimat tertentu.
Langkah 1: Impor modul
Mari kita impor modul yang diperlukan.
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Embedding
from keras.layers import LSTM
from keras.datasets import imdb
Langkah 2: Muat data
Mari kita impor dataset imdb.
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words = 2000)
Sini,
imdbadalah kumpulan data yang disediakan oleh Keras. Ini mewakili kumpulan film dan ulasannya.
num_words mewakili jumlah kata maksimum dalam ulasan.
Langkah 3: Proses data
Mari kita ubah dataset sesuai dengan model kita, sehingga bisa dimasukkan ke dalam model kita. Data dapat diubah menggunakan kode di bawah ini -
x_train = sequence.pad_sequences(x_train, maxlen=80)
x_test = sequence.pad_sequences(x_test, maxlen=80)
Sini,
sequence.pad_sequences mengkonversi daftar data masukan dengan bentuk, (data) ke dalam array bentuk NumPy 2D (data, timesteps). Pada dasarnya, ini menambahkan konsep waktu ke dalam data yang diberikan. Ini menghasilkan panjang langkah,maxlen.
Langkah 4: Buat model
Mari kita buat model sebenarnya.
model = Sequential()
model.add(Embedding(2000, 128))
model.add(LSTM(128, dropout = 0.2, recurrent_dropout = 0.2))
model.add(Dense(1, activation = 'sigmoid'))
Sini,
Kami telah menggunakan Embedding layersebagai lapisan masukan dan kemudian ditambahkan lapisan LSTM. Akhirnya, aDense layer digunakan sebagai lapisan keluaran.
Langkah 5: Kompilasi model
Mari kita kompilasi model menggunakan fungsi kerugian, pengoptimal, dan metrik yang dipilih.
model.compile(loss = 'binary_crossentropy',
optimizer = 'adam', metrics = ['accuracy'])
Langkah 6: Latih modelnya
Izinkan kami melatih model menggunakan fit() metode.
model.fit(
x_train, y_train,
batch_size = 32,
epochs = 15,
validation_data = (x_test, y_test)
)
Menjalankan aplikasi akan menampilkan informasi di bawah ini -
Epoch 1/15 2019-09-24 01:19:01.151247: I
tensorflow/core/platform/cpu_feature_guard.cc:142]
Your CPU supports instructions that this
TensorFlow binary was not co mpiled to use: AVX2
25000/25000 [==============================] - 101s 4ms/step - loss: 0.4707
- acc: 0.7716 - val_loss: 0.3769 - val_acc: 0.8349 Epoch 2/15
25000/25000 [==============================] - 95s 4ms/step - loss: 0.3058
- acc: 0.8756 - val_loss: 0.3763 - val_acc: 0.8350 Epoch 3/15
25000/25000 [==============================] - 91s 4ms/step - loss: 0.2100
- acc: 0.9178 - val_loss: 0.5065 - val_acc: 0.8110 Epoch 4/15
25000/25000 [==============================] - 90s 4ms/step - loss: 0.1394
- acc: 0.9495 - val_loss: 0.6046 - val_acc: 0.8146 Epoch 5/15
25000/25000 [==============================] - 90s 4ms/step - loss: 0.0973
- acc: 0.9652 - val_loss: 0.5969 - val_acc: 0.8147 Epoch 6/15
25000/25000 [==============================] - 98s 4ms/step - loss: 0.0759
- acc: 0.9730 - val_loss: 0.6368 - val_acc: 0.8208 Epoch 7/15
25000/25000 [==============================] - 95s 4ms/step - loss: 0.0578
- acc: 0.9811 - val_loss: 0.6657 - val_acc: 0.8184 Epoch 8/15
25000/25000 [==============================] - 97s 4ms/step - loss: 0.0448
- acc: 0.9850 - val_loss: 0.7452 - val_acc: 0.8136 Epoch 9/15
25000/25000 [==============================] - 95s 4ms/step - loss: 0.0324
- acc: 0.9894 - val_loss: 0.7616 - val_acc: 0.8162Epoch 10/15
25000/25000 [==============================] - 100s 4ms/step - loss: 0.0247
- acc: 0.9922 - val_loss: 0.9654 - val_acc: 0.8148 Epoch 11/15
25000/25000 [==============================] - 99s 4ms/step - loss: 0.0169
- acc: 0.9946 - val_loss: 1.0013 - val_acc: 0.8104 Epoch 12/15
25000/25000 [==============================] - 90s 4ms/step - loss: 0.0154
- acc: 0.9948 - val_loss: 1.0316 - val_acc: 0.8100 Epoch 13/15
25000/25000 [==============================] - 89s 4ms/step - loss: 0.0113
- acc: 0.9963 - val_loss: 1.1138 - val_acc: 0.8108 Epoch 14/15
25000/25000 [==============================] - 89s 4ms/step - loss: 0.0106
- acc: 0.9971 - val_loss: 1.0538 - val_acc: 0.8102 Epoch 15/15
25000/25000 [==============================] - 89s 4ms/step - loss: 0.0090
- acc: 0.9972 - val_loss: 1.1453 - val_acc: 0.8129
25000/25000 [==============================] - 10s 390us/step
Langkah 7 - Evaluasi model
Mari kita evaluasi model menggunakan data uji.
score, acc = model.evaluate(x_test, y_test, batch_size = 32)
print('Test score:', score)
print('Test accuracy:', acc)
Menjalankan kode di atas akan menampilkan informasi di bawah ini -
Test score: 1.145306069601178
Test accuracy: 0.81292