深層学習実践編 (15) -- TensorFlow の GoogLeNet

科学的知識

AAAI の完全な英語名は Association for the Advance of Artificial Intelligence であり、中国語の意味は Association for the Advance of Artificial Intelligence です。

米国人工知能協会は、人工知能の分野における主要な学術組織の 1 つです。同協会が主催する年次大会(AAAI、The National Conference on Artificial Intelligence)は、人工知能に関する主要な学術会議です。

e44e0407dcef06cf72d3ec6c4d7025d5.png

# 序文

9月。

理論の章の最後の記事で、GoogLeNet ネットワークについて学びました. そのコアはインセプション モジュールです. このモジュールを通して, ニューラル ネットワークは非常に深く設計することができます. 今日は TensorFlow を使ってインセプションの実際の戦闘を実行します.モジュール. 気に入っていただければ幸いです.

98b349c8db520e1e2a11e40980cf3ff7.png

TensorFlow の Inception 戦闘

d72a9dc664c7b0a2f264d23ea4c4dead.png

今回の実戦では表情データセットを使ってトレーニングを行います.モデルは主にインセプションモジュールです.デモなので簡単なレイヤーのみ設計します.コードはgiteeにオープンソースとして公開します.

1. データ準備

96835e9e70d7387e049e4c8fa68853b3.png

今回のデータは、RAFDB の表情データセットを使用します。このデータセットには、平穏、幸福、悲しい、幸福の 7 つのカテゴリが含まれています。

驚いて、うんざりして、怒って、怖がって。前のデータセットと同様に、この表情データセットにも含まれています

トレーニング セットとテスト セット、各セットには 7 つのフォルダー (式) が含まれていません。以前のデータセットで

同様に、データ セットにはトレーニング セットとテスト セットが含まれ、各セットには 7 つのフォルダー (式) が含まれます。

  いくつかのサンプルショー

b8e0120c8cb7475cbaa0b2858b0cf59e.png

f86bb0f449cd61757063a47ebd0dd458.png

2. ネットワーク構造

9d1025f540dc512cd88608d620c70d3b.png

1c590660a82692a94913fcae7a4b6fda.png

ネットワーク構造は上記のとおりです。モジュールを変更するのは非常に簡単なので、ネットワークのパラメーターを注意深く分析することはしません。具体的なパラメーターは、以前の記事 (深層学習理論 (16) -- GoogLeNet のre-深さの謎を探る)、次のコードから、各レイヤーの次元変換を確認できるはずです。本当にわかりません。慎重にデバッグする限り、問題はないと思います。コードの各行の寸法情報を印刷することをお勧めします。これにより、機能マップがネットワーク内で段階的にどのように変化するかが明確になります。

def inference(images, batch_size, n_classes,drop_rate):
    
    #左1x1 conv
    conv1 = Conv_layer(names = 'conv_block1', input = images , w_shape = [1, 1, 3, 128], b_shape = [128], strid = [1, 1])
    # print("******** conv1 {} ".format(conv1.shape))


    #1x1 conv
    conv2 = Conv_layer(names = 'conv_block2', input = images , w_shape = [1, 1, 3, 64], b_shape = [64], strid = [1, 1])
    # 第二层卷积1
    conv2_1 = Conv_layer(names = 'conv_block2_1', input = conv2 , w_shape = [3, 3, 64, 192], b_shape = [192], strid = [1, 1])
    # print("******** conv2_1 {} ".format(conv2_1.shape))


    #1x1 conv
    conv3 = Conv_layer(names = 'conv_block3', input = images , w_shape = [1, 1, 3, 64], b_shape = [64], strid = [1, 1])
    # 第二层卷积2
    conv3_1 = Conv_layer(names = 'conv_block3_1', input = conv3 , w_shape = [5, 5, 64, 96], b_shape = [96], strid = [1, 1])
    # print("******** conv3_1 {} ".format(conv3_1.shape))


    #3x3 max pooling
    pool_1 = Max_pool_lrn(names = 'pooling1', input = images , ksize = [1, 3, 3, 1], is_lrn = False)
    # 第二层卷积2
    conv4 = Conv_layer(names = 'conv_block4', input = pool_1 , w_shape = [1, 1, 3, 64], b_shape = [64], strid = [1, 1])
    print("******** conv4 {} ".format(conv4.shape))


    concat_op = tf.concat([conv1, conv2_1, conv3_1, conv4],3)
    conv5 = Conv_layer(names = 'conv_block5', input = concat_op , w_shape = [1, 1, 480, 64], b_shape = [64], strid = [1, 1])
    # print("******** concat_op {} ".format(concat_op.shape))


ネットワーク構造をよく見ると、出力の最後の層に 1x1 畳み込みの層を追加したのですが、その目的はなぜか、

もちろん、家には鉱山がないので、次元を下げることしかできません。

3. トレーニング プロセス

de0aad998c09f84a0c01f0deca8245f5.png

3eb048f510d11928cf5dcadc037d0378.png

ソースコード取得:https://gitee.com/fengyuxiexie/inception

576dd68d06ed9448cbf64dfe396d50e9.gif

終わり

エピローグ

  この問題の共有は終了しました. モジュールは非常にシンプルです. 学生ももっと連絡してくれることを願っています. さらに, 今回は新しい表情データセットを追加しました. 必要な学生はバックグラウンドで相談できます.

編集者: 凡人 Yueyi|レビュー: 凡人 Xiaoquanquan

708e6f291d1ba1f6d02220d5be713da5.png

上級ITツアー

過去のレビュー

深層学習実践編 (14) -- TensorFlow の VGG16

深層学習実践編 (13) -- TensorFlow の AlexNet

深層学習実践編(12) -- TensorFlowのLetNet-5

過去 1 年間に行ったこと:

【年末総括】古きに別れ新しきを迎え、2020年、また始めよう

【年末のまとめ】2021年、古きに別れ新しきを迎える

fb44def5a8bf149473b581f0971ae4e2.gif

「いいね!」をクリックして行きましょう〜

おすすめ

転載: blog.csdn.net/xyl666666/article/details/121600968