TensorFlowとPythonでモデルの最上位にDense層(全結合層)を追加する方法
Dense層の追加方法
SequentialモデルにDense層(全結合層)を追加するには、addメソッドを使用し、層の種類としてDenseを指定します。まず畳み込みベースの出力をFlatten層で平坦化し、その上に新しい層を積み重ねます。こうして追加された層は、トレーニングデータセット全体に対して適用されます。
関連記事: TensorFlowとは何か? KerasとTensorFlowが連携してニューラルネットワークを構築する仕組み
本記事では、KerasのSequential APIを使用します。これは、各層が必ず1つの入力テンソルと1つの出力テンソルを持つ、単純な層のスタックからなるシーケンシャルモデルを構築する際に非常に便利なAPIです。
以下のコードは、Google Colaboratory上で実行しています。Google Colab(Colaboratory)はブラウザ上で直接Pythonコードを実行できる環境であり、事前の設定が一切不要で、GPU(Graphics Processing Unit)にも無料でアクセスできます。ColaboratoryはJupyter Notebookを基盤として構築されています。
print("Adding dense layer on top")
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
print("Complete architecture of the model")
model.summary()
コード出典:https://www.tensorflow.org/tutorials/images/cnn
出力結果
Adding dense layer on top Complete architecture of the model Model: "sequential_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_3 (Conv2D) (None, 30, 30, 32) 896 _________________________________________________________________ max_pooling2d_2 (MaxPooling2 (None, 15, 15, 32) 0 _________________________________________________________________ conv2d_4 (Conv2D) (None, 13, 13, 64) 18496 _________________________________________________________________ max_pooling2d_3 (MaxPooling2 (None, 6, 6, 64) 0 _________________________________________________________________ conv2d_5 (Conv2D) (None, 4, 4, 64) 36928 _________________________________________________________________ flatten (Flatten) (None, 1024) 0 _________________________________________________________________ dense (Dense) (None, 64) 65600 _________________________________________________________________ dense_1 (Dense) (None, 10) 650 ================================================================= Total params: 122,570 Trainable params: 122,570 Non-trainable params: 0 _________________________________________________________________
コードの解説
- モデルを完成させるには、畳み込みベースから出力された最後のテンソル(形状は(4, 4, 64))を、1つ以上のDense層に入力して分類処理を行います。
- Dense層は入力としてベクトル(1次元データ)を受け取りますが、現時点での出力は3次元テンソルとなっています。
- そこで、3次元の出力を
Flatten層によって1次元に平坦化し、その上に1つ以上のDense層を追加します。 - CIFARデータセットには10個の出力クラスが存在するため、最終層として10個の出力ユニットを持つDense層を配置します。
- つまり、(4, 4, 64)の形状を持つ出力は、2つのDense層を通過する前に、形状(1024)のベクトルへと平坦化されることになります。
-
PythonとTensorFlowを使って2つの行列を加算する方法
TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションなどを実装するために広く利用されています。研究用途から本番環境まで幅広い場面で活用されており、複雑な数値計算を高速に実行するための最適化技術が多数搭載されています。この高い処理性能は、NumPyおよび多次元配列の仕組みによって支えられています。これらの多次元配列は「テンソル(tensor)」と呼ばれます。TensorFlowは深層ニューラルネットワークの構築を強力にサポートしており、高い拡張性を持つほか、代表的な
-
Kerasを使ってPythonでモデルをプロットする方法をわかりやすく解説
TensorFlowとはTensorFlowは、Googleが提供している機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて使用することで、アルゴリズムの実装やディープラーニングアプリケーションの開発など、幅広い用途に活用できます。研究目的から本番環境での運用まで対応しており、複雑な数値計算を高速に実行するための最適化技術が数多く組み込まれています。TensorFlowにおける「テンソル(Tensor)」は、データを扱うための基本的なデータ構造です。テンソルは多次元配列(またはリスト)であり、データフローグラフと呼ばれる計算グラフのノード同士をエッジでつ