ソウルICTイノベーションプラザ-人工知能プレミアムコース(視覚知能)12日目
※ Notification
本文は著者が理解した内容に基づいて書かれているため,誤りがある可能性がある.
间违ったところがあったら、伝言を残してください.私たちは修正します.
Intro
を返します.
プリトレーニングモデルは224×224(MobileNetDefault)のように大きな画像で学習されるため、プリトレーニングモデルでは小さいサイズの画像を使用すると自動的に拡大される.
したがって、モデルを構築する際には、どのサイズの画像を配置するかを定義する必要があります.
Image Data Generator
I work at google I google at work Googleという言葉も使われていますが、一つは名詞として、もう一つは動詞として使われています.
同じデータであっても,その意味はその置かれている順序によって異なり,自然言語処理ではデータの順序が非常に重要な役割を果たす.
これらの理由から、言語に強化を適用するのは容易ではありません.
でもイメージはどうですか?
画像が反転したり回転したりしても、正解は変わりません.
従って、画像にデータ増強を適用することができる.
ただし,object detectionの場合は若干異なるが,zoomのような問題がある.よく理解できないが、可能性はあるが、必ずしもやらなければならないとは限らない.
object detectionは認識オブジェクトなので、回転や反転の効果は大きくないかもしれません.
この内容が気になるので、もう一度探してみます.object detectionでは、画像だけでなくboundingboxも変更します.
このような理由で、彼は必ずしもしなくてもいいと言ったようだ.
しかし分類では物語が異なり,画像を切り取ったり回転したりしても分類対象の目的は変わらない.つまり、犬の写真を180度回すのも犬の写真で、逆に犬の写真でもあります.
ImageDataGeneratorのオプションには、以前に学習した内容に関連付けられたclass modeというオプションがあります.
以前、Postingで以下の表を描いたことがありますが、画像データにエラーがないため、エラー内容を削除しました.
二項分類複数項分類複数項分類One hot符号化喪失機能二項交差生成交差生成分類交差活性化機能Sigmoid SoftmaxSoftmaxclass modebarysparegrational
class modeは、与えられた問題に基づいて
実習は,以前学習したCatsとDogsデータセット
イメージ・データ・ジェネレータの順序は次のとおりです.definition. flow from directory() next()実際のデータをマイメモリにインポートして保存 しかし,実際のモデルを回転させるとnext()部分が見つからず,その原因はモデルに適したモデルである.fit()自体はbatchsizeのように繰り返される反復器であるためnext()の意味が含まれていると考えられる.
imagedatageneratorは常にclass indexとnum classesを出力しようとします. Outro
本文は著者が理解した内容に基づいて書かれているため,誤りがある可能性がある.
间违ったところがあったら、伝言を残してください.私たちは修正します.
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 params
、Trainable 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 attribute
part.( 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
フィーチャーを入力するか、モデルのパラメータを入力するかを決定します.
猫と犬のデータセットに多様な訓練前のモデルを適用し,結果を比較分析した.
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 params
、Trainable 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 attribute
part.( 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
モデル全体をインポートし、Vectorinclude_top = False
Tensor戻り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
では、自然言語の処理はどうでしょうか.
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)
同じデータであっても,その意味はその置かれている順序によって異なり,自然言語処理ではデータの順序が非常に重要な役割を果たす.
これらの理由から、言語に強化を適用するのは容易ではありません.
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は、与えられた問題に基づいて
binary
、sparse
、categorical
に適用されるべきである.ちなみにTFのデフォルト値はcategorical
です.実習は,以前学習したCatsとDogsデータセット
binary
,sparse
,categorical
を用いて行った.イメージ・データ・ジェネレータの順序は次のとおりです.
Note
Outro
確かにエンコード後は時間が経つのが早い
ラーメン実習コードを添付したかったのですが、内容が長すぎるかもしれないので省略することにしました.
Reference
この問題について(ソウルICTイノベーションプラザ-人工知能プレミアムコース(視覚知能)12日目), 我々は、より多くの情報をここで見つけました
https://velog.io/@kimsoohyun/서울ICT이노베이션스퀘어-인공지능-고급과정시각지능-12일-차
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(ソウルICTイノベーションプラザ-人工知能プレミアムコース(視覚知能)12日目), 我々は、より多くの情報をここで見つけました https://velog.io/@kimsoohyun/서울ICT이노베이션스퀘어-인공지능-고급과정시각지능-12일-차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol