Python Colaboratory
3種の timeseries_dataset デ-タを作成
引き続き、3種の timeseries_dataset デ-タを作成していきます。
その用途は次のようになります。
- 訓練デ-タセット train_dataset
RNN モデルを訓練するためのデ-タセットです。
なるべく沢山のデ-タを作成します。
原則、訓練デ-タセットと検証デ-タセットは同じものは使用せず、分離します。
今回はすべてのデ-タを訓練デ-タとして利用します。
そこには、問題点もあるのですが・・・後述-情報の漏れ-参照 - 検証デ-タセット val_dataset
モデルの評価をするためのデ-タセットです。
普通全体の 1/4~1/2 のデ-タの直近のものを使用します。
訓練デ-タセットと重複しないようにします。
しかしながら、今回は 1/2 の直近デ-タを使用します、訓練デ-タセットと重複しています。 - テストデ-タセット test_dataset
テストデ-タで訓練・学習度合いを確認します。
どのくらい目的値と乖離しているかみるためのものです。
普通 1/4 程度のデ-タの直近のものを使用します。
今回は、すべてのデ-タをテストデ-タとして利用します。
訓練、検証デ-タとの違いは、目的値がテストデ-タにはありません。 - 情報の漏れ
今回、訓練デ-タの後半と検証デ-タが同じものになっています。
これにより人は、RNN の層の数やサイズ(ハイパラメ-タ)をチュ-ニングしていきます。
これを繰り返すと検証デ-タに関する情報がモデルに漏れだします。
つまり、検証デ-タでの性能が人為的につり上げられてしまいます。
検証デ-タに合わせて最適化したのですから当然です。
肝心なのは、検証デ-タでの性能ではなく、全く新しいデ-タでの性能です。
実際、今回のケ-スでも sequence_length の値や活性化関数や層のサイズ等をチュ-ニングしました。
この様な問題点もあるのですが、RNN の場合、
新しい予測したいデ-タは、直前の既知のデ-タを90~95%ぐらいを使用します。
よって、訓練デ-タと検証デ-タはある程度重複しても良いのではないかと考えていますがどうでしょうか?
訓練デ-タセット作成
まず最初に、訓練デ-タセットを作成します。
keras モジュ-ルを import します。
from tensorflow import keras
train_dataset = keras.utils.timeseries_dataset_from_array( )
とし、括弧内に引数を設定すれば完了です。
- 第1引数元デ-タ data
第1引数は元デ-タです。
これは CSV デ-タ timeseries_dataset ファイルまとめ のところで作成した標準化した raw_data が元デ-タになります。
本来、
data=raw_data,
と書くべきところなのでしょうが、みなさん data= を省略して
raw_data,
と書いておられるようです。 - 第 2~4 引数目的値 targets 他
第2引数は目的値 targets です。
目的値は、 シ-ケンス(20個のデ-タまとまり)の次にあります。
delay = sampling_rate × sequence_length
= 1 × 20
でした。
よって、
targets=raw_data[delay:],
sampling_rate=sampling_rate,
sequence_length=sequence_length,
とします。 - 第5引数 batch_size
第5引数は batch_size です。
例の適当な値です。
今回は 32 にしました。
batch_size=batch_size,
訓練デ-タセット部分をまとめると、次のようになります。
from tensorflow import keras train_dataset = keras.utils.timeseries_dataset_from_array( raw_data, targets=raw_data[delay:], sampling_rate=sampling_rate, sequence_length=sequence_length, batch_size=batch_size, )
検証デ-タセット作成
次に、検証デ-タセットを作成します。
val_dataset = keras.utils.timeseries_dataset_from_array( )
とし、括弧内に引数を設定すれば完了です。
- 第1引数元デ-タ data
第1引数は元デ-タです。
本来は raw_data, なのですが、 検証デ-タは、訓練デ-タと異なり、別途スタ-ト点 num_half_samples が指定されます。 よって、終点を指定する必要があります。 終点は最後のデ-タですので、 raw_data[:-1], とします。 - 第 2~4 引数目的値 targets 他
第2引数は目的値 targets です。
目的値は、 シ-ケンス(20個のデ-タまとまり)の次にあります。
delay = sampling_rate × sequence_length
よって、
targets=raw_data[delay:],
sampling_rate=sampling_rate,
sequence_length=sequence_length,
とします。 - 第5引数 batch_size
第5引数は batch_size です。
batch_size=batch_size, - 第6引数 start_index
第6引数は start_index です。
スタ-ト点は、raw_data の半分の中間点 num_half_samples からに指定しました。
start_index=num_half_samples,
検証デ-タセット部分をまとめると次のようになります。
val_dataset = keras.utils.timeseries_dataset_from_array( raw_data[-1], targets=raw_data[delay:], sampling_rate=sampling_rate, sequence_length=sequence_length, batch_size=batch_size, start_index=num_half_samples, )
テストデ-タセット作成
最後に、テストデ-タセットを作成します。
test_dataset = keras.utils.timeseries_dataset_from_array( )
とし、括弧内に引数を設定すれば完了です。
- 第1引数元デ-タ data
第1引数は元デ-タです。
訓練デ-タと同じです。 raw_data,
- 第 2~4 引数目的値 targets 他
第2引数は目的値 targets です。
目的値は、テストデ-タにはありません。 targets=None, とします。 sampling_rate=sampling_rate,
sequence_length=sequence_length,
は残します。 - 第5引数 batch_size
第5引数は batch_size です。
batch_size=batch_size,
テストデ-タセット部分をまとめると、次のようになります。
test_dataset = keras.utils.timeseries_dataset_from_array( raw_data, targets=None, sampling_rate=sampling_rate, sequence_length=sequence_length, batch_size=batch_size, )
引き続き、各デ-タセットの内容を表示していきます。