深層学習実践編 (セブンティーン) -- TensorFlow の DenseNet

科学的知識

マルチメディアに関する ACM 国際会議 (マルチメディアに関する ACM 国際会議) は、コンピューター サイエンスの分野におけるマルチメディアに関する主要な国際会議です。マルチメディア研究は、画像、テキスト、ビデオ、音楽、センサー データ、音声など、さまざまなデジタル モダリティによって提供される複数の視点を統合することに重点を置いています。1993 年以来、ACM Multimedia は学界と産業界の研究者と実務家を集めて、革新的な研究結果を発表し、最新の進歩について議論してきました。

# 序文#

    理論の章の最後の記事で、DenseNet ネットワーク構造につ​​いて学びました.各層のパラメーターを注意深く分析しませんでしたが、以前の進歩と元の論文で与えられたアーキテクチャと組み合わせて、誰もが各層の次元変化を推測します。ネットワークの中核は機能の多重化であり、各高密度ブロックの各レイヤーには以前のすべての入力が含まれているため、機能表現を充実させ、勾配消失の問題をある程度軽減するという目的を達成しています。

TensorFlow の DenseNet 戦闘

e2bce18f700ba22bbdbee8e896337f75.png

次に、DenseNet ネットワークに基づく表情認識モデルのデータ準備からモデル構築までを簡単に説明しますので、よくお読みください。

1. データ準備

今回のデータは、平和、幸福、悲しみ、驚き、嫌悪、怒り、恐怖の 8 つのカテゴリを含む FERPlus 表情データセットを使用します。前のデータセットに似ていますが、軽蔑的な表現がもう 1 つあります。

3d74fb26d3990eac035fa615a8405ea1.png

2. ネットワーク構造

0d5a4542969e3bad2d8e416a3ae0719b.png

04c23441d22b4d135453f39b75871ab9.png

元の論文で与えられた最小構造は 121 層です. 学習を始めたばかりですが、そのような深い構造を設計する必要はありません. したがって、上の対応する図の構造をわずかに変更し、主な層分布は6-12-24-16から変更された. 2-4-8-4で、ハードウェア不足の問題をある程度緩和することができます. もちろん、精度は一般的に低下しますが、それは問題ではありません.私たちが学ぶのは、ネットワーク構築ではなく、ネットワーク構築の考え方そのものです。

e1fb28e330af845d1f2df0d214afb629.png

# 密集块定义
def Dense_Block(name,input, inchannel, DB_nums):
    conv_inchannel = inchannel
    for i in range(DB_nums):
        out = Conv_layer('Dense_Block{}__1_{}'.format(name, i), input, [1,1,inchannel,32], [32], [1,1,1,1])
        # print("******** out1 {} ".format(out.shape))
        out = Conv_layer('Dense_Block{}__3_{}'.format(name, i), out, [3,3,32,32], [32], [1,1,1,1])
        # print("******** out2 {} ".format(out.shape))
        out = tf.concat([input, out], axis=3)
        inchannel = out.get_shape().as_list()[3]
        input = out


    return out


# 过渡层
def Transition_Layer(names, input):
     in_inchannel = input.get_shape().as_list()[3]
     out_channel = int(in_inchannel * 0.5)
     out = Conv_layer('Transition_Layer_{}'.format(names), input, [1,1,in_inchannel,out_channel], [out_channel], [1,1,1,1])
     out = Max_pool_lrn(names = 'pooling_{}'.format(names), input = out , ksize = [1, 3, 3, 1], is_lrn = False)


     return out
    
    # print("******** out {} ".format(out.shape))


# 分类层
def Class_Layer(input, n_classes):
    out = tf.nn.avg_pool(input, ksize=[1,7,7,1],strides=[1,7,7,1],padding='SAME')
    out = tf.squeeze(out)
    print("******** out {} ".format(out.shape))
    with tf.variable_scope('softmax_linear') as scope:
        weights = tf.Variable(tf.truncated_normal(shape=[out.get_shape().as_list()[-1], n_classes], stddev=0.005, dtype=tf.float32),
                              name='softmax_linear', dtype=tf.float32)


        biases = tf.Variable(tf.constant(value=0.1, dtype=tf.float32, shape=[n_classes]),
                             name='biases', dtype=tf.float32)


        out = tf.add(tf.matmul(out, weights), biases, name='softmax_linear')


    return out

ネットワーク コード:

30fc8113b97d35721021fc4e685f03e1.png

ネットワークのトレーニングについては、当面は共有しませんが、誰もが主に DenseNet ネットワークを覚えています。

機能は機能の再利用であり、その後、ディープ ニューラル ネットワークを構築します。

83cbaf67877f941e85720873de07a829.png

エピローグ

この問題の共有はここまでです.全員が下に降りて実際の操作を行う必要があります.ソースコードが必要な場合は、バックグラウンドで返信できます: 記事名 + コードリクエスト.以降の記事では、徐々に実戦に Pytorch を使用します. . 皆さんが良い心を持っていることを願っています 準備をしてください.

編集者: Yueyi Lay | レビュー: Shiwai Lay

過去のレビュー

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

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

【年末総括】遠い2021年に敬意を表し、違う2022年を迎える

43e47b819bce81ae51d086dd9d2920e8.gif

おすすめ

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