【DSW Gallery】Tensorflow2 builds CNN model
TensorFlow2 と Keras
TensorFlow 2 は、Google が開発した TensorFlow 1 をベースとする深層学習フレームワークです。アーキテクチャ、API、対応ハードウェア種別において大幅な最適化が行われています。TensorFlow 2 のアーキテクチャは主に以下の 2 つのレイヤーで構成されます。
1. トレーニングレイヤー
2. デプロイメントレイヤー
TensorFlow 2 の主な機能 - (1) tf.data を使ったデータロード - (2) tf.keras を使ったモデル構築、事前構築済みエステイメーターによるモデル検証、TensorFlow Hub を使った転移学習 - (3) eager モードでの実行とデバッグ - (4) 分散トレーニング戦略 (distribution strategy) の使用 - (5) SaveModel へのエクスポート - (6) TensorFlow Server、TensorFlow Lite、TensorFlow.js を使ったモデルのデプロイ - (7) 強力なクロスプラットフォーム機能。TensorFlow 2 のサービスは HTTP/REST または gRPC/protocol buffer を通じて直接実装され、TensorFlow Lite は Android、iOS、組み込みシステムに直接デプロイでき、TensorFlow.js は JavaScript 環境でモデルをデプロイします - (8) tf.keras の Functional API と Subclass API により、複雑なトポロジーを作成可能 - (9) tf.GradientTape と tf.custom_gradient を使ったトレーニングロジックのカスタマイズと、より細かな粒度の制御 - (10) 低レベル API と高レベル API を組み合わせて使用可能、完全にカスタマイズ可能 - (11) 高度な拡張機能:Ragged Tensors、Tensor2Tensor
Keras は TensorFlow の高レベル API であり、モデル開発の効率を大幅に向上させます。
本記事では、TensorFlow 2 の tf.keras を使い、Keras でのモデル開発・トレーニング方法を解説します。
1. TensorFlow のインポート
import tensorflow as tf
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
2. データセットのロード
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist. load_data()
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [=================================] - 0s 0us/step
2.1 現在のデータセットを視覚的に確認し、各カテゴリのサンプル数が均等かどうかを確認します
sns. countplot(y_train)
/home/pai/lib/python3.6/site-packages/seaborn/_decorators.py:43: FutureWarning: Pass the following variable as a keyword arg: x. From version 0.12, the only valid positional argument will be `data` , and passing other arguments without an explicit keyword will result in an error or misinterpretation.
FutureWarning
2.2 トレーニングデータに NaN サンプルが含まれていないか確認します
np.isnan(x_train).any()
False
テストデータセットに NaN サンプルが含まれていないか確認します
np.isnan(x_test).any()
False
3. データの前処理。ここでは 2 つの処理を行います。
a. 入力データセットをリシェイプし、本記事のモデルの入力データ形状の要件を満たすようにします
b. 正規化
input_shape = (28, 28, 1)
x_train=x_train.reshape(x_train.shape[0], x_train.shape[1], x_train.shape[2], 1)
x_train=x_train / 255.0
x_test = x_test.reshape(x_test.shape[0], x_test.shape[1], x_test.shape[2], 1)
x_test=x_test/255.0
ラベルをエンコードします。ここでは one-hot encoding を使用します
y_train = tf.one_hot(y_train.astype(np.int32), depth=10)
y_test = tf.one_hot(y_test.astype(np.int32), depth=10)
4. CNN モデルの構築
a. tf.keras.models.Sequential インターフェイスを使って構築します
b. 畳み込みレイヤー tf.keras.layers.Conv2D を順に追加します
c. 最大プーリングレイヤー tf.keras.layers.MaxPool2D
d. ドロップアウト tf.keras.layers.Dropout
e. 全結合レイヤー tf.keras.layers.Dense
batch_size = 64
num_classes = 10
epochs = 50
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (5,5), padding='same', activation='relu', input_shape=input_shape),
tf.keras.layers.Conv2D(32, (5,5), padding='same', activation='relu'),
tf.keras.layers.MaxPool2D(),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Conv2D(64, (3,3), padding='same', activation='relu'),
tf.keras.layers.Conv2D(64, (3,3), padding='same', activation='relu'),
tf.keras.layers.MaxPool2D(strides=(2,2)),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(num_classes, activation='softmax')
])
model.compile(optimizer=tf.keras.optimizers.RMSprop(epsilon=1e-08), loss='categorical_crossentropy', metrics=['acc'])
5. コールバック関数の定義
• このコールバック関数は、各エポックの終了時に精度が 99.5% を超えているかどうかを確認し、超えている場合はトレーニングを停止します
class myCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs={}):
if(logs.get('acc')>0.995):
print(" Reached 99.5% accuracy so canceling training。")
self.model.stop_training=True
callbacks = myCallback()
TensorFlow 2 は、Google が開発した TensorFlow 1 をベースとする深層学習フレームワークです。アーキテクチャ、API、対応ハードウェア種別において大幅な最適化が行われています。TensorFlow 2 のアーキテクチャは主に以下の 2 つのレイヤーで構成されます。
1. トレーニングレイヤー
2. デプロイメントレイヤー
TensorFlow 2 の主な機能 - (1) tf.data を使ったデータロード - (2) tf.keras を使ったモデル構築、事前構築済みエステイメーターによるモデル検証、TensorFlow Hub を使った転移学習 - (3) eager モードでの実行とデバッグ - (4) 分散トレーニング戦略 (distribution strategy) の使用 - (5) SaveModel へのエクスポート - (6) TensorFlow Server、TensorFlow Lite、TensorFlow.js を使ったモデルのデプロイ - (7) 強力なクロスプラットフォーム機能。TensorFlow 2 のサービスは HTTP/REST または gRPC/protocol buffer を通じて直接実装され、TensorFlow Lite は Android、iOS、組み込みシステムに直接デプロイでき、TensorFlow.js は JavaScript 環境でモデルをデプロイします - (8) tf.keras の Functional API と Subclass API により、複雑なトポロジーを作成可能 - (9) tf.GradientTape と tf.custom_gradient を使ったトレーニングロジックのカスタマイズと、より細かな粒度の制御 - (10) 低レベル API と高レベル API を組み合わせて使用可能、完全にカスタマイズ可能 - (11) 高度な拡張機能:Ragged Tensors、Tensor2Tensor
Keras は TensorFlow の高レベル API であり、モデル開発の効率を大幅に向上させます。
本記事では、TensorFlow 2 の tf.keras を使い、Keras でのモデル開発・トレーニング方法を解説します。
1. TensorFlow のインポート
import tensorflow as tf
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
2. データセットのロード
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist. load_data()
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [=================================] - 0s 0us/step
2.1 現在のデータセットを視覚的に確認し、各カテゴリのサンプル数が均等かどうかを確認します
sns. countplot(y_train)
/home/pai/lib/python3.6/site-packages/seaborn/_decorators.py:43: FutureWarning: Pass the following variable as a keyword arg: x. From version 0.12, the only valid positional argument will be `data` , and passing other arguments without an explicit keyword will result in an error or misinterpretation.
FutureWarning
2.2 トレーニングデータに NaN サンプルが含まれていないか確認します
np.isnan(x_train).any()
False
テストデータセットに NaN サンプルが含まれていないか確認します
np.isnan(x_test).any()
False
3. データの前処理。ここでは 2 つの処理を行います。
a. 入力データセットをリシェイプし、本記事のモデルの入力データ形状の要件を満たすようにします
b. 正規化
input_shape = (28, 28, 1)
x_train=x_train.reshape(x_train.shape[0], x_train.shape[1], x_train.shape[2], 1)
x_train=x_train / 255.0
x_test = x_test.reshape(x_test.shape[0], x_test.shape[1], x_test.shape[2], 1)
x_test=x_test/255.0
ラベルをエンコードします。ここでは one-hot encoding を使用します
y_train = tf.one_hot(y_train.astype(np.int32), depth=10)
y_test = tf.one_hot(y_test.astype(np.int32), depth=10)
4. CNN モデルの構築
a. tf.keras.models.Sequential インターフェイスを使って構築します
b. 畳み込みレイヤー tf.keras.layers.Conv2D を順に追加します
c. 最大プーリングレイヤー tf.keras.layers.MaxPool2D
d. ドロップアウト tf.keras.layers.Dropout
e. 全結合レイヤー tf.keras.layers.Dense
batch_size = 64
num_classes = 10
epochs = 50
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (5,5), padding='same', activation='relu', input_shape=input_shape),
tf.keras.layers.Conv2D(32, (5,5), padding='same', activation='relu'),
tf.keras.layers.MaxPool2D(),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Conv2D(64, (3,3), padding='same', activation='relu'),
tf.keras.layers.Conv2D(64, (3,3), padding='same', activation='relu'),
tf.keras.layers.MaxPool2D(strides=(2,2)),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(num_classes, activation='softmax')
])
model.compile(optimizer=tf.keras.optimizers.RMSprop(epsilon=1e-08), loss='categorical_crossentropy', metrics=['acc'])
5. コールバック関数の定義
• このコールバック関数は、各エポックの終了時に精度が 99.5% を超えているかどうかを確認し、超えている場合はトレーニングを停止します
class myCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs={}):
if(logs.get('acc')>0.995):
print(" Reached 99.5% accuracy so canceling training。")
self.model.stop_training=True
callbacks = myCallback()
Related Articles
-
A detailed explanation of Hadoop core architecture HDFS
Knowledge Base Team
-
What Does IOT Mean
Knowledge Base Team
-
6 Optional Technologies for Data Storage
Knowledge Base Team
-
What Is Blockchain Technology
Knowledge Base Team
Explore More Special Offers
-
Short Message Service(SMS) & Mail Service
50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00
