タグ

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

  • PyTorch (14) GAN (CelebA) - 人工知能に関する断創録

    今回はDCGANをCelebAのデータで試してみた。このデータもよく見るけど使うの始めてだな。これまでのMNIST(2018/3/4)やFashion MNISTのGANと違ってカラー画像でサイズも大きいので少し修正が必要。 180303-gan.ipynb - Google ドライブ CelebA dataset CelebAのサイトではGoogle Driveを使って画像ファイルを提供している。ブラウザ上から直接ダウンロードしてきてもよいが、AWSなどクラウド環境を使っているときはいちいちローカルにダウンロードしてそれをAWSにアップするのが面倒だ。コマンドラインツールでAWS上に直接ダウンロードしたくて少し悩んだ。 Google Drive上のファイルをCLIで操作する gdrive という便利なツールがあるが、これは自分のGoogle Driveのファイルしか操作できない。他人のフ

    PyTorch (14) GAN (CelebA) - 人工知能に関する断創録
  • PyTorch (2) 自動微分 - 人工知能に関する断創録

    PyTorchの自動微分を試してみた。 import numpy as np import torch import torch.nn as nn まずは必要なライブラリをインポート。 # テンソルを作成 # requires_grad=Falseだと微分の対象にならず勾配はNoneが返る x = torch.tensor(1.0, requires_grad=True) w = torch.tensor(2.0, requires_grad=True) b = torch.tensor(3.0, requires_grad=True) # 計算グラフを構築 # y = 2 * x + 3 y = w * x + b # 勾配を計算 y.backward() # 勾配を表示 print(x.grad) # dy/dx = w = 2 print(w.grad) # dy/dw = x =

    PyTorch (2) 自動微分 - 人工知能に関する断創録
  • PyTorch (6) Convolutional Neural Network - 人工知能に関する断創録

    今回は畳み込みニューラルネットワーク。MNISTとCIFAR-10で実験してみた。 MNIST import numpy as np import torch import torch.nn as nn import torchvision.datasets as dsets import torchvision.transforms as transforms # Hyperparameters num_epochs = 10 batch_size = 100 learning_rate = 0.001 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print(device) 今回からGPU対応した。PyTorchはKerasと違ってGPUモードにするために明示的にコーディングが必要。ここがちょ

    PyTorch (6) Convolutional Neural Network - 人工知能に関する断創録
  • Pythonでサウンドスペクトログラム - 人工知能に関する断創録

    Pythonで音声信号処理(2011/05/14) 今回は、さまざまな音声のスペクトログラム(spectrogram)を求めてみたいと思います。科学捜査班が声紋分析で使っているやつですね。こういうの。 名前がスペクトログラムってくらいなのでフーリエ変換で求めるスペクトル(spectrum)と関係があります。スペクトルは、離散フーリエ変換(2011/6/11)でも紹介しましたが、音声波形の短時間(512サンプルなど)の波形データの中にどのような周波数成分がどれだけ含まれるかを表した図です。スペクトルは、横軸が周波数で縦軸が強度(振幅の2乗)となっています。スペクトルのグラフには、時間が入ってこないのが特徴的。時間はFFTをかける波形の位置で決まるので時間はFFTする前にあらかじめ固定されています。ちなみに、元の波形は横軸が時間なので時間領域、スペクトルは横軸が周波数なので周波数領域といいます

    Pythonでサウンドスペクトログラム - 人工知能に関する断創録
  • 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) - 人工知能に関する断創録
  • 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で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を使う - 人工知能に関する断創録
  • Kerasによるデータ拡張 - 人工知能に関する断創録

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

    Kerasによるデータ拡張 - 人工知能に関する断創録
  • 深層学習ライブラリ Keras - 人工知能に関する断創録

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

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

    MNISTの数字画像はそろそろ飽きてきた(笑)ので一般物体認識のベンチマークとしてよく使われているCIFAR-10という画像データセットについて調べていた。 このデータは、約8000万枚の画像がある80 Million Tiny Imagesからサブセットとして約6万枚の画像を抽出してラベル付けしたデータセット。このデータセットを整備したのは、SuperVision(またはAlexNet)と呼ばれる畳み込みニューラルネットワークを使ってILSVRC2012で優勝したAlex Krizhevskyさんとのこと。こういう泥臭い仕事もしていたなんて尊敬する。 CIFAR-10の元となる80 Million Tiny Imagesは類似画像検索(2009/10/3)で少し言及したことがあった。初出はこの論文(PDF)だと思うけれど、最初に読んだときいろいろな画像があってとてもわくわくし、いつか使っ

    CIFAR-10 - 人工知能に関する断創録
  • ChainerによるCIFAR-10の一般物体認識 (1) - 人工知能に関する断創録

    Chainerによる畳み込みニューラルネットワークの実装(2015/10/7)のつづき。今回はMNISTの数字画像認識ではなく、CIFAR-10(2015/10/14)という画像データを使った一般物体認識をやってみた。画像を10個のクラスに分類するタスク。実装にはChainerを使った。 MNISTは1チャンネルの白黒画像だったけれどCIFAR-10は3チャンネル(RGB)のカラー画像なので少しだけ複雑になる。CIFAR-10(2015/10/14)でも書いたけれどCIFAR-10の提供データは、各画像サンプルがchannel(3チャンネル)、row(32ピクセル)、column(32ピクセル)のフラット形式3*32*32=3072次元ベクトルの形で格納されている。Chainerでは画像を (nsample, channel, height, width) の形式にする必要があるためres

    ChainerによるCIFAR-10の一般物体認識 (1) - 人工知能に関する断創録
  • KerasでCIFAR-10の一般物体認識 - 人工知能に関する断創録

    今回は、畳み込みニューラルネットを使ってCIFAR-10(2015/10/14)の一般物体認識をやってみた。以前、Chainerでやった(2015/11/8)のをKerasで再実装した。 これもKerasの例題に含まれている。このスクリプトでは、データ拡張(Data Augmentation)も使っているがこれはまた別の回に取り上げよう。 ソースコード:cifar10.py CIFAR-10 CIFAR-10は32x32ピクセル(ちっさ!)のカラー画像のデータセット。クラスラベルはairplane, automobile, bird, cat, deer, dog, frog, horse, ship, truckの10種類で訓練用データ5万枚、テスト用データ1万枚から成る。 まずは描画してみよう。 import numpy as np import matplotlib.pyplot a

    KerasでCIFAR-10の一般物体認識 - 人工知能に関する断創録
  • 畳み込みニューラルネットワークの可視化 - 人工知能に関する断創録

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

    畳み込みニューラルネットワークの可視化 - 人工知能に関する断創録
  • Kerasによる畳み込みニューラルネットワークの実装 - 人工知能に関する断創録

    前回(2016/11/9)はMNISTの数字認識を多層パーセプトロンで解いたが、今回は畳み込みニューラルネットを使って解いてみた。このタスクもKerasの例題に含まれている。ソースコードを見れば大体何をやっているかつかめそうだけどポイントを少しまとめておく。畳み込みニューラルネットワーク自体の説明は、参考文献に挙げた「ゼロから作るDeep Learning」の7章が非常にわかりやすいのでおすすめ。 ソースコード: mnist.py 4次元テンソルのチャネル位置 畳み込みニューラルネットでは、入力する画像の形状を保つために画像集合を4次元テンソル(4次元配列)、すなわち画像のサンプル数、画像のチャネル数(白黒画像なら1、RGBのカラー画像なら3など)、画像の縦幅、画像の横幅で入力するのが一般的。Kerasでは、4次元テンソルの各次元の位置がimage_dim_orderingによって変わる

    Kerasによる畳み込みニューラルネットワークの実装 - 人工知能に関する断創録
  • KerasでMNIST - 人工知能に関する断創録

    今回は、KerasでMNISTの数字認識をするプログラムを書いた。このタスクは、Kerasの例題にも含まれている。今まで使ってこなかったモデルの可視化、Early-stoppingによる収束判定、学習履歴のプロットなども取り上げてみた。 ソースコード: mnist.py MNISTデータのロードと前処理 MNISTをロードするモジュールはKerasで提供されているので使った。 from keras.datasets import mnist from keras.utils import np_utils # MNISTデータのロード (X_train, y_train), (X_test, y_test) = mnist.load_data() # 画像を1次元配列化 X_train = X_train.reshape(60000, 784) X_test = X_test.reshap

    KerasでMNIST - 人工知能に関する断創録
  • Kerasによる多クラス分類(Iris) - 人工知能に関する断創録

    今回は、機械学習でよく使われるIrisデータセットを多層パーセプトロンで分類してみた(ありがち)。Irisデータセットのクラスラベルは3つ(setosa, versicolor, virginica)あるので前回までと違って多クラス分類になる。短いプログラムなので全部載せてポイントだけまとめておこう。 ソースコード import numpy as np from sklearn import datasets from sklearn.model_selection import train_test_split from keras.models import Sequential from keras.layers.core import Dense, Activation from keras.utils import np_utils from sklearn import pre

    Kerasによる多クラス分類(Iris) - 人工知能に関する断創録
  • 1