データマイニングのアルゴリズムと実践(14):kaggle上に畳み込みニューラルネットワーク(CNN)を構築して、fashion_MNISTを実装します

畳み込みニューラルネットワークCNN(Convolutional Neural Network)は、畳み込み演算によって画像のエッジとテクスチャを認識し、連続畳み込みによって抽象的な特徴を抽出し、最終的に画像認識を実現するフィードフォワードニューラルネットワークです。画像処理で優れたパフォーマンスを発揮します。画像の分類、位置決め、その他の分野で広く使用されています。他のニューラルネットワーク構造と比較して、畳み込みニューラルネットワークは比較的少ないパラメーターを必要とし、広く使用されています。

目次

 CNNネットワークの一般的なアーキテクチャ

CNNはfashion_MNIST分類を実装しています


 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'))

このニューラルネットワークの構造とパラメーターの数を確認できます。

精度マッピング:

おすすめ

転載: blog.csdn.net/yezonggang/article/details/106496413