深属学習

tf-keras-visでの特徴部位特定(Saliency・GradCAM)

  関連記事: OpenCVで顕著性検出(Saliency Detection)  TensorFlow 2.0 主な変更点 前回の記事はOpenCVに入っている顕著性(Saliency)について解説しました。今回の記事はkeras-visでの特徴部位特定(Saliency・GradCAM)について解説したいと思います。 目次 1. tf-keras-visの特徴部位特定の概要 __1.1 Saliencyとは __1.2 tf-keras-visのSaliencyのライブラリ 2. 実験・コード __2.1 環境の準備 __2.2 モデルの読み込み __2.3. データロード __2.4. Vanilla Saliency __2.5. SmoothGrad __2.6. GradCAM 1.keras-visの特徴部位特定の概要 1.1 Saliencyとは Saliencyの背景にあるアイデアは今となっては かなりシンプルです。 入力画像に対する出力カテゴリの勾配(変化率)を計算します。入力の小さな変化に関して出力値がどのように変化するかを可視化します。 出力の最も大きな変化の要因となる入力領域を強調するために、勾配(変化率)を使うことができます。 1.2  tf-keras-visのライブラリ tf-keras-visは、Tensorflow2でtf.kerasモデルを可視化するための視覚化ツールキットです。ただしtf-keras-visの機能はkeras-visに基づいていますが、tf-keras-visのAPIは通常のTensorflowのラッパーの独立していた時のKerasとのAPIとの互換性を備えていません。 tf-keras-visの可視化は3つの大きな特徴があります。 1. 高密度レイヤーを視覚化(Visualize Dense Layer) 2. 畳み込みレイヤーの可視化(Visualize Convolutional Filer) 3. 顕著性マップとGradCAM(Saliency Map and GradCAM) 今回は3番目の変化率の計算をしている顕著性マップ(Sileancy Map) …

tf-keras-visでの特徴部位特定(Saliency・GradCAM) Read More »

ニューラルネットワークのプルーニング(Pruning・枝刈り)

  関連記事:TensorFlow 2.0 主な変更点 今回の記事はTensorFlow モデル最適化ツールキットにあるPruning APIを解説と実験を行います。 目次 1.  ニューラルネットワークのプルーニングとは ___1.1 プルーニングの概要 ___1.2 TensorFlow モデル最適化ツールキット — Pruning API 2. 実験 ___2.1 環境構築 ___2.2 データのロード ___2.3 NNモデル ___2.4 プルーニングモデル ___2.5 モデルの評価 ___2.6 TensorFlow Liteでモデル圧縮 3. まとめ 1. ニューラルネットワークのプルーニング(枝刈り)とは 1.1 プルーニングの概要 ニューラルネットワークのプルーニングとは、機械学習アルゴリズムを最適化する方法の一つとして、ニューラル ネットワークのレイヤー間のつながり(パラメーター)を削除することです。これにより、パラメーターの数を減らして計算を高速化します。 実際には、ニューラル ネットワークのパラメーターの値をゼロにすることで、ニューラル ネットワークのレイヤー間の不要なつながりと見なしたものを削除します。この処理はトレーニング プロセスで行います。繋がりを消すもの以外に、重みを0にすることでプルーニング(枝刈り)とも言います。 1.2 TensorFlow モデル最適化ツールキット — Pruning API 重みのプルーニングを行う API は、Keras をベースに構築されています。そのため、このテクニックはどんな既存の Keras …

ニューラルネットワークのプルーニング(Pruning・枝刈り) Read More »

T-GANでテーブルデータ拡張

関連記事: 深層学習 前回の記事は「KerasでのData Augmentationの解説」画像のデータ拡張について解説しました。今回の記事はテーブルデータ拡張するT-GANについて解説したいと思います。 目次 1. T-GANの概要 __1.1 TGANとは __1.2 モデルパのラメータ 2. 実験・コード __2.1 データロード __2.2 ライブラリの設定 __2.3. 前処理 __2.4. モデルを訓練 __2.5. 前処理 __2.6. サンプル作成 3. サンプルデータ確認 __3.1 モデルテストの関数 __3.2 モデル検証 1. T-GANの概要 1.1 TGANとは TGANまたは、table-GANは、Table Generative Adversarial Networkの略称です。敵対的生成ネットワークで数値などの連続変数だけではなく、カテゴリ変数にも対応しています。 ネットワークの構成は下記になります。 テーブルデータから生成モデルを学習して、生成者(Generator)と識別者(Discriminator)を競わせます。 1.2 モデルパのラメータ tgan = TGANModel(continuous_columns, output=’output’, max_epoch=5, steps_per_epoch=10000, save_checkpoints=True, restore_session=True, batch_size=200, z_dim=200, noise=0.2, l2norm=0.00001, learning_rate=0.001, num_gen_rnn=100, num_gen_feature=100, num_dis_layers=1, num_dis_hidden=100, optimizer=’AdamOptimizer’ ) max_epoch (int, default=100): エポックの数 steps_per_epoch (int, default=10000): 各エポックで実行するステップの数 save_checkpoints(bool, default=True): …

T-GANでテーブルデータ拡張 Read More »

OpenCVで顕著性検出(Saliency Detection)

関連記事: 画像解析 今回の記事はOpenCVに入っている顕著性(Saliency)について解説したいと思います。 目次 1. Saliency Detectionの概要 2. 実験・コード __2.1 データロード __2.2 サリエンシーディテクションの関数 __2.3. SpectralResidualの顕著性 __2.4. FineGrainedの顕著性 1. Saliency Detectionの概要 顕著性を検出するには多くの方法があります。 OpenCVでは、顕著性検出用に提供されているアルゴリズムは3つのカテゴリに分類されます。 Static saliency : 画像から検出するモジュールです。Motion saliency : 動画のフレームに依存するモジュールです。今回は static saliencyについて解説します。static saliencyのアルゴリズムは、画像の人が良く注目する部分を検出できるようにするさまざまな画像機能を使用します。 OpenCVには、スペクトル残差と細粒度の2つのアルゴリズムがすでに実装されています。 Spectral Residual このアルゴリズムは、入力画像の対数スペクトルを分析し、スペクトルドメイン内の画像のスペクトル残差を抽出し、プロトオブジェクトの位置を示唆する顕著性マップを構築する高速な方法が実装されています。 Fine Grained 人間の目の網膜は神経節細胞で構成されています。 神経節細胞には、オンセンターとオフセンターの2種類があります。 オンセンターは、暗い背景に囲まれた明るい領域に反応します。 オフセンターは、明るい背景に囲まれた暗い領域に反応します。 このアルゴリズムは、オンセンター(on-center )とオフセンター(off-center)の違いに基づいて顕著性を計算します。 opencv/opencv_contribのモジュール: cv2.saliency.StaticSaliencySpectralResidual_create() cv2.saliency.StaticSaliencyFineGrained_create() 2. 実験・コード 概要: 入力データ: ウィキペディアからの画像 環境:Google Colab GPU ライブラリ: OpenCV …

OpenCVで顕著性検出(Saliency Detection) Read More »

Keras AutoEncoder で異常検知「詐欺検知」

前回はkaggleコンペでメルカリについて解説しました。今回の記事はAutoEncoderを使ってKaggle のクレジットカードの詐欺検知を解説します。 目次 1. Keras Encoder 2. Kaggleクレジットカード不正利用データ(Credit Card Fraud Detection) 3. 実験・コード __3.1 データ読み込み __3.2 データ可視化 __3.3 データ加工 __3.4 Encoderモデル __3.5 モデル評価   1. Keras Autoencoder 自己符号化器 (autoencoder; AE) は入力を出力にコピーするように学習させたNNです。データが低次元多様体や多様体の小さい集合の周りに集中しているという考えに基づいている。AutoEncoder は特徴量の次元圧縮や異常検知など、幅広い用途に用いられています。 基本的には下図のように、入力と出力が同じになるようにニューラルネットワークを学習させるものです。入力をラベルとして扱っていて、教師あり学習と教師なし学習の中間に位置するような存在です。普通のニューラルネットワークと同様に勾配降下法(gradient descent)などを使って学習させることができます。   2. Kaggleクレジットカード不正利用データ https://www.kaggle.com/mlg-ulb/creditcardfraud#creditcard.csv 2013年9月の2日間の欧州の人が持つカードで、取引を記録したデータセットです。 284,807件の取引があり、その中に492件詐欺行為が含まれて、極めて不均衡なデータセットとなっています。各レコードには不正利用か否かを表す値(1ならば不正利用)を持っていますが、当然ながらほとんどが0となっています。また、個人情報に関わるため、タイムスタンプと金額以外の項目が主成分分析(および標準化)済みとなっていることも特徴です。   3. 実験・コード 3.1 データ読み込み 環境:Google Colab GPU ライブラリのインポート import pandas as pd import seaborn …

Keras AutoEncoder で異常検知「詐欺検知」 Read More »

高度な活性化関数PReLU

今回は高度な活性化関数のPReLUについて解説と実験します。 目次: 1.PReLUとは 2.KerasのPReLU 3.コード・実験 (ReLU vs PReLU) 4.まとめ PReLUとは PReLU は、Parametric Rectified Linear Unitの略称で、ReLUと似ていますが、負のアウトプットがあります。インプットが閾値よりも少ない度合に応じて、負の値を出力するようになっています。特に深い階層において過学習を防ぐ効果があると言われています。プラスとマイナスのどちらにも勾配があるため、学習効率が良いと言われているようです。 f(x) = alphas * x for x < 0 alphasはxと同じ行列を持つ学習対象の配列です。 PreLUの論文:Microsoft Research Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification https://arxiv.org/abs/1502.01852   2.Kerasの高度な活性化関数のPReLU keras.layers.PReLU(alpha_initializer=’zeros’, alpha_regularizer=None, alpha_constraint=None, shared_axes=None) alpha_initializer:重みを初期化する関数。 alpha_regularizer:重みを正則化する関数。 alpha_constraint:重みに対する制約。 shared_axes:活性化関数で共有する学習パラメータの軸。 出力のshapeは入力のshapeと同じです。   3.コード・実験 (ReLU vs PReLU) 概要:データセット:MNIST 60,000の学習データと10,000のテストデータ(28 x …

高度な活性化関数PReLU Read More »

keras プーリングレイヤー (Pooling layer)

前回の記事は深層学習について解説しました。 今回はディープラーニングのプーリングレイヤー (Pooling layer)を解説します。 Kerasでは様々なレイヤーが事前定義されており、それらをレゴブロックのように組み合わせてモデルを作成していきます。事前定義されてレイヤーを組み合わせてCNN、LSTM、などのニューラルネットワークを作成します。今回はPoolingレイヤーを説明します。 プーリングレイヤーとは プーリング層は通常畳込み層(Convolution Layer)の直後に設置されます。 プーリング層は畳み込み層で抽出された特徴の位置感度を若干低下させることで対象とする特徴量の画像内での位置が若干変化した場合でもプーリング層の出力が普遍になるようにします。 画像の空間サイズの大きさを小さくすることで調整するパラメーターの数を減らし、過学習を防止するようです。 最大プーリング(max pooling)と平均プーリング(average pooling)など様々な種類があるようだが、画像認識への応用では最大プーリングが実用性の面から定番となります。 では、kerasのコートを実験しましょう。 !wget –no-check-certificate \ https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip \ -O /tmp/cats_and_dogs_filtered.zip –2019-07-20 07:15:53–  https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip Resolving storage.googleapis.com (storage.googleapis.com)… 172.217.214.128, 2607:f8b0:4001:c05::80 Connecting to storage.googleapis.com (storage.googleapis.com)|172.217.214.128|:443… connected. HTTP request sent, awaiting response… 200 OK Length: 68606236 (65M) [application/zip] Saving to: ‘/tmp/cats_and_dogs_filtered.zip’ /tmp/cats_and_dogs_ 100%[===================>]  65.43M   250MB/s    in 0.3s 2019-07-20 …

keras プーリングレイヤー (Pooling layer) Read More »

TensorFlow 2.0 主な変更点

前回、【深属学習】について色んな記事を話しました。 今回の記事はGoogleが2019年初に公開したTensorFlow 2.0について紹介します。 本番リリースではないですが、現在の時点TensorFlow 2.0 Betaです。   リリース日のタイムライン: 2019年3月4日 TensorFlow 2.0 Alphaのリリース 2019年6月日8 TensorFlow 2.0 Betaのリリース >  pip install tensorflow==2.0.0-beta0 本記事では、TensorFlow 2.0の変更点についてまとめたいと思います。 Google I/O’19のアナウンスとDesign Documentを参考しました。 TensorFlowのアナウンスにもある通り、TensorFlow 2.0における大きな変更点は以下の4つになります。 1.Eager Modeのデフォルト化 2.Sessionとplaceholder消滅 3.kerasが、TensorFlow標準の高レベルAPIに 4.TensorFlow 2.0の全体構成 1. Eager Modeのデフォルト化 eager executionはDefine-by-runの機能になります。Define by Runでは、計算グラフ(ニューラルネットの構造)の構築とデータを流しながら行います。Define and Runでは、計算グラフを構築してから、そこにデータを流していきます。 従来の tensorflow は Define-and-run で、 PyTorch やChainer は Define-by-run です。 eager execution は tensorflow で …

TensorFlow 2.0 主な変更点 Read More »

AdaBound 新しい深層学習のoptimizer

前回の記事は色々な【深属学習】について話しました。今回の深層学習の最適化手法のAdaBoundを紹介します。AdaBoundはAdamの収束の速さとSGDの汎化性能の良さの良いとこ取りなoptimizerです。   Adamの弱点としては、汎化性能が劣る・未知のデータに弱い・極端な学習率を使うため上手く収束しないことがあります。例えばですが、収束が近くなると学習率は0.01以下の小さすぎる値になったり1000以上の大きすぎる値になったりしてしまうことがあります。逆にメリットとしては、収束が早いという事になります。 この大きすぎたり、小さすぎるを解消するために新しく提案されたのが、AMSBoundという手法になります。   AMSBound の論文はこちらです。   今回はColab(GPU)でKerasのRestNet34のモデルを作成します。Keras-adabound はこちらから参照します。   概要 データセット:cifar10 cifar10は、kerasのdatasetsで提供されている、5万枚の訓練画像と1万枚のテスト画像のデータセットです。画像は32×32のRGBで、画像の下に表示されている数字が正解ラベルです。 0 – airplane  1 – automobile  2 – bird  3 – cat  4 – deer 5 – dog  6 – frog  7 – horse  8 – ship  9 – truck   Optimizer:Adam,と AdaBound のOptimizerを比較します。 モデル評価:速い収束、正解率を確認します。   学習条件 共通設定 モデル:  ResNet34 バッチサイズ = 512 エポック数 = 100 クラス数 = 10   Optimizerの設定 adabound  …

AdaBound 新しい深層学習のoptimizer Read More »