Kerasディープラーニング-MNIST手書き数字を認識するためのCNNモデルの構築

創造を続け、成長を加速させましょう!「ナゲッツデイリーニュープラン・6月アップデートチャレンジ」に参加して5日目です。クリックしてイベント詳細をご覧ください。

タスクとモデルの分析

畳み込みニューラルネットワークConvolutional Neural Network、 )の基礎では、従来のニューラルネットワークの問題とその方法についてCNN学びました。CNNこのセクションではCNNMNIST手書き数字を認識するモデルを作成します。CNNモデルを構築するために、次の戦略を使用しました。

  • 入力形状は28 x 28 x 1、使用される畳み込みカーネルのサイズはです。3 x 3 x 1
    • 畳み込みカーネルのサイズは変更できますが、チャネル数は変更できないことに注意してください。入力チャネル数と同じである必要があります。
    • 10畳み込みカーネルを使用する
  • 入力画像が畳み込み層を通過した後、プーリング層を使用します。
    • 出力画像サイズが半分になります
    • プーリングを平坦化した後に得られた出力
  • 平らにされた層は1000、ます
  • 最後に、隠れ層を出力層に接続します。出力層には、出力層に10クラス(数値を含む0-9)があります。

モデルを構築した後、ラベル付けされたすべての画像を使用して平均11ピクセルで変換し、シフトされた画像でCNNモデルます。1セクションでは、完全に接続されたニューラルネットワークが予測に努めることができないことを確認しました。これは、画像のカテゴリを意味します。

CNNモデルの構築とトレーニング

次に、Keras実装CNNを使用して上記で定義したスキーマをMNIST実装CNNし、データでモデルを使用する方法を学習します。

  1. データのロードと前処理:
from keras.layers import Dense,Conv2D,MaxPool2D,Flatten
from keras.models import Sequential
from keras.datasets import mnist
from keras.utils import np_utils
import numpy as np

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], x_train.shape[1], x_train.shape[1], 1)
x_test = x_test.reshape(x_test.shape[0], x_test.shape[1], x_test.shape[1], 1)
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
num_classes = y_test.shape[1]
复制代码

前処理の手順は、ディープフィードフォワードニューラルネットワークの構築で使用したものとまったく同じです

  1. モデルをビルドしてコンパイルします。
model = Sequential()
model.add(Conv2D(10, (3, 3), input_shape=(28, 28, 1), activation='relu'))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
model.summary()

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
复制代码

前のコードで初期化したモデルの簡単なスキーマ情報を取得できます。

model.summary()
复制代码

出力モデルの簡単なスキーマ情報は次のとおりです。

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 26, 26, 10)        100       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 13, 13, 10)        0         
_________________________________________________________________
flatten (Flatten)            (None, 1690)              0         
_________________________________________________________________
dense (Dense)                (None, 512)               865792    
_________________________________________________________________
dense_1 (Dense)              (None, 10)                5130      
=================================================================
Total params: 871,022
Trainable params: 871,022
Non-trainable params: 0
_________________________________________________________________
复制代码

畳み込み層には畳み込みカーネルがあるため、畳み込み層には100合計パラメーターがあります。したがって重みパラメーターとバイアス項(各畳み込みカーネル)の合計、パラメーターの合計があります。最大プーリングレイヤーには、サイズの各プーリングカーネルの最大値を。このモデル、ネットワークパラメータの量を大幅に減らすことができることがわかります。103 x 3 x 1901011002 x 2CNN

  1. 最後に、モデルを適合させます。
model.fit(x_train, y_train,
            validation_data=(x_test, y_test),
            epochs=10,
            batch_size=1024,
            verbose=1)
复制代码

上記の10モデルepochは、トレーニング後に98%、の。

モデルトレーニングプロセスの監視

  1. 次に、ピクセルでラベル付けおよびシフトされたすべての画像を使用して、平均1の。1
# 获取标签为1的所有图像输入
x_test1 = x_test[y_test[:, 1]==1]
# 利用所有标签为1的图像生成均值图像
pic = np.zeros((x_test.shape[1], x_test.shape[2]))
pic2 = np.copy(pic)
for i in range(x_test1.shape[0]):
    pic2 = x_test1[i, :, :, 0]
pic = pic + pic2
pic = (pic / x_test1.shape[0])
# 将均值图像中的每个像素向左平移一个像素
for i in range(pic.shape[0]):
    if i < 21:
        pic[:, i] = pic[:, i+1]
# 对平移后的图像进行预测
p = model.predict(pic.reshape(1, x_test.shape[1], x_test.shape[2], 1))
print(p)
c = np.argmax(p)
print('CNN预测结果:', c)
复制代码

結果のモデル出力は次のとおりです。

[[1.3430370e-05 9.9989212e-01 2.0535077e-05 2.6301734e-07 4.3278211e-05
  5.9122913e-06 1.5874346e-05 6.2533190e-06 2.0079199e-06 4.1732173e-07]]
CNN预测结果: 1
复制代码

これを見ると、CNNアーキテクチャ1

関連リンク

畳み込みニューラルネットワークの基本概念の詳細な説明

Kerasを使用した畳み込みニューラルネットワークの構築

おすすめ

転載: juejin.im/post/7103728382965186573