科学的知識
AAAI の完全な英語名は Association for the Advance of Artificial Intelligence であり、中国語の意味は Association for the Advance of Artificial Intelligence です。
米国人工知能協会は、人工知能の分野における主要な学術組織の 1 つです。同協会が主催する年次大会(AAAI、The National Conference on Artificial Intelligence)は、人工知能に関する主要な学術会議です。
# 序文
9月。
理論の章の最後の記事で、GoogLeNet ネットワークについて学びました. そのコアはインセプション モジュールです. このモジュールを通して, ニューラル ネットワークは非常に深く設計することができます. 今日は TensorFlow を使ってインセプションの実際の戦闘を実行します.モジュール. 気に入っていただければ幸いです.
TensorFlow の Inception 戦闘
今回の実戦では表情データセットを使ってトレーニングを行います.モデルは主にインセプションモジュールです.デモなので簡単なレイヤーのみ設計します.コードはgiteeにオープンソースとして公開します.
1. データ準備
今回のデータは、RAFDB の表情データセットを使用します。このデータセットには、平穏、幸福、悲しい、幸福の 7 つのカテゴリが含まれています。
驚いて、うんざりして、怒って、怖がって。前のデータセットと同様に、この表情データセットにも含まれています
トレーニング セットとテスト セット、各セットには 7 つのフォルダー (式) が含まれていません。以前のデータセットで
同様に、データ セットにはトレーニング セットとテスト セットが含まれ、各セットには 7 つのフォルダー (式) が含まれます。
いくつかのサンプルショー
2. ネットワーク構造
ネットワーク構造は上記のとおりです。モジュールを変更するのは非常に簡単なので、ネットワークのパラメーターを注意深く分析することはしません。具体的なパラメーターは、以前の記事 (深層学習理論 (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. トレーニング プロセス
ソースコード取得:https://gitee.com/fengyuxiexie/inception
終わり
エピローグ
この問題の共有は終了しました. モジュールは非常にシンプルです. 学生ももっと連絡してくれることを願っています. さらに, 今回は新しい表情データセットを追加しました. 必要な学生はバックグラウンドで相談できます.
編集者: 凡人 Yueyi|レビュー: 凡人 Xiaoquanquan
上級ITツアー
過去のレビュー
深層学習実践編 (14) -- TensorFlow の VGG16
深層学習実践編 (13) -- TensorFlow の AlexNet
深層学習実践編(12) -- TensorFlowのLetNet-5
過去 1 年間に行ったこと:
【年末総括】古きに別れ新しきを迎え、2020年、また始めよう
「いいね!」をクリックして行きましょう〜