[ハイブリッド機器]循環ニューラルネットワーク:LSTM、GRUユニット
28933 ワード
[独自学習の機械学習+深さ学習]本に基づく整理文章
次のGithubリンクは、完全なソースコードを提供します.
Githubリンク
0.概要
一般的に、基本循環層は長詩皇后を学ぶのは難しい.距離が遠い単語情報は認識しにくいかもしれないが,これは時間が経つにつれてループの隠匿状態に含まれる情報が徐々に希釈されるためである.このため、LSTMおよびGRUユニットが発明された.
本編では,高度なループ層LSTMとGRUユニットを用いて多様なループニューラルネットワークを構築する.
1.トレーニングデータ、ダウンジャケットの準備
まず訓練に必要なデータを準備し,訓練グループと検証グループに分けた.
LSTM(Long Short-term Memory)は、短期記憶を長時間記憶するために設計されている.複数の構造を持ち、入力と重み付け、スライスを加えて関数をアクティブにします.これらの計算結果は次の時間ステップで繰り返し使用されます.
2-1. LSTMユニットを使用した循環層の作成
前回の簡単なRNNではなくLSTMを使用します.
2-3. ループレイヤにドロップダウンメニューを適用するには
ループレイヤは、取り外し機能を提供します.
ここでは
訓練損失と検証損失の差が縮小していることがわかる.
2-4. 2層接続
ループ層の隠匿状態は,試料の最後の時間ステップの隠匿状態に対してのみ次の層に伝達される.ただし、ループレイヤを作成する場合は、すべてのループレイヤに順序データが必要です.
ケラスのサイクルレイヤですべての時間ステップの非表示状態を出力するには、最後を除いて、他のすべてのサイクルレイヤは
その後モデルを訓練する.
高適合性を制御しすぎると同時に損失が低減することが分かる.
3.GRUニューラルネットワークのトレーニング
このセルはLSTMの簡略化されたバージョンと見なすことができ,LSTMのようにセル状態を計算するのではなく,1つの非表示状態のみを含む.
GRUユニットの重みはLSTMよりも小さいため、計算量は小さいが、性能はLSTMに劣らない.
ジャンプシュートは使用されていないため、訓練と検証の損失は以前より異なるが、訓練過程がうまく収束していることが確認された.
次のGithubリンクは、完全なソースコードを提供します.
Githubリンク
0.概要
一般的に、基本循環層は長詩皇后を学ぶのは難しい.距離が遠い単語情報は認識しにくいかもしれないが,これは時間が経つにつれてループの隠匿状態に含まれる情報が徐々に希釈されるためである.このため、LSTMおよびGRUユニットが発明された.
本編では,高度なループ層LSTMとGRUユニットを用いて多様なループニューラルネットワークを構築する.
1.トレーニングデータ、ダウンジャケットの準備
まず訓練に必要なデータを準備し,訓練グループと検証グループに分けた.
from tensorflow.keras.datasets import imdb
from sklearn.model_selection import train_test_split
(train_input, train_target), (test_input, test_target) = imdb.load_data(num_words=500)
train_input, val_input, train_target, val_target = train_test_split(train_input, train_target, test_size=0.2, random_state=42)
各サンプルの長さをケラスのpad_sequences()
関数で100に調整した.from tensorflow.keras.preprocessing.sequence import pad_sequences
train_seq = pad_sequences(train_input, maxlen = 100)
val_seq = pad_sequences(val_input, maxlen=100)
2. LSTMLSTM(Long Short-term Memory)は、短期記憶を長時間記憶するために設計されている.複数の構造を持ち、入力と重み付け、スライスを加えて関数をアクティブにします.これらの計算結果は次の時間ステップで繰り返し使用されます.
2-1. LSTMユニットを使用した循環層の作成
前回の簡単なRNNではなくLSTMを使用します.
from tensorflow import keras
model = keras.Sequential()
model.add(keras.layers.Embedding(500, 16, input_length=100))
model.add(keras.layers.LSTM(8))
model.add(keras.layers.Dense(1,activation='sigmoid'))
RMSprop
の学習率を0.0001に調整し、レイアウトサイズを64個、エポック回数を100に指定します.チェックポイントと早期終了も含まれています.rmsprop = keras.optimizers.RMSprop(learning_rate = 1e-4)
model.compile(optimizer=rmsprop, loss='binary_crossentropy', metrics=['accuracy'])
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-lstm-model.h5')
early_stopping_cb = keras.callbacks.EarlyStopping(patience=3, restore_best_weights=True)
history = model.fit(train_seq, train_target, epochs=100, batch_size=64, validation_data=[val_seq, val_target], callbacks=[checkpoint_cb, early_stopping_cb])
2-2. トレーニング損失と検証損失図の描画import matplotlib.pyplot as plt
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()
グラフからLSTMは過剰な適応を抑えながらもよく訓練されていることがわかる.2-3. ループレイヤにドロップダウンメニューを適用するには
ループレイヤは、取り外し機能を提供します.
SimpleRNN
およびLSTM
クラスは、いずれもdropout
パラメータおよびrecurrent_dropout
パラメータを有する.dropout
パラメータはユニットの入力アプリケーションに配置され、recurrent_dropout
パラメータはループの非表示状態アプリケーションに配置される.しかし、recurrent_dropout
はGPUトレーニングモデルを使用できない.ここでは
dropout
を0.3と指定します.model2 = keras.Sequential()
model2.add(keras.layers.Embedding(500, 16, input_length=100))
model2.add(keras.layers.LSTM(8, dropout=0.3))
model2.add(keras.layers.Dense(1, activation='sigmoid'))
rmsprop = keras.optimizers.RMSprop(learning_rate = 1e-4)
model2.compile(optimizer=rmsprop, loss='binary_crossentropy', metrics=['accuracy'])
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-drop-model.h5')
early_stopping_cb = keras.callbacks.EarlyStopping(patience=3, restore_best_weights=True)
history = model2.fit(train_seq, train_target, epochs=100, batch_size=64, validation_data=[val_seq, val_target], callbacks=[checkpoint_cb, early_stopping_cb])
訓練と検証損失をグラフで描く.plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()
訓練損失と検証損失の差が縮小していることがわかる.
2-4. 2層接続
ループ層の隠匿状態は,試料の最後の時間ステップの隠匿状態に対してのみ次の層に伝達される.ただし、ループレイヤを作成する場合は、すべてのループレイヤに順序データが必要です.
ケラスのサイクルレイヤですべての時間ステップの非表示状態を出力するには、最後を除いて、他のすべてのサイクルレイヤは
return_sequences
パラメータをTrue
と指定します.model3 = keras.Sequential()
model3.add(keras.layers.Embedding(500, 16, input_length=100))
model3.add(keras.layers.LSTM(8, dropout=0.3, return_sequences=True))
model3.add(keras.layers.LSTM(8, dropout=0.3))
model3.add(keras.layers.Dense(1, activation='sigmoid'))
LSTM層を2つ積み上げ,0.3に落下することを指定した.その後モデルを訓練する.
rmsprop = keras.optimizers.RMSprop(learning_rate = 1e-4)
model3.compile(optimizer=rmsprop, loss='binary_crossentropy', metrics=['accuracy'])
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-2rnn-model.h5')
early_stopping_cb = keras.callbacks.EarlyStopping(patience=3, restore_best_weights=True)
history = model3.fit(train_seq, train_target, epochs=100, batch_size=64, validation_data=[val_seq, val_target], callbacks=[checkpoint_cb, early_stopping_cb])
損失図を描く.plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()
高適合性を制御しすぎると同時に損失が低減することが分かる.
3.GRUニューラルネットワークのトレーニング
このセルはLSTMの簡略化されたバージョンと見なすことができ,LSTMのようにセル状態を計算するのではなく,1つの非表示状態のみを含む.
GRUユニットの重みはLSTMよりも小さいため、計算量は小さいが、性能はLSTMに劣らない.
model4 = keras.Sequential()
model4.add(keras.layers.Embedding(500, 16, input_length=100))
model4.add(keras.layers.GRU(8))
model4.add(keras.layers.Dense(1, activation='sigmoid'))
rmsprop = keras.optimizers.RMSprop(learning_rate = 1e-4)
model4.compile(optimizer=rmsprop, loss='binary_crossentropy', metrics=['accuracy'])
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-gru-model.h5')
early_stopping_cb = keras.callbacks.EarlyStopping(patience=3, restore_best_weights=True)
history = model4.fit(train_seq, train_target, epochs=100, batch_size=64, validation_data=[val_seq, val_target], callbacks=[checkpoint_cb, early_stopping_cb])
出力損失図.plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()
ジャンプシュートは使用されていないため、訓練と検証の損失は以前より異なるが、訓練過程がうまく収束していることが確認された.
Reference
この問題について([ハイブリッド機器]循環ニューラルネットワーク:LSTM、GRUユニット), 我々は、より多くの情報をここで見つけました https://velog.io/@katinon/혼공머신-순환-신경망-LSTM-GRU-셀テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol