Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonを使用したエンコーダーとデコーダーを使用してオートエンコーダーを生成するにはどうすればよいですか?


Tensorflowは、Googleが提供する機械学習フレームワークです。これは、Pythonと組み合わせて使用​​されるオープンソースのフレームワークであり、アルゴリズム、深層学習アプリケーションなどを実装します。研究や生産目的で使用されます。

「tensorflow」パッケージは、以下のコード行を使用してWindowsにインストールできます-

pip install tensorflow

Tensorは、TensorFlowで使用されるデータ構造です。フロー図のエッジを接続するのに役立ちます。このフロー図は「データフローグラフ」と呼ばれます。テンソルは多次元配列またはリストに他なりません。

Kerasは、プロジェクトONEIROS(オープンエンドの神経電子インテリジェントロボットオペレーティングシステム)の研究の一環として開発されました。 Kerasは、Pythonで記述されたディープラーニングAPIです。これは、機械学習の問題を解決するのに役立つ生産的なインターフェースを備えた高レベルのAPIです。 Tensorflowフレームワーク上で実行されます。迅速な実験を支援するために構築されました。機械学習ソリューションの開発とカプセル化に不可欠な、本質的な抽象化とビルディングブロックを提供します。

KerasはすでにTensorflowパッケージに含まれています。以下のコード行を使用してアクセスできます。

import tensorflow
from tensorflow import keras

Keras機能APIは、シーケンシャルAPIを使用して作成されたモデルと比較してより柔軟なモデルを作成するのに役立ちます。機能APIは、非線形トポロジを持つモデルで動作し、レイヤーを共有し、複数の入力と出力で動作します。深層学習モデルは通常、複数のレイヤーを含む有向非巡回グラフ(DAG)です。機能APIは、レイヤーのグラフを作成するのに役立ちます。

以下のコードを実行するためにGoogleColaboratoryを使用しています。 Google ColabまたはColaboratoryは、ブラウザー上でPythonコードを実行するのに役立ち、構成が不要で、GPU(グラフィックプロセッシングユニット)に無料でアクセスできます。 Colaboratoryは、JupyterNotebookの上に構築されています。以下は、エンコーダーとデコーダーを使用してオートエンコーダーがどのように生成されるかを示すコードスニペットです-

encoder_input = keras.Input(shape=(28, 28, 1), name="img")
print("Adding layers to the model")
x = layers.Conv2D(16, 3, activation="relu")(encoder_input)
x = layers.Conv2D(32, 3, activation="relu")(x)
x = layers.MaxPooling2D(3)(x)
x = layers.Conv2D(32, 3, activation="relu")(x)
x = layers.Conv2D(16, 3, activation="relu")(x)
print("Performing global max pooling")
encoder_output = layers.GlobalMaxPooling2D()(x)
print("Creating a model using the layers")
encoder = keras.Model(encoder_input, encoder_output, name="encoder")
print("More information about the model")
encoder.summary()

print("Reshaping the layers in the model")
x = layers.Reshape((4, 4, 1))(encoder_output)
x = layers.Conv2DTranspose(16, 3, activation="relu")(x)
x = layers.Conv2DTranspose(32, 3, activation="relu")(x)
x = layers.UpSampling2D(3)(x)
x = layers.Conv2DTranspose(16, 3, activation="relu")(x)
decoder_output = layers.Conv2DTranspose(1, 3, activation="relu")(x)

autoencoder = keras.Model(encoder_input, decoder_output, name="autoencoder")
print("More information about the autoencoder")
autoencoder.summary()

コードクレジット-https://www.tensorflow.org/guide/keras/functional

出力

Adding layers to the model
Performing global max pooling
Creating a model using the layers
More information about the model
Model: "encoder"
_________________________________________________________________
Layer (type)                Output Shape             Param #
=================================================================
img (InputLayer)            [(None, 28, 28, 1)]       0
_________________________________________________________________
conv2d (Conv2D)             (None, 26, 26, 16)       160
_________________________________________________________________
conv2d_1 (Conv2D)           (None, 24, 24, 32)       4640
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 8, 8, 32)          0
_________________________________________________________________
conv2d_2 (Conv2D)             (None, 6, 6, 32)       9248
_________________________________________________________________
conv2d_3 (Conv2D)             (None, 4, 4, 16)       4624
_________________________________________________________________
global_max_pooling2d          (Global (None, 16)       0
=================================================================
Total params: 18,672
Trainable params: 18,672
Non-trainable params: 0
_________________________________________________________________
Reshaping the layers in the model
More information about the autoencoder
Model: "autoencoder"
_________________________________________________________________
Layer (type)                Output Shape          Param #
=================================================================
img (InputLayer)            [(None, 28, 28, 1)]    0
_________________________________________________________________
conv2d (Conv2D)             (None, 26, 26, 16)    160
_________________________________________________________________
conv2d_1 (Conv2D)           (None, 24, 24, 32)    4640
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 8, 8, 32)       0
_________________________________________________________________
conv2d_2 (Conv2D)          (None, 6, 6, 32)       9248
_________________________________________________________________
conv2d_3 (Conv2D)          (None, 4, 4, 16)       4624
_________________________________________________________________
global_max_pooling2d       (Global (None, 16)       0
_________________________________________________________________
reshape (Reshape)          (None, 4, 4, 1)          0
_________________________________________________________________
conv2d_transpose (Conv2DTran (None, 6, 6, 16)       160
_________________________________________________________________
conv2d_transpose_1 (Conv2DTr (None, 8, 8, 32)       4640
_________________________________________________________________
up_sampling2d (UpSampling2D) (None, 24, 24, 32)       0
_________________________________________________________________
conv2d_transpose_2 (Conv2DTr (None, 26, 26, 16)       4624
_________________________________________________________________
conv2d_transpose_3 (Conv2DTr (None, 28, 28, 1)       145
=================================================================
Total params: 28,241
Trainable params: 28,241
Non-trainable params: 0
_________________________________________________________________

説明

  • モデルにレイヤーが追加されます。

  • グローバル最大プーリングはこれらのレイヤーで実行されます

  • モデルはレイヤーを使用して作成されます。

  • モデルに関する詳細情報は、「概要」メソッドを使用して表示できます。

  • 機能APIを使用して、レイヤーのグラフの入力と出力を指定した後にモデルが作成されます。

  • これは、単一のグラフを使用して複数のモデルを生成できることを示しています。

  • ここでは、レイヤーのスタックを使用して、画像入力を16次元ベクトルに変換するエンコーダーとトレーニングに使用されるオートエンコーダーモデルの2つのモデルをインスタンス化します。


  1. BokehとPythonを使用して垂直棒グラフを視覚化するにはどうすればよいですか?

    Bokehは、データの視覚化に役立つPythonパッケージです。これはオープンソースプロジェクトです。 Bokehは、HTMLとJavaScriptを使用してプロットをレンダリングします。これは、Webベースのダッシュボードでの作業中に役立つことを示しています。 Bokehは、NumPy、Pandas、およびその他のPythonパッケージと組み合わせて簡単に使用できます。インタラクティブなプロットやダッシュボードなどを作成するために使用できます。 BokehはデータソースをJSONファイルに変換します。このファイルは、JavaScriptライブラリであるBokehJSへの入力として使用され

  2. matplotlibとPythonを使用して、複数のプロットを同じ図にプロットするにはどうすればよいですか?

    Matplotlibは、データの視覚化に使用される人気のあるPythonパッケージです。 データを視覚化することは、実際に数値を調べたり複雑な計算を実行したりすることなく、データで何が起こっているのかを理解するのに役立つため、重要なステップです。 定量的な洞察を聴衆に効果的に伝えるのに役立ちます。 Matplotlibは、データを使用して2次元プロットを作成するために使用されます。 Pythonアプリケーションにプロットを埋め込むのに役立つオブジェクト指向APIが付属しています。 Matplotlibは、IPythonシェル、Jupyterノートブック、SpyderIDEなどで使用できま