第15章.RNNとCNNを使用してシーケンスを処理
1.RNN概念
1-1. じゅんかんニューロン
x(t)
およびそれ以前の時間ステップの出力y(t-1)을 입력으로
が受け入れられる.1-2. メモリセル
메모리
の形状を有する以前の時間ステップのすべての入力関数を記憶する.2.RNNトレーニング
2-1. BPTT
3.表列予測
import numpy as np
def generate_time_series(batch_size, n_steps):
"""
Description:
타임 스텝 시계열 데이터
"""
freq1, freq2, offsets1, offsets2 = np.random.rand(4, batch_size, 1)
time = np.linspace(0,1,n_steps)
# 사인 곡선 1
series = 0.5 * np.sin((time-offsets1) * (freq1*10+10))
# 사인 곡선 2
series += 0.2 * np.sin((time-offsets2) * (freq2*20+20))
# 잡음
series += 0.1 * (np.random.rand(batch_size, n_steps) - 0.5)
return series[..., np.newaxis].astype(np.float32)
# train, valid, test 세트 생성
n_steps = 50
series = generate_time_series(10000, n_steps+1)
X_train, y_train = series[:7000, :n_steps], series[:7000, -1]
X_valid, y_valid = series[7000:9000, n_steps], series[7000:9000 , -1]
X_test, y_test = series[9000:, n_steps], series[9000:, -1]
3-1. データム性能の決定
🖥 純真な予測を実現する
y_pred = X_valid[:, -1]
np.mean(keras.losses.mean_squared_error(x_valid, y_pred))
🖥 線形回帰モデル予測の実装
model = keras.models.Sequential([
# 입력마다 1차원 특성 배열 기대하므로 Flatten
keras.layers.Flatten(input_shape=[50,1]),
keras.layers.Dense(1)
])
3-2. 複数の時間ステップの事前予測
深層RNNを使用して
🖥 深さRNN実施
# 10 스텝 앞을 예측하기 위해 n_step 수 변경
series = generate_time_series(10000, n_steps+10)
X_new, Y_new = series[:, :n_steps], series[:, n_steps:]
X_train, Y_train = series[:7000, :n_steps], series[:7000, -10:, 0]
X_valid, Y_valid = series[7000:9000, :n_steps], series[7000:9000, -10:, 0]
X_test, Y_test = series[9000:, :n_steps], series[9000:, -10:, 0]
# 시퀀스 모델 생성
model= keras.models.Sequential([
keras.layers.SimpleRNN(20, return_sequences=True, input_shape=[None,1])
keras.layers.SimpleRNN(20),
keras.layers.Dense(0)
])
Y_pred = mode.predict(X_new)
🖥 シーケンスをベクトルに変更して、シーケンスをシーケンスモデルに変更します.model= keras.models.Sequential([
keras.layers.SimpleRNN(20, return_sequences=True, input_shape=[None,1])
keras.layers.SimpleRNN(20, return_sequences=True),
keras.layers.TimeDistributed(keras.layers.Dense(0))
])
(return sequence=True:各ステップの出力を保存)
4.長いシーケンス
4-1. 不安定なグラデーションの解決
4-2. 長期メモリを持つユニット
LSTMユニット(長-短メモリ)
≪ゲートウェイの削除|Delete Gateway|oem_src≫:長期間保存され、必要に応じて保持されます.
学習
🖥 LSTM実装
model= keras.models.Sequential([
keras.layers.LSTM(20, return_sequences=True, input_shape=[None,1])
keras.layers.LSTM(20, return_sequences=True),
keras.layers.TimeDistributed(keras.layers.Dense(0))
])
GRUユニットWAVENET
2番目のConv 1 Dでは、次の4つのタイプのステップがあります.
🖥 WANET実施
model = keras,models.Sequential()
model.add(keras.layers.InputLayer(input_shape=[None,1]))
for rate in (1,2,4,8)*2:
model.add(keras.layers.Conv1D(filters=20, kernel_size=2, padding=‘casual’,
activation=‘relu’, dilation_rate=rate))
model.add(keras.layers.Conv1D(filters=10,kernel_size=1))
model.compile(loss=‘mse’, optimizer=‘adam’, metrics=[last_time_step_mse])
history = model.fit(X_train, Y_train, epochs=20,
validation_data=(X_valid, Y_valid))
Quiz 1 . 次のシーケンス-デュアルベクトルをシーケンス-デュアルシーケンスに変更してくださいmodel= keras.models.Sequential([
keras.layers.SimpleRNN(20, return_sequences=True, input_shape=[None,1])
keras.layers.SimpleRNN(20),
keras.layers.Dense(0)
])
A. 1. すべてのループレイヤに対してreturn sequences=Trueパラメータを指定2.すべての時間ステップで出力をDense層に適用する
model= keras.models.Sequential([
keras.layers.SimpleRNN(20, return_sequences=True, input_shape=[None,1])
keras.layers.SimpleRNN(20, return_sequences=True),
keras.layers.TimeDistributed(keras.layers.Dense(0))
])
Quiz 2. 以下の説明に従ってモデルを実施してください.1.Embeddingを使用すると、単語セット(Vocabulary)のサイズは5000、埋め込みベクトルの次元は100になります.
2.非表示層は単純RNNを使用し、非表示状態の大きさは128である.
3.トレーニングに使用される全てのサンプルの長さを30とする.
4.信号関数を使用する出力層内の1つのニューロンのバイナリ分類モデルを実行する.
5.隠匿層は一つしかない.
A.RNN実施
from keras.models.layers import Sequential
from keras.layers import SimpoleRNN, Embedding, Dense
vocab_size = 5000
embedding_dim = 100
hidden_size = 128
model = Sequential()
embed = Embedding(input_dim=vocab_size,
ontput_dim=embedding_dim)
model.add(embed)
model.add(SimpleRNN(hidden_size))
model.add(Dense(1, activation=‘sigmoid’))
model.summary()
Reference
この問題について(第15章.RNNとCNNを使用してシーケンスを処理), 我々は、より多くの情報をここで見つけました https://velog.io/@juliy9812/15장.-RNN과-CNN을-사용해-시퀀스-처리하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol