タグ

ブックマーク / aidiary.hatenablog.com (46)

  • PyTorch (8) Transfer Learning (Ants and Bees) - 人工知能に関する断創録

    今回は、公式にあるPyTorch TutorialのTransfer Learning Tutorialを追試してみた! 180205-transfer-learning-tutorial.ipynb - Google ドライブ 前回(2018/2/12)取り上げたVGGやResNetのような大規模な畳み込みニューラルネット(CNN)をスクラッチ(ランダム重み)から学習させられる人は少ない。大規模なデータとマシンパワーが必要になるためだ。 そんな"貧乏人"の強い味方が転移学習(Transfer Learning)。これはDeep Learningを始めたらすぐにでも身につけるべき超重要テクと言える*1 転移学習は、(ImageNetなどの)大規模データで学習済みのモデルを別のタスクに応用(転移)する技術全般を指す。 今回は、ImageNetで学習した1000クラスの分類モデルをアリとハチの

  • Kerasによるデータ拡張 - 人工知能に関する断創録

    今回は、画像認識の精度向上に有効な データ拡張(Data Augmentation) を実験してみた。データ拡張は、訓練データの画像に対して移動、回転、拡大・縮小など人工的な操作を加えることでデータ数を水増しするテクニック。画像の移動、回転、拡大・縮小に対してロバストになるため認識精度が向上するようだ。 音声認識でも訓練音声に人工的なノイズを上乗せしてデータを拡張するテクニックがあるらしいのでそれの画像版みたいなものだろう。 ソースコード test_datagen2.py test_datagen3.py ImageDataGeneratorの使い方 #3 - GithubのIssuesでTODOを管理し始めた ImageDataGenerator Kerasには画像データの拡張を簡単に行うImageDataGeneratorというクラスが用意されている。今回は、この使い方をまとめておきた

    Kerasによるデータ拡張 - 人工知能に関する断創録
  • VGG16のFine-tuningによる犬猫認識 (2) - 人工知能に関する断創録

    VGG16のFine-tuningによる犬認識 (1) (2017/1/8)のつづき。 前回、予告したように下の3つのニューラルネットワークを動かして犬・の2クラス分類の精度を比較したい。 小さな畳み込みニューラルネットをスクラッチから学習する VGG16が抽出した特徴を使って多層パーセプトロンを学習する VGG16をFine-tuningする リポジトリ:dogs_vs_cats 1. 小さな畳み込みニューラルネットをスクラッチから学習する ベースラインとしてVGG16は使わずに小規模な畳み込みニューラルネットワークをスクラッチから学習する。学習データは、犬クラス1000枚、クラス1000枚と小規模なデータを使うのであまり大規模なネットワークは学習できない。そこで、畳込みが3層のLeNet相当の小さなモデルを構成した。 横の矢印はそのレイヤでの出力の4Dテンソルのサイズ (samp

    VGG16のFine-tuningによる犬猫認識 (2) - 人工知能に関する断創録
  • KerasでVGG16を使う - 人工知能に関する断創録

    今回は、Deep Learningの画像応用において代表的なモデルであるVGG16をKerasから使ってみた。この学習済みのVGG16モデルは画像に関するいろいろな面白い実験をする際の基礎になるためKerasで取り扱う方法をちゃんと理解しておきたい。 ソースコード: test_vgg16 VGG16の概要 VGG16*1は2014年のILSVRC(ImageNet Large Scale Visual Recognition Challenge)で提案された畳み込み13層とフル結合3層の計16層から成る畳み込みニューラルネットワーク。層の数が多いだけで一般的な畳み込みニューラルネットと大きな違いはなく、同時期に提案されたGoogLeNetに比べるとシンプルでわかりやすい。ImageNetと呼ばれる大規模な画像データセットを使って訓練したモデルが公開されている。 VGG16の出力層は1000

    KerasでVGG16を使う - 人工知能に関する断創録
  • Dogs vs. Cats Redux - 人工知能に関する断創録

    今回はPractical Deep Learning for CodersのLesson1の結果をまとめてみた。題材はKaggleの犬・分類。 Dogs vs. Cats Redux: Kernels Edition | Kaggle 以前やったVGG16のFine-tuningによる犬認識(2017/1/8)と同じタスク。前回は1000画像の小セットだけでFine-tuneしたが、今回は25000画像の全データを使ってFine-tuneしてKaggleに投稿するところまで通しで試した。 オリジナルのコードはPython2でKeras1 (Theano backend)でしか動作しない。そこで、今回は Python3 と Keras2 (Tensorflow backend) を使って再実装する 提供されているutils.pyとvgg16.pyは使わずにスクラッチからKeras API

    Dogs vs. Cats Redux - 人工知能に関する断創録
  • Practical Deep Learning for Coders - 人工知能に関する断創録

    最近、fast.aiのPractical Deep Learning for CodersというMOOCを受講している。 この講座は 無料 動画形式の講義(1回2時間というボリューム) Jupyter NotebookとKerasを使用 CNN、Finetuning、VGG16、ResNet、RNNなどが実践的な例題を通して学べる 実務家がDeep Learningで自分の問題を解決できることが目標 という特徴がある。講義内容は高度で実践的なものが多い印象。例えば、Lesson1でMNISTと思いきや・・・いきなりKaggleのDogs vs. CatsをVGG16 + Finetuningで解いてKaggleに投稿するところまでが課題になっている。これさえできれば画像認識が必要ないろんな課題に同じ技術を適用できるとのこと。 今はまだPart1しかないが、ForumのなかでPart2の動画

    Practical Deep Learning for Coders - 人工知能に関する断創録
    satojkovic
    satojkovic 2017/05/15
    見てみよう
  • 畳み込みニューラルネットワークの可視化 - 人工知能に関する断創録

    Deep Learningの学習結果(重み)はブラックボックスで、隠れ層のユニット(特に深い層の!)が一体何を学習したのかがよくわからないと長年言われてきた。しかし、今回紹介する方法を使うとニューラルネットが何を学習したのか目で見える形で表現できる。 畳み込みニューラルネットで学習したフィルタの可視化というと以前やったように学習した第1層のフィルタの重みを直接画像として可視化する方法がある。 しかし、畳み込みフィルタのサイズは基的に数ピクセル(MNISTの例では5x5ピクセル程度)のとても小さな画像なのでこれを直接可視化しても何が学習されたか把握するのはとても難しい。たとえば、MNISTを学習した畳み込みニューラルネット(2016/11/20)のフィルタを可視化しても各フィルタがどの方向に反応しやすいかがわかる程度だ。 各フィルタが何を学習したかを可視化する別のアプローチとして各フィルタ

    畳み込みニューラルネットワークの可視化 - 人工知能に関する断創録
  • 15周年記念 - 人工知能に関する断創録

    2017年2月21日で人工知能に関するブログ(というか自分のWebサイト)を初めてから15周年を迎えます。基的に飽きっぽい性格ですが、こんなに続いたのは読んで応援してくださったみなさんのおかげだと思います。ありがとうございます! ここら辺で15年を振り返ってみるのも面白いんじゃないかと思いインターネットアーカイブを掘り起こしてまとめてみることにしました。個人的な話なのであんまり興味ないかもしれないですけど(^^; /tmp(2002年~) 「全世界に公開できるWebサーバ立てたよ。みんな何か書いてみよう!」みたいな話があって書き始めたのがきっかけです。研究室に配属されたてだったのでこれからやる研究の履歴をまとめていこうかなと思っていました。あと文章を書くのが苦手だったので抵抗をなくそうという趣旨でした。当時はHTMLファイルを書いてFTPでアップロードという時代だったのでとってもシンプル

    15周年記念 - 人工知能に関する断創録
  • VGG16のFine-tuningによる17種類の花の分類 - 人工知能に関する断創録

    前回(2017/1/10)は、VGG16をFine-tuningして犬かを分類できる2クラス分類のニューラルネットワークを学習した。今回は、同様のアプローチで17種類の花を分類するニューラルネットワークを学習してみたい。前回の応用編みたいな感じ。この実験はオリジナルなので結果がどう出るかわからなかったけどうまくいったのでまとめてみた。 リポジトリ:17flowers 使用したデータは、VGG16を提案したOxford大学のグループが公開している 17 Category Flower Dataset である。下のような17種類の花の画像データ。とっても美しい。 前に実験した(2017/1/4)ようにデフォルトのVGG16ではひまわりさえ分類できなかったが、VGG16をFine-tuningすることで果たしてこれら17種類の花(ひまわりもある)を分類できるようになるのだろうか?さっそく試して

    VGG16のFine-tuningによる17種類の花の分類 - 人工知能に関する断創録
  • Kerasによる2クラスロジスティック回帰 - 人工知能に関する断創録

    まずはもっとも簡単な2クラスロジスティック回帰モデルをKerasで書いてみる。前にTheanoでやった(2015/5/19)のをKerasで書き換えただけ。ロジスティック回帰は、回帰とつくけど分類のアルゴリズムで、隠れ層がなく、活性化関数にシグモイド関数を使ったニューラルネットとしてモデル化できる。 データは、PRMLの4章のex2data1 を使う。1列目と2列目がデータで3列目がクラスラベル(0または1の2クラス)。 ソースコード:ex2data1.py データのロードと正規化 データを読み込むライブラリにはpandasなどもあるが、ここではnumpy.genfromtxt()を使う。Xがデータで二次元データのリスト、tがラベルで0または1のリスト。 # load training data data = np.genfromtxt(os.path.join('data', 'ex2d

    Kerasによる2クラスロジスティック回帰 - 人工知能に関する断創録
  • WindowsでMeCab Pythonを使う - 人工知能に関する断創録

    語の文章を単語に分割するには形態素解析を使います。日語の形態素解析には、ChaSen、MeCab、Yahoo!形態素解析などがあります。ナイーブベイズを用いたブログ記事の自動分類(2010/7/3)でMeCabをPythonから使う方法を簡単にまとめましたが、MeCabはよく使うので再度まとめ直して独立したエントリにしました。Yahoo!形態素解析の使い方は、Yahoo!形態素解析API(2009/4/15)で書きました。 Windowsへの導入方法 MeCabは高性能な形態素解析モジュールでPythonRubyPerlJavaなどさまざまな言語から使えます。Mac OS XとLinuxでは簡単にコンパイルしてインストールができるのですが、WindowsではMinGWやVisual Studioのインストール、コードの修正が必要でかなり面倒くさい。そこで、Pythonモジュー

    WindowsでMeCab Pythonを使う - 人工知能に関する断創録
  • 深層学習ライブラリ Keras - 人工知能に関する断創録

    ここ1年くらいDeep Learning Tutorialを読みながらTheanoというライブラリで深層学習のアルゴリズムを実装してきた。 深層学習の基的なアルゴリズムならTheanoでガリガリ書くこともできたがより高度なアルゴリズムをTheanoでスクラッチから書くのはとてもきつい*1。 そんなわけでPylearn2、Lasagne、nolearnなどのTheanoベースのラッパーライブラリをいろいろ調べていたのだが、結局のところKerasというライブラリが一番よさげだと思った。KerasはバックエンドとしてTheanoとTensorflowの両方が使え、より高レイヤな表現(たぶんChainerと同レベル)で深層学習のさまざまなアルゴリズムが記述できる。TheanoやTensorflowは完全に隠蔽されており、Kerasで書かれたプログラムはまったく修正せずにTheanoとTensor

    深層学習ライブラリ Keras - 人工知能に関する断創録
  • 線形SVM - 人工知能に関する断創録

    下巻に入って7章のサポートベクトルマシン(Support Vector Machine: SVM)を実装してみます。SVMに関しては、有名なSVMのライブラリ(libsvm)を使ったことがあるだけで、アルゴリズム詳細はPRMLで初めて学習しました。なので変なことを書いていたらコメント欄で指摘してもらえると助かります。 まずは、一番簡単な線形SVMを実装してみます。今までと同様に直線(超平面)でデータが完全に分離できる場合です。PRMLの7章には特に説明がありませんが、カーネル関数に下の線形カーネル(データのただの内積)を用いた場合に相当するようです。このカーネル関数を多項カーネルやガウシアンカーネルに変更すると線形分離不可能なデータも分類できるようになるとのこと。非線形SVMは次回ためしてみます。 まず、SVMの識別関数は、式(7.1)で表せます。 今までと違ってバイアスパラメータをまとめ

    線形SVM - 人工知能に関する断創録
  • Chainerによる多層パーセプトロンの実装 - 人工知能に関する断創録

    これまでDeep LearningのアルゴリズムをTheanoで実装してきた(2015/4/29)けれど、ここらで巷で大人気のライブラリChainerにも手を出してみた。Theanoの勉強を始めたあとすぐにChainerが公開された(2015/6/9)がユーザや情報が増えるまで待っていた感じ(笑)最近はコードや実験結果などを公開してくれる人が増えてきたので非常に参考になっている。目についたものはてぶに登録しているので、興味を持った手法はがしがし勉強して追試していきたい。 Chainerのバージョンは1.3.2をベースにしている。1.3からPyCUDA/scikit-cudaを独自ライブラリのCuPyに置き換えたとのことで、以前のコードは少し修正しないと動かないようだ。その分、1.3からはインストールがシンプルになっていてとてもうれしい。1.1のころは、Chainerと直接関係ないPyCUD

    Chainerによる多層パーセプトロンの実装 - 人工知能に関する断創録
  • Machine Learning with Scikit Learn (Part II) - 人工知能に関する断創録

    Machine Learning with Scikit Learn (Part I)(2015/8/10)のつづき。今回は、後編のPartIIの動画の内容を簡単にまとめたい。 4.1 Cross Validation ラベル付きデータが少ないときに有効な評価法であるK-fold cross-validationについての説明。訓練データをK個のサブセットに分割し、そのうち1つのサブセットをテストデータに残りK-1個のサブセットを訓練データにして評価する。これをテストデータを入れ替えながらK回評価し、その平均を求める。 この手順は下のように書ける。bool型のマスクを使ってテストデータと訓練データをわけている。 k = 5 n_samples = len(X) fold_size = n_samples // k scores = [] masks = [] for fold in ran

    Machine Learning with Scikit Learn (Part II) - 人工知能に関する断創録
  • Machine Learning with Scikit Learn (Part I) - 人工知能に関する断創録

    今年の7月に開催されたSciPy2015の講演動画がEnthoughtのチャンネルで公開されている。今年も面白い講演が多いのでいろいろチェックしている。 今年の目標(2015/1/11)にPython機械学習ライブラリであるscikit-learnを使いこなすというのが入っているので、まずはscikit-learnのチュートリアルを一通り見ることにした。 Part IとPart IIを合わせると6時間以上あり非常に充実している。IPython Notebook形式の資料やデータは下記のGitHubアカウントで提供されている。ノートブックをダウンロードし、実際に手を動かしながらチュートリアルを進めると理解がより進むかもしれない。 あとで振り返りやすいように内容を簡単にまとめておきたい。 1.1 Introduction to Machine Learning 機械学習システムの流れ。教師あ

    Machine Learning with Scikit Learn (Part I) - 人工知能に関する断創録
  • Theanoによる畳み込みニューラルネットワークの実装 (1) - 人工知能に関する断創録

    Theanoによる多層パーセプトロンの実装(2015/6/18)のつづき。今回は、Deep Learning Tutorialの畳み込みニューラルネットワーク(Convolutional Neural Network: CNN, ConvNet)を実装してみる。 CNNは人間の視覚野を参考にした手法であり、画像認識に特化したDeep Learningアルゴリズムである。ImageNetの物体認識コンテストでぶっちぎりの成果を上げた手法はさまざまな工夫があるもののこのCNNをベースにしている。 当は一般物体認識の実験をやりたいところだけどお楽しみは後に残しておいて、まずはMNISTの手書き数字認識を追試して感触をつかみたい。 ソースコード全体はここに置いた。 畳み込みニューラルネットワーク まず今回実装する畳み込みニューラルネットワーク(CNN)の構成を図でまとめてみた(Deep Lear

    Theanoによる畳み込みニューラルネットワークの実装 (1) - 人工知能に関する断創録
  • Deep Learning リンク集 - 人工知能に関する断創録

    乗るしかないこのビッグウェーブに Deep Learning(深層学習)に関連するまとめページとして使用する予定です。Deep Learningに関する記事・スライド・論文・動画・書籍へのリンクをまとめています。最新の研究動向は全然把握できていないので今後研究を進めるなかで記録していきたいと思います。読んだ論文の概要も簡単にまとめていく予定です。ブログでは、当面の間、Theanoを使って各種Deep Learningアルゴリズムを実装していきたいと思います。 関連ニュースなどはTwitterでも流しているので興味があったらフォローしてください。 すべてに目が通せず更新が追いついていません。私のはてなブックマークで[Deep Learning]というタグを付けて登録しています。まったく整理できていませんがご参考まで。 Theano編 TheanoをWindowsにインストール(2015/1

    Deep Learning リンク集 - 人工知能に関する断創録
  • TheanoをWindowsにインストール - 人工知能に関する断創録

    Deep Learningを実装するのによく使われるTheanoというPythonライブラリをWindowsマシンにインストールしたのでそのときの記録。ただ使うだけだったらPythonとnumpy/scipyをインストールした後にpip installs Theanoで普通に使えていた。実際、GPUが貧弱なMacbook Airではこの方法でインストールしていた。今回、PCを買い替えた(2015/1/19)こともあって、NVIDIA社のGPUを使って高速演算できるようにしてみたというわけ。私のマシンは、 OS : Windows 8.1 64bit GPU: NVIDIA GeForce GTX 760 Ti OEM という環境。Theano TutorialにもWindowsへのインストール方法は載っているけどはっきり言ってよくわからない。いろいろ調べていたところ以下の記事が自信満々で手

    TheanoをWindowsにインストール - 人工知能に関する断創録
  • エージェントとは - 人工知能に関する断創録

    エージェントは最近AIの中でも流行みたいだが意味がよくわからなかった。「自律的に行動する主体」という認識しかなかったのだが、調べてみるといろいろな意味があって興味深かった。石田さんの論文 石田亨: エージェントを考える, 人工知能学会誌, Vol.10, No.5, 1995 によると、エージェント研究は次のように分類できるようだ。 Autonomous agent 各自の意思決定原理機構に基づき動作する。自律性を強調する場合に用いられる。 Intelligent agent 例えば心的状態(メンタルスペース)を持ち、問題解決や学習機構を有する。知性を強調する場合に用いられる。 Society of mind 知性を実現する機能単位をエージェントと呼ぶ。脳と心の働きが特殊化された機能単位の相互作用で生じると考える。 Multi agent 個々の機能ではなく、協調や交渉などの相互作用を研究

    エージェントとは - 人工知能に関する断創録