Path: blob/master/site/ja/tutorials/generative/autoencoder.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
オートエンコーダの基礎
このチュートリアルでは、基本、画像のノイズ除去、異常検出の3つの例を使用してオートエンコーダを紹介します。
オートエンコーダは、入力を出力にコピーするようにトレーニングされた特殊なタイプのニューラルネットワークです。たとえば、手書きの数字の画像が与えられた場合、オートエンコーダは最初に画像を低次元の潜在表現にエンコードし、次に潜在表現をデコードして画像に戻します。オートエンコーダは、再構成エラーを最小限に抑えながらデータを圧縮することを学習します。
オートエンコーダの詳細については、Ian Goodfellow、Yoshua Bengio、AaronCourville によるディープラーニングの第 14 章を参照してください。
TensorFlow とその他のライブラリをインポートする
データセットを読み込む
まず、Fashion MNIST データセットを使用して基本的なオートエンコーダーをトレーニングします。このデータセットの各画像は 28x28 ピクセルです。
最初の例:オートエンコーダの基本
次の2つの高密度レイヤーでオートエンコーダーを定義します。encoder
は、画像を 64 次元の潜在ベクトルに圧縮します。decoder
は、潜在空間から元の画像を再構築します。
モデルを定義するには、Keras Model Subclassing API を使用します。
入力とターゲットの両方として x_train
を使用してモデルをトレーニングします。encoder
は、データセットを 784 次元から潜在空間に圧縮することを学習し、decoder
は元の画像を再構築することを学習します。
モデルがトレーニングされたので、テストセットから画像をエンコードおよびデコードしてモデルをテストします。
2番目の例:画像のノイズ除去
オートエンコーダは、画像からノイズを除去するようにトレーニングすることもできます。 次のセクションでは、各画像にランダムノイズを適用して、ノイズの多いバージョンの FashionMNIST データセットを作成します。次に、ノイズの多い画像を入力として使用し、元の画像をターゲットとして使用して、オートエンコーダーをトレーニングします。
データセットを再インポートして、以前に行った変更を省略しましょう。
画像にランダムノイズを追加します
ノイズの多い画像をプロットします。
畳み込みオートエンコーダーを定義します。
この例では、encoder
の Conv2D レイヤーと、decoder
の Conv2DTranspose レイヤーを使用して畳み込みオートエンコーダーをトレーニングします。
エンコーダーの概要を見てみましょう。画像が 28x28 から 7x7 にダウンサンプリングされていることに注目してください。
デコーダーは画像を 7x7 から 28x28 にアップサンプリングします。
オートエンコーダにより生成されたノイズの多い画像とノイズ除去された画像の両方をプロットします。
3番目の例:異常検出
概要
この例では、オートエンコーダーをトレーニングして、ECG5000 データセットの異常を検出します。このデータセットには、5,000 の心電図が含まれ、それぞれに 140 のデータポイントがあります。データセットの簡略化されたバージョンを使用します。各例には、0
(異常なリズムに対応)または1
(正常なリズムに対応)のいずれかのラベルが付けられています。ここでは異常なリズムを特定することに興味があります。
注意:これはラベル付きのデータセットであるため、教師あり学習の問題と見なせます。この例の目的は、ラベルが使用できない、より大きなデータセットに適用できる異常検出の概念を説明することです(たとえば、数千の正常なリズムがあり、異常なリズムが少数しかない場合)。
オートエンコーダーを使用すると、どのようにして異常を検出できるのでしょうか?オートエンコーダは、再構築エラーを最小限に抑えるようにトレーニングされていることを思い出してください。オートエンコーダーは通常のリズムでのみトレーニングし、それを使用してすべてのデータを再構築します。私たちの仮説は、異常なリズムはより高い再構成エラーを持つだろうということです。次に、再構成エラーが固定しきい値を超えた場合、リズムを異常として分類します。
ECG データを読み込む
使用するデータセットは、timeseriesclassification.com のデータセットに基づいています。
データを [0,1]
に正規化します。
このデータセットで 1
としてラベル付けされている通常のリズムのみを使用して、オートエンコーダーをトレーニングします。正常なリズムを異常なリズムから分離します。
正常な ECG をプロットします。
異常な ECG をプロットします。
モデルを構築する
オートエンコーダは通常の ECG のみを使用してトレーニングされますが、完全なテストセットを使用して評価されることに注意してください。
再構成エラーが正常なトレーニング例からの1標準偏差より大きい場合、ECG を異常として分類します。まず、トレーニングセットからの正常な ECG、オートエンコーダーによりエンコードおよびデコードされた後の再構成、および再構成エラーをプロットします。
異常なテストサンプルで同様にプロットを作成します。
異常を検出します
再構成損失が指定してしきい値より大きいかどうかを計算することにより、異常を検出します。このチュートリアルでは、トレーニングセットから正常なサンプルの平均平均誤差を計算し、再構成誤差がトレーニングセットからの1標準偏差よりも大きい場合、以降のサンプルを異常として分類します。
トレーニングセットからの通常の ECG に再構成エラーをプロットします
平均より1標準偏差上のしきい値を選択します。
注意: テストサンプルを異常として分類するしきい値を選択するために使用できるアプローチは他にもあります。適切なアプローチはデータセットによって異なります。詳細については、このチュートリアルの最後にあるリンクを参照してください。
再構成エラーがしきい値よりも大きい場合は、ECG を異常として分類します。
次のステップ
オートエンコーダによる異常検出の詳細については、Victor Dibia が TensorFlow.js で構築したこの優れたインタラクティブな例をご覧ください。実際の使用例については、TensorFlow を使用してAirbus が ISS テレメトリデータの異常を検出する方法を参照してください。基本の詳細については、François Chollet によるこのブログ投稿をご一読ください。詳細については、Ian Goodfellow、Yoshua Bengio、Aaron Courville によるディープラーニングの第 14 章をご覧ください。