TensorFlowとPythonで畳み込みニューラルネットワークの畳み込みベースを作成する方法
畳み込みニューラルネットワーク(CNN)は、一般的に「畳み込み層(Convolutional層)」「プーリング層(Pooling層)」「全結合層(Dense層)」といった複数の層を組み合わせて構成されます。
関連記事:
TensorFlowとは何か?KerasがTensorFlowと連携してニューラルネットワークを構築する仕組み
畳み込みニューラルネットワークは、画像認識など特定の種類の問題において優れた成果を上げてきました。このネットワークは「models」クラスに用意されている「Sequential」メソッドを使って作成でき、「add」メソッドを呼び出すことで層を順番に追加していけます。
ここではKerasのSequential APIを使用します。これは、各層が必ず1つの入力テンソルと1つの出力テンソルを持つ、単純な層のスタックで動作するシーケンシャルモデルを構築するのに適したAPIです。
以下のコードはGoogle Colaboratory上で実行しています。Google Colab(Colaboratory)はブラウザ上で直接Pythonコードを実行できる環境で、事前の設定は一切不要です。さらにGPU(グラフィックス処理装置)にも無料でアクセスできます。ColaboratoryはJupyter Notebookを基盤として構築されています。
print("Creating the convolutional base")
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
print("Description of arhcitecture is")
model.summary()コード出典:https://www.tensorflow.org/tutorials/images/cnn
実行結果
Creating the convolutional base Description of arhcitecture is Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 30, 30, 32) 896 _________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 15, 15, 32) 0 _________________________________________________________________ conv2d_1 (Conv2D) (None, 13, 13, 64) 18496 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 6, 6, 64) 0 _________________________________________________________________ conv2d_2 (Conv2D) (None, 4, 4, 64) 36928 ================================================================= Total params: 56,320 Trainable params: 56,320 Non-trainable params: 0
コードの解説
上記のコードは、よく使われる定番パターンに従って畳み込みベースを定義しています。
このパターンとは、Conv2D層とMaxPooling2D層を交互に積み重ねていく構成です。
CNNへの入力としては、(image_height, image_width, color_channels)、つまり(画像の高さ、幅、カラーチャンネル数)という形状を持つテンソルを受け取ります。
今回のCNNは、CIFAR画像の形式である (32, 32, 3) の形状の入力を処理するように設定されています。
これは、最初の層に input_shape 引数を渡すことで実現できます。
すべてのConv2D層およびMaxPooling2D層の出力は、(height, width, channels) という形状の3次元テンソルになります。
ネットワークが深くなるにつれて、出力の幅と高さの寸法は徐々に小さくなっていきます。
各Conv2D層の出力チャンネル数は、第1引数(例:32や64)によって制御されます。
-
PythonのMatplotlibでヒストグラムを作成する方法をわかりやすく解説
Matplotlibは、データ可視化のために広く使われている人気のPythonライブラリです。データの可視化は非常に重要なステップです。数値を一つずつ確認したり複雑な計算を行ったりしなくても、データ全体の傾向や特徴を直感的に把握できるようになるからです。また、定量的な洞察を効果的に伝える手段としても優れています。MatplotlibとはMatplotlibは、データをもとに2次元のプロット(グラフ)を作成するためのライブラリです。オブジェクト指向のAPIを備えており、作成したグラフをPythonアプリケーションに組み込むことも簡単に行えます。IPythonシェル、Jupyter Noteboo
-
PythonとKerasのFunctional APIを使ってレイヤーを作成する方法を徹底解説
はじめに TensorFlowはGoogleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションの実装など、幅広い用途に活用されています。研究用途から本番環境まで対応しており、複雑な数学的演算を高速に実行するための最適化技術を備えているのが特徴です。 「tensorflow」パッケージは、Windows環境であれば以下のコマンドでインストールできます。 pip install tensorflow Kerasはギリシャ語で「角(つの)」を意味します。Kerasは、ONEIROS(Open-ended