ソウルICTイノベーションプラザ-人工知能プレミアムコース(視覚知能)12日目


※ Notification
本文は著者が理解した内容に基づいて書かれているため,誤りがある可能性がある.
间违ったところがあったら、伝言を残してください.私たちは修正します.

Intro


昨日に引き続きTransfer学習とImageDataAugmentation,ImageDataGeneratorを学び実習を行いました.

Transfer learning


猫と犬のデータセットに多様な訓練前のモデルを適用し,結果を比較分析した.
MobileNet、ResNet 50、Inception V 3およびXceptionモデルをレビューした結果、以下のようになりました.
MobileNetResNet50InceptionV3XceptionTotal params4,031,73025,193,39422,622,03422,467,162Trainable parmas4,009,84225,140,27422,587,60222,412,634Non-trainable params21,88853,12034,43254,528Elapsed time04:2509:2808:3116:28Accuracy0.9840.9900.9900.990
どのモデルにも似たような性能があります.
モデルの選択では、類似語は各人の受け入れ基準で異なる可能性があるので、各社は選択基準を定義する必要があります.
パフォーマンスに大きな差がない場合は、消費時間が少なく、精度が低く、フィット度が低いモデルを選択します.上記の結果から1つ選択するとMobileNetとなります.
いつものように簡単が一番

Non-trainable params

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 mobilenet_1.00_224 (Functio  (None, 7, 7, 1024)       3228864   
 nal)                                                            
                                                                 
 flatten_2 (Flatten)         (None, 50176)             0         
                                                                 
 dense_4 (Dense)             (None, 16)                802832    
                                                                 
 dropout_2 (Dropout)         (None, 16)                0         
                                                                 
 dense_5 (Dense)             (None, 1)                 17        
                                                                 
=================================================================
Total params: 4,031,713
Trainable params: 4,009,825
Non-trainable params: 21,888
_________________________________________________________________
出力Model Summaryには、Total paramsTrainable paramsおよびNon-trainable paramsが表示されます.Total params,Trainable params見ればわかるNon-trainable paramsとは何ですか?

モデルが3等分されている場合、Non Trainableの対応部分はどこですか?
横、縦、対角などの大きな特徴は変わらないので、1番はノントラナブル.
受講の際は、「もちろん前の学習なので、前の最適化の重み値は変わらないはず」と思っていましたが、Model.summary()学習の前に、モデル宣言だけして出力した部分であることは理解できませんでした.
ということで資料を調べてみたら、やはりハングルで出てこなかったので、ケラスAPI Docsへ.Transfer learning & fine-tuningドキュメントFreezing layers: understanding the trainable attributepart.( https://keras.io/guides/transfer_learning )
non_trainable_weights is the list of those that aren't meant to be trained. Typically they are updated by the model during the forward pass.
In general, all weights are trainable weights. The only built-in layer that has non-trainable weights is the BatchNormalization layer. It uses non-trainable weights to keep track of the mean and variance of its inputs during training.
一般的に、すべての重み付けは訓練可能であるが、特にBanchNormalization Layerは非訓練的な重み付けを有する.別の論文では,BatchNormは平均と分散更新を用いたが,逆転過程では訓練されなかったと述べた.だから訓練できない重さです
したがって,BatchNormalization Layerがあれば,訓練不可能な重量を有するといえる.
自分で確認するためにコードを回しました.
Model: "mobilenet_1.00_224"
						---- 중략 ----
=================================================================
Total params: 3,228,864
Trainable params: 3,206,976
Non-trainable params: 21,888
_________________________________________________________________
MobileNetを呼び出し、モデルのBatchNormalization Layerをすべて削除する新しいモデルを作成しようとします.
model = Sequential()
for layer in mobilenet.layers:
    if 'bn' not in layer.name: 
        model.add(layer)
次にmodel.summary()を以下に示す.
Model: "sequential"
					---- 중략 ----
=================================================================
Total params: 3,185,088
Trainable params: 3,185,088
Non-trainable params: 0
_________________________________________________________________
予想通り、すべてのBaschNorm layerを削除すると、非訓練paramsが0になります.
実際に、BatchNorm Layerを追加したモデルを簡単に作成して確認しましたが、MobileNetに適用して確認したいと思います.
BatchNormalizationについてよく知らないので、詳しい内容は後で勉強してから加えます.

Include_top


フィーチャーを入力するか、モデルのパラメータを入力するかを決定します.
  • include_top = Tureモデル全体をインポートし、Vector
  • を返します.
  • include_top = FalseTensor戻り
  • model = Sequential()
    
    # Pre-trained model
    model.add(mobilenet) 
    
    # 주어진 데이터를 분류하는 MLP
    model.add(Flatten())
    model.add(Dense(16, activation='relu'))
    model.add(Dropout(0.25))
    model.add(Dense(2, activation='softmax'))
    
    model.compile(loss='sparse_categorical_crossentropy',
                  optimizer=Adam(2e-5),
                  metrics=['acc'])
    model.summary()

    Pre-trained model


    プリトレーニングモデルは224×224(MobileNetDefault)のように大きな画像で学習されるため、プリトレーニングモデルでは小さいサイズの画像を使用すると自動的に拡大される.
    したがって、モデルを構築する際には、どのサイズの画像を配置するかを定義する必要があります.

    Image Data Generator

    tf.keras.preprocessing.image.ImageDataGenerator(
        featurewise_center=False, samplewise_center=False,
        featurewise_std_normalization=False, samplewise_std_normalization=False,
        zca_whitening=False, zca_epsilon=1e-06, rotation_range=0, width_shift_range=0.0,
        height_shift_range=0.0, brightness_range=None, shear_range=0.0, zoom_range=0.0,
        channel_shift_range=0.0, fill_mode='nearest', cval=0.0,
        horizontal_flip=False, vertical_flip=False, rescale=None,
        preprocessing_function=None, data_format=None, validation_split=0.0, dtype=None)
    TFはImageDataGeneratorクラスを提供し、画像データを強化し、画像の再スケール、回転、移動など多くの変更を行うことができます.
    flow from directory()を使用してtrainとtestのディレクトリに分割することで、train/testデータに変換を簡単に適用できます.

    Image Data Augmentation


    直接Data Augmentationと言えばいいのに、なぜ前に画像を付けなければならないのですか?

    Text data


    helloI am goodという言葉がある場合は、helloとgoodを変えるためには、0番目のインデックスと-1番目のインデックスを交換する必要があります.このように、ソースコードが変化しているので無理です.もちろん、どうすればいいのかは可能ですが、そんなに効率的ではないようです.
    もっと気になって、他のブログを調べてみると、以下の内容が見つかりました.
    2019年にEMNLPが発表した「テキスト分類タスク起動性能の非同期データ増強技術」では、自然言語処理におけるDA技術が実際に性能向上に大きな影響を与える.研究結果は,増強過程によって生成された文が元のラベルの性質によく従うことを示した.

    NLP


    では、自然言語の処理はどうでしょうか.
  • I work at google
  • I google at work
  • Googleという言葉も使われていますが、一つは名詞として、もう一つは動詞として使われています.
    同じデータであっても,その意味はその置かれている順序によって異なり,自然言語処理ではデータの順序が非常に重要な役割を果たす.
    これらの理由から、言語に強化を適用するのは容易ではありません.

    Image


    でもイメージはどうですか?
    画像が反転したり回転したりしても、正解は変わりません.
    従って、画像にデータ増強を適用することができる.

    Object detection


    ただし,object detectionの場合は若干異なるが,zoomのような問題がある.よく理解できないが、可能性はあるが、必ずしもやらなければならないとは限らない.
    object detectionは認識オブジェクトなので、回転や反転の効果は大きくないかもしれません.
    この内容が気になるので、もう一度探してみます.object detectionでは、画像だけでなくboundingboxも変更します.
    このような理由で、彼は必ずしもしなくてもいいと言ったようだ.

    Classification


    しかし分類では物語が異なり,画像を切り取ったり回転したりしても分類対象の目的は変わらない.つまり、犬の写真を180度回すのも犬の写真で、逆に犬の写真でもあります.

    Class mode


    ImageDataGeneratorのオプションには、以前に学習した内容に関連付けられたclass modeというオプションがあります.
    以前、Postingで以下の表を描いたことがありますが、画像データにエラーがないため、エラー内容を削除しました.
    二項分類複数項分類複数項分類One hot符号化喪失機能二項交差生成交差生成分類交差活性化機能Sigmoid SoftmaxSoftmaxclass modebarysparegrational
    class modeは、与えられた問題に基づいてbinarysparsecategoricalに適用されるべきである.ちなみにTFのデフォルト値はcategoricalです.
    実習は,以前学習したCatsとDogsデータセットbinary,sparse,categoricalを用いて行った.
    イメージ・データ・ジェネレータの順序は次のとおりです.
  • definition.
  • flow from directory()
  • next()実際のデータをマイメモリにインポートして保存
  • しかし,実際のモデルを回転させるとnext()部分が見つからず,その原因はモデルに適したモデルである.fit()自体はbatchsizeのように繰り返される反復器であるためnext()の意味が含まれていると考えられる.

    Note

  • imagedatageneratorは常にclass indexとnum classesを出力しようとします.
  • Outro


    確かにエンコード後は時間が経つのが早い
    ラーメン実習コードを添付したかったのですが、内容が長すぎるかもしれないので省略することにしました.