深属学習

TensorFlowでのレコメンダー【tensorflow-recommenders (TFRS)】

2020年9月23日GoogleはTensorFlow Recommenders (TFRS)のレコメンデーション システムのパッケージを発表しました。この記事は、TensorFlowレコメンダーのパッケージを紹介したいと思います。 目次 1. TensorFlowのレコメンダーとは 2. tensorflow-recommendersの特徴 3. 実験 _3.1 データロード _3.2 レコメンデーションモデルの定義 _3.3 モデル評価の関数 _3.4 モデル学習 _3.5 モデル評価 1. TensorFlowのレコメンダーとは TensorFlow Recommendationsは、TensorFlowを使用してレコメンダーシステムモデルを構築するためのオープンソースライブラリです。 これは、レコメンダーシステムを構築するための完全なワークフロー(データの準備、モデルの定式化、トレーニング、評価、および展開)に役立ちます。 Kerasに基づいて構築されており、複雑なモデルを構築する柔軟性を提供しながら、穏やかな学習曲線を持つことを目的としています。 2. tensorflow-recommendersの特徴 ・柔軟な候補者指名モデルを構築して評価します。 ・アイテム、ユーザー、およびコンテキスト情報を推奨モデルに自由に組み込みます。 ・複数の推奨目標を共同で最適化するマルチタスクモデルをトレーニングします。 ・TensorFlow Servingを使用する事が出来ます。 3. 実験 環境:Google Colab データセット:MovieLens 100Kデータセット TFRSをインポート pip install -q tensorflow-recommenders pip install -q –upgrade tensorflow-datasets ライブラリインポート import os import pprint …

TensorFlowでのレコメンダー【tensorflow-recommenders (TFRS)】 Read More »

画像分類・物体検出・セグメンテーションの比較

関連記事: U-net(画像セグメンテーション)の解説 先日の記事はU-net(画像セグメンテーション)の解説について解説しました。画像認識技術は画像分類・物体検出・セグメンテーションなどの技術があります。今回の記事は画像認識技術の違いを開設したいと思います。 目次 1. 画像認識(Image Recognition)とは 2. 画像分類(Image Classification)とは 3. 画像分類・物体位置特定(Image Classification・Localization)とは 4. 物体検出(Object Detection)とは 5. セグメンテーション(Segmentation) _5.1 セマンティック・セグメンテーション(Semantic Segmentation)とは _5.2 インスタント・セグメンテーション(Instant Segmentation)とは _5.3 パノプティック・セグメンテーション(Panoptic Segmentation)とは 6. まとめ 1. 画像認識(Image Recognition)とは 画像認識(Image Recognition)とは、画像や動画データから特徴をつかみ、対象物を識別するパターン認識技術の一つです。画像データから、対象物や、対象物の特徴(形状、寸法、数、明暗、色など)を抽出/分析/識別して認識検出する手法です。 コンピュータが画像認識を行うためには、前段階として、画像から対象物を抽出する必要があります。 下記の8ビットのグレースケール画像から、すべてのデジタル画像は0〜255の範囲の値を持つピクセルによって形成されます。0は黒、255は白です。 カラフルな画像の場合は、赤、緑、青の3つのマップと、0〜255の範囲のすべてのピクセルが含まれます。 画像認識を利用することで、顔認証システムや不審者検知、文字認識(OCR)、不適切画像の検出、 工場でのイレギュラー検知など幅広い分野で活用することができます。 今回の記事は物体検出の分野を中心にします。 2. 画像分類(Image Classification)とは 画像分類とは、機械学習やディープラーニングモデルで、画像を何らかの主題に基づき分類する処理方法です。いくつかの分類手法があります。教師あり学習では、ラベル付けされたデータセットを用いて、モデルを学習させていきます。 画像分類の結果は各クラスの予測信頼度です。 classes = [“dog”, “cat”, “nothing”] prediction = [ 0.8 , 0.1 …

画像分類・物体検出・セグメンテーションの比較 Read More »

U-netによる画像セグメンテーション(Image segmentation)の解説

         関連記事: OpenCVで顕著性検出(Saliency Detection) 先日の記事はOpenCVに入っている顕著性(Saliency)について解説しました。今回は、深層学習を用いた 教師有り学習で行う場合の画像Segmentationについて紹介していきます。 画像セグメンテーションとは、画像を複数の部分または領域に分割する処理です。画像全体や画像の一部の検出ではなくピクセル1つひとつに対して、そのピクセルが示す意味をラベル付けしていきます。 目次 1. U-Netの概要 2. 実験・コード __2.1 環境設定 __2.2 データ読み込み __2.3. データ前処理 __2.4. ネットワーク設定 __2.5. モデル学習 __2.6. 推論 1. U-Netの概要 U-Netとは U-Netは、ドイツのフライブルク大学( Freiburg)のコンピュータサイエンスが開発された生物医学的な画像セグメンテーション(物体がどこにあるか)のための全層畳み込みネットワーク (Fully Convolution Networkです。 ネットワークの構成は、縮小したネットワーク層を連続して反対において拡大の情報を付加していきます。ただしプーリング操作はアップサンプリングオペレーターに置き換えられます。 したがってこれらのレイヤーは出力の解像度を高めていきます。 後続の畳み込み層は、この情報に基づいて正確な出力を組み立てることを学習できます。つまり、畳み込まれた画像を decode する際に,encode で使った情報を活用している点が挙げられます。 左右対象でアルファベットの「U」に似ていることから、「U-net」と呼ばれているそうです。 2. 実験・コード 環境:Google Colab GPU データセット:オックスフォード大学のペットデータセット(37カテゴリー) モデル:U-netネットワーク モデル評価:Accuracy 2.1 環境設定 Tensoflowのサンプルデータをインストールします。 !pip install -q …

U-netによる画像セグメンテーション(Image segmentation)の解説 Read More »

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 »