畳み込みニューラルネットワークCNN(Convolutional Neural Network)は、畳み込み演算によって画像のエッジとテクスチャを認識し、連続畳み込みによって抽象的な特徴を抽出し、最終的に画像認識を実現するフィードフォワードニューラルネットワークです。画像処理で優れたパフォーマンスを発揮します。画像の分類、位置決め、その他の分野で広く使用されています。他のニューラルネットワーク構造と比較して、畳み込みニューラルネットワークは比較的少ないパラメーターを必要とし、広く使用されています。
目次
CNNネットワークの一般的なアーキテクチャ
畳み込み層は、データのエッジとテクスチャの分析を完了し、画像の特徴を抽出します。画像が3×3畳み込みカーネルで処理される場合、9ピクセルが1ピクセルに変換され、非線形変換層がニューロン活性化層になります。 、ニューロン転送しきい値の設定、プーリングレイヤーはダウンサンプリング、画像ピクセルの削減、完全接続レイヤーは線形変換レイヤー、有用な特徴の抽出と出力、畳み込みレイヤー+非線形変換レイヤー+プーリングレイヤーは画像を小さくするプロセスですそしてより厚い;
畳み込みレイヤーの3つの重要なパラメーター:ksize、strides、padding、これらは畳み込みカーネルのサイズ(通常は3 * 3または5 * 5の正方行列)、畳み込みカーネルの移動のスパン、およびエッジ処理ルールノートブックのshift + tabキーを使用して、tensorflow.keras.layers.Cov2d()関数のパラメーターを表示します。
Init signature:
tf.keras.layers.Conv2D(
filters,
kernel_size,
strides=(1, 1),
padding='valid',
data_format=None,
dilation_rate=(1, 1),
activation=None,
use_bias=True,
kernel_initializer='glorot_uniform',
bias_initializer='zeros',
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
**kwargs,
)
プーリングレイヤーはダウンサンプリング操作であり、画像を小さくします。最大化されたプーリング、平均プーリングなどがあります。最大プーリングはMaxPooling2D()関数を使用します。関数のパラメーターは次のとおりです。
Init signature:
tf.keras.layers.MaxPooling2D(
pool_size=(2, 2),
strides=None,
padding='valid',
data_format=None,
**kwargs,
)
CNNはfashion_MNIST分類を実装しています
通常、CPUはCNNネットワークの計算を完了できません。ここでは、kaggleが提供するGPUを使用してCNNネットワークを構築し、fashion_MNISTの分類モデルを実装します。Kaggleは、データマイニングとディープラーニングの多くの例とソリューションを含むデータ競合プラットフォームです。優れた学習プラットフォームであるラーニング:https://www.kaggle.com/notebooks/welcome、ノートブックを作成し、GPUアクセラレーションを選択します。
GPUアクセラレーションを有効にすることを確認します。
畳み込みニューラルネットワークの入力画像は4次元です。これは、バッチの数、画像の長さ、画像の高さ、およびチャネルの数です。
import tensorflow as tf
from tensorflow import keras
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
(train_image,train_lable),(test_image,test_lable)=tf.keras.datasets.fashion_mnist.load_data()
train_image.shape
# 将图像维度扩张到4维数据
train_images=np.expand_dims(train_image,-1)
test_images=np.expand_dims(test_image,-1)
train_images.shape
model=tf.keras.Sequential([tf.keras.layers.Conv2D(32,(3,3),input_shape=train_images.shape[1:],activation="relu"),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32,(3,3),activation="relu"),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.GlobalMaxPooling2D(),
tf.keras.layers.Dense(10,activation="softmax")
])
model.summary()
model.compile(optimizer="adam",loss="sparse_categorical_crossentropy",metrics=["acc"])
history=model.fit(train_images,
train_lable,
epochs=5,
validation_data=(test_images,test_lable)
)
model.evaluate(test_images,test_lable)
#plt.plot(history.epoch,history.history.get('loss'))
plt.plot(history.epoch,history.history.get('acc'))
このニューラルネットワークの構造とパラメーターの数を確認できます。
精度マッピング: