【ディープラーニング入門事例1】Kerasによる手書きデジタル画像認識

記事ディレクトリ

 1. ツールと環境

2.ディープラーニング環境の構築

1.アナコンダをインストールする

2. 仮想環境を作成する

ステップ 1: Anaconda のコマンド ウィンドウ、Anaconda プロンプトを開く

 ステップ 2: コマンドを使用して、指定したバージョンの Python 環境を作成します (ここでは例として py36 コマンド環境の名前が使用されています)。

3. 環境の切り替え

4. プロジェクトに必要なツールキットをダウンロードします

 5. 作成した環境としてPycharmの環境を設定します

3. Kerasベースの手書きデジタル画像認識プロジェクトの運用とテスト

1. コアコード

2. 認識用の手書き画像の収集

3. 認識の基本原則

4. 実行とテスト

 4. 分析とまとめ

 参考記事


 1. ツールと環境

  • Pycharm 2022.1.4
  • conda バージョン: 4.5.4
  • Python バージョン: 3.6.5.final.0
  • プラットフォーム: win-64

2.ディープラーニング環境の構築

1.アナコンダをインストールする

        Anaconda はオープンソースの Python ディストリビューションであり、Python 関連パッケージの管理に使用されます。anaconda を使用すると、別の Python 環境に簡単に切り替えることができ、さまざまな深層学習フレームワークを使用してプロジェクトを開発できるため、非常に効率的です。

具体的なダウンロードとインストールの手順については、この偉人の記事を参照してください。

史上最も完全な Anaconda のインストールと使用法のチュートリアルicon-default.png?t=N4P3https://blog.csdn.net/wq_ocean_/article/details/103889237?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168594896716800180669116%252 2%252C% 2522scm% 2522%253A %252220140713.130102334..%2522%257D&request_id=168594896716800180669116&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2 -1 03889237-null-null.142^v88^control_2,239 ^v2^insert_chatgpt&utm_term =Anaconda%E5%AE%89%E8%A3%85&spm=1018.2226.3001.4187

2. 仮想環境を作成する

ステップ 1: Anaconda のコマンド ウィンドウ、Anaconda プロンプトを開く

インストールが成功すると、スタート バーに Anaconda が接続されます。

 ステップ 2: コマンドを使用して、指定したバージョンの Python 環境を作成します (ここでは例として py36 コマンド環境の名前が使用されています)。

conda create -n py36 python=3.6

3. 環境の切り替え

        デフォルトの環境はベースです。使用する環境の指定されたバージョンを作成する必要があります。これは、異なるプロジェクト間の環境がそれぞれのプロジェクトから分離されるように、プロジェクトを開発するために作成する必要がある指定された環境として理解できます。その他環境を切り替えるには、コマンドactivate + 環境名を使用します。

activate py36

py36 環境に切り替えた後、conda infoコマンドを入力すると、次の情報が表示され、サーフェス環境が正常に作成されたことがわかります。

4. プロジェクトに必要なツールキットをダウンロードします

py36 (自分で作成した環境)        に正常に切り替えた後、 Anaconda Promptで次のコマンドを実行して、必要なツールキットをダウンロードします. 注: デフォルトのダウンロードソースは海外であるため、ダウンロード速度は非常に遅くなります. 国内の一部のミラーを使用できますダウンロードは非常に高速です。次の各コマンドの後に -i ミラー アドレスを追加するだけです。

私は清華大学のミラーソースを使用しています:  -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install scipy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install matplolib -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install scipy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install keras==2.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install tensorflow==1.14.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

 5. 作成した環境としてPycharmの環境を設定します

Pycharm の右下隅にある「インタープリターの追加」をクリックします。

以下の図に示すように、Anaconda インストール ディレクトリの Scripts フォルダーにある conda.exe を選択します。

(一部はルート ディレクトリにも表示されます。ルート ディレクトリで conda.exe を選択することもできます。Pycharm のバージョンによって違いがあります)

 

 Pycharmがインタプリタを切り替えたら、ここまでで環境の準備は完了です


3. Kerasベースの手書きデジタル画像認識プロジェクトの運用とテスト

1. コアコード

train_cnn.py

#步骤01 入所需要的模块
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
import numpy as np
np.random.seed(10)

#步骤02 下载mnist数据集、读取数据集
(x_Train, y_Train) , (x_Test, y_Test) = mnist.load_data()

#步骤03 将图像特征值转化为6000,28,28,1的4维矩阵
x_Train4D = x_Train.reshape(x_Train.shape[0], 28, 28,1).astype('float32')
x_Test4D = x_Test.reshape(x_Test.shape[0], 28, 28, 1).astype('float32')

#步骤04 进行标准化
#将像素范围设置在【0,1】
x_Train4D_normalize = x_Train4D / 255
x_Test4D_normalize = x_Test4D / 255

#步骤05 label进行一位有效编码转换
#将标签转成读热码
y_TrainHot = np_utils.to_categorical(y_Train)
y_TestHot = np_utils.to_categorical(y_Test)

#=>建立模型
#步骤01 定义模型
model = Sequential()

#步骤02 建立卷积层1
model.add(Conv2D(filters=16, # filter = 16 建立16个滤镜
# kernel_size = (5,5) 每一个滤镜是5 × 5的大小
kernel_size=(5,5), 
    # padding = 'same' 设置卷积运算产生的图像大小不变
padding='same', 
#输入的图像形状为28*28,1代表单色灰度,3代表RGB
input_shape= (28, 28, 1),
# activation设置激活函数为relu建立池化层1
activation='relu'))

#步骤03 建立池化层1
model.add(MaxPooling2D(pool_size=(2,2)))#缩减采样,输出16个14*14图像

#步骤04建立卷积层2
model.add(Conv2D(filters=36,#建立36个滤镜
kernel_size=(5,5),#每一个滤镜是5 × 5的大小
padding='same',#Convolution完成后的图像大小不变
activation='relu'#输出36个14*14的图像
))

#步骤05 建立池化层2,加入Dropout避免Overfitting
model.add(MaxPooling2D(pool_size=(2,2)))#图像大小变为7*7
# 加入DropOut(0.25),每次训练时,会在神经网络中随机放弃25%的神经元,避免过拟合建立神经网络(平坦层,隐藏层,输出层)建立平坦层
model.add(Dropout(0.25))

#步骤06 建立平坦层
model.add(Flatten())#长度是36*7*7个神经元

#步骤07 建立隐藏层
model.add(Dense(128, activation='relu'))
# 把DropOut加入模型中,DropOut(0.5)在每次迭代时候会随机放弃50%的神经元,避免过拟合
model.add(Dropout(0.5))
# 建立输出层,一共10个单元,对应0-9一共10个数字。使用softmax进行激活
model.add(Dense(10, activation='softmax'))
# 查看模型摘要
print(model.summary())

#=>进行训练
#步骤01 定义训练方式
# 定义训练方式compile
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

#步骤02 开始训练
train_history = model.fit(x = x_Train4D_normalize, y = y_TrainHot,
validation_split=0.2,
#将80%作为训练数据,20%作为测试数据
epochs=10,#执行10个训练周期
batch_size=300,#每一批300项数据
verbose=2#参数为2表示显示训练过程
)

train_cnn_model.py

from keras.datasets import mnist
from keras.utils import np_utils
import numpy as np
np.random.seed(10)

(x_Train, y_Train) , (x_Test, y_Test) = mnist.load_data()

x_Train4D = x_Train.reshape(x_Train.shape[0], 28, 28,1).astype('float32')
x_Test4D = x_Test.reshape(x_Test.shape[0], 28, 28, 1).astype('float32')

x_Train4D_normalize = x_Train4D / 255
x_Test4D_normalize = x_Test4D / 255
y_TrainHot = np_utils.to_categorical(y_Train)
y_TestHot = np_utils.to_categorical(y_Test)

from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D

model = Sequential()
model.add(Conv2D(filters=16, kernel_size=(5,5), padding='same', input_shape = (28, 28, 1), activation='relu'))
# 参数说明
# filter = 16 建立16个滤镜
# kernel_size = (5,5) 每一个滤镜是5 × 5的大小
# padding = 'same' 设置卷积运算产生的图像大小不变
# input_shape = (28, 28, 1) 第一二维代表输入图像的形状是28 × 28,第三维因为是单色灰度图像,所以最后维数值是1
# activation设置激活函数为relu建立池化层1
model.add(MaxPooling2D(pool_size=(2,2)))
# 输入参数为pool_size=(2,2),执行第一次缩减采样,将16个28 ×28的图像缩小为16个14 × 14的图像建立卷积层2,将16个图像转化为36个图像,不改变图像大小,仍为14 × 14
model.add(Conv2D(filters=36, kernel_size=(5,5), padding='same', activation='relu'))
# 加入池化层2,并加入DropOut避免过拟合
model.add(MaxPooling2D(pool_size=(2,2)))
# 执行第二次缩减采样,将14 × 14图像转换为7 × 7图像
model.add(Dropout(0.25))
# 加入DropOut(0.25),每次训练时,会在神经网络中随机放弃25%的神经元,避免过拟合建立神经网络(平坦层,隐藏层,输出层)建立平坦层
model.add(Flatten())
# 将之前步骤建立的池化层2,一共有36个7 × 7的图像转化为一维向量,长度是36 × 7 × 7 = 1764, 也就是1764个float数,对应1764个神经元建立隐藏层,一共128个神经元
model.add(Dense(128, activation='relu'))
# 把DropOut加入模型中,DropOut(0.5)在每次迭代时候会随机放弃50%的神经元,避免过拟合
model.add(Dropout(0.5))
# 建立输出层,一共10个单元,对应0-9一共10个数字。使用softmax进行激活
model.add(Dense(10, activation='softmax'))
# 查看模型摘要
print(model.summary())
# # 进行训练
# 定义训练方式

# # 加载之前训练的模型
try:
    # model.load_weights("SaveModel/minist_model.h5")
    model.load_weights("SaveModel/minist_model_graphic.h5")
    print("加载模型成功!继续训练模型")
except :
    print("加载模型失败!开始训练一个新模型")

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

# 开始训练
train_history = model.fit(x = x_Train4D_normalize, y = y_TrainHot,
                          validation_split=0.2, epochs=10, batch_size=300, verbose=2)

# model.save_weights("SaveModel/minist_model.h5")
model.save("SaveModel/minist_model_graphic.h5")

print("Saved model to disk")

予測ワン_img.py

import cv2
from keras.models import load_model

img = cv2.imread("./pic/6.jpg")
print(img.shape)
grey_img = img[:,:,0:1]
print(grey_img.shape)
shape_img= (grey_img.reshape(1, 28, 28, 1)).astype('float32')/255

# model = load_model('SaveModel/minist_model.h5')  #选取自己的.h模型名称
model = load_model('SaveModel/minist_model_graphic.h5')  #选取自己的.h模型名称
prediction = model.predict_classes(shape_img)
print('该手写数字图像为:'+'%d'%prediction[0])

2. 認識用の手書き画像の収集

 

3. 認識の基本原則

        使用されるデータセットはMNISTデータセットです。このデータセット内の各画像は28x28 ピクセルで構成されており、各ピクセルはグレー値で表されます。以下は数値 1 の例です。私たちの目的はモデルを作成し、これらの 784 個の値をモデルに入力し、その出力結果が 1 になることです。

4. 実行とテスト

  • 最初にデータセットを読み取ります

  •  トレーニングデータモデル

  • 手書きの数字画像を認識する

 4. 分析とまとめ

        今回は、Keras の手書きデジタル画像認識の古典的なケースに基づいて、機械学習のもう 1 つの重要な分野である深層学習の内容を最初に学習しました。使用されるデータセットは MNIST データセットですこのデータセット内の各画像は28x28 ピクセルで構成されており、各ピクセルはグレー値で表されます。1 つ目は、pip コマンド ラインを使用して、プログラムによってインポートされるツールキットをダウンロードすることです。同時に、activate py36 コマンドを使用して、Python 環境を、関連するツールキットを作成およびインポートした環境に切り替えます。コンパイラは、次のコマンドを使用します。 pycharm を使用してプログラムを実行します。まず、データセットをトレーニングする必要があります。次に、トレーニングされたモデルを使用して 6.jpg の手書きデジタル画像を認識し、コンソールに認識結果が出力されます。

        この導入事例を研究した後、私は機械学習の分野に強い関心を持っています。本質的に、機械学習は大量のデータを入力として使用し、コンピューターにモデルをトレーニングさせ、分析させます。私たちはそれを関数、「 」とみなすことができます。ブラックボックス」を作成し、それを使って指定されたデータを特定し、分析結果を与えるのです。このプロセスは、人間の脳が過去の経験を要約し、未来を予測して行動を導くプロセスに似ています。とても素晴らしいです。

 参考記事

詳細な学習の例 - Keras は手書き数字認識を実現icon-default.png?t=N4P32522 %252C%2522scm%2522 %253A%252220140713.130102334..%2522%257D&request_id=168594730916800222827149&biz_id=0&utm_medium= distribution.pc_search_result.none-task-blog-2~all~sobaiduend~default -1-103811112-null-null.142^v88^control_2,239^v2 ^insert_chatgpt&utm_term=Keras%E6%89%8B%E5%86%99%E6%95%B0%E5%AD%97%E5%9B %BE%E5%83%8F%E8%AF%86%E5%88 %AB&spm=1018.2226.3001.4187 [ディープラーニングの実践 - 1]: Keras に基づく手書き数字認識 (非常に詳細なオープンソース コード)icon-default.png?t=N4P3https://blog.csdn.net/qq_42856191/article/details/121420268?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168594730916800222827149%2522%252C%2522scm%252 2%253A%252220140713.130102334..%2522%257D&request_id =168594730916800222827149&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-121420268-null-null.142^v88^control_2,239^v2^insert_chatgpt&utm_term=ケラス%E6%89%8B %E5%86%99%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB&spm=1018.2226.3001.4187

おすすめ

転載: blog.csdn.net/qq_52487066/article/details/131048466