読者です 読者をやめる 読者になる 読者になる

ytbilly3636’s 研究備忘録

機械学習,Python,ガンダムなど

紺ちゃんはいけないことをしてしまったのか

こんにちは.

私は週に数本の深夜アニメを観る習慣があるのですが,
昨日観た『うらら迷路帖』というアニメの八占(第8話)に気になることがあったので, そのことについてお話します.

うらら迷路帖 公式ホームページ|TBSテレビ

ネタバレを含むのでご注意ください

まずは,簡単な設定から.

このアニメは「うらら」と呼ばれる占い師の女の子達のお話です.
うららは神様の力を借りて占いをすることができます.
うららにはいくつかルールがあるのですが,
その中に神様について占っては(知ろうとしては)いけないというルールがあり,
もし占ってしまえばうららの力を失ってしまいます.

ストーリーは4人の見習いうららを中心に展開されていきます.

第8話は,女の子たちが泉に遊びに行くところから始まります.
※いわゆる水着回でした.
そんな中,1人の女の子「紺」が「いけないこと」を試してみたいと申し出ます.
「いけないこと」とは「泉中術」という占いのことでした.
これは泉の中に2人のうららが潜り,力を合わせて占いを行うというもので,
強力な力を使うことができるが,なんらかの危険が伴う占いのようです.

「千夜」と「紺」は2人の力を合わせて泉中術をやってみることにしました.
泉中術は成功したかのように思われましたが,ここで問題発生.
2人は泉の中でお化けに出会ってしまい,あわてた「紺」は溺れてしまいます.
※その後普通に助かります.

なんやかんやあって一行は泉から帰るのですが,
紺は泉の中で出会ったのはおばけではなくて神様で,
泉中術を通じて神様のことについて占ってしまったのではと心配になります.

そんな紺を心配した他の3人は紺を元気づけ,
最終的に紺が占いをできるかどうかを試して,無事成功.
紺はうららの掟を破ってない,めでたしめでたしと言うお話でした.

さて,前置きが長くなってしまいましたが,
私が気になったのは紺が占いをできるかどうかを確認したという部分です.

占いができるかどうかを確認=出会ったのが神様かどうかを確認

ということは間接的に神様について占いで調べようとしたことになります.
これはうららのルールに反するのではないかと疑問に思った次第です.

ストーリーでは,紺が見たのは神様じゃなかったからセーフという判定でしたが,

Q.これが神様ですか?
A.違います

という問答を繰り返せば,
いつかは神様を探り当てることができてしまうかもしれないので,
神様の判定は少しゆるいのではないでしょうか.

つまり,紺がお化けが神様かどうかを疑った時点で,
なんらかの占いを行えばうららのルールを破ってしまうことになるので,
結果がどうであれ占いを行うことはできなくなります.
うららとして詰みです.

と,なんやかんや申し上げましたが,
このアニメはそういう部分を気にしながら観るアニメではなく,
可愛い女の子のうららとしての日常を楽しむものなので,
はっきり言って紺ちゃんが掟を破ったのどうのはどうでもいいことです.

ちなみに私はノノちゃんが好きです.
以上です.

Raspberry PiにChainerを入れた話

小ネタです.

先日Raspberry PiにDeep LearningのライブラリChainerをインストールしました. Raspberry PiのスペックではDeep Learningは全く実用的ではありません.
ただのお遊びです.

私が持っているRaspberry Piはおそらく初期のモデルBです.
確信がないのは貰い物だからです.

インストールはpipで簡単にできます(すぐに出来るとは言っていない).

$ sudo apt-get install python-pip
$ pip install chainer

Chainerがインストールできたら(数時間かかりました),早速MNISTのベンチマークを走らせます.

import chainer
from   chainer import datasets

train, test = datasets.get_mnist()

#中略

学習が始まらない…….

Chainerの場合,get_mnist()を初めて呼ぶとデータのダウンロードから始まります. (正確には「./chainer/」下にデータが有るかどうかを見る.) ダウンロードされたデータはnpz形式で「./chainer/」下に保存され, 次回からはそこから読み出されます. つまりデータセットの準備に時間がかかりすぎているのでした.

今回はその初回のダウンロードにどれだけ時間がかかるかを測ってみました.

結果:3767.43秒

結論は「やめておいたほうが良い」です. Raspberry Piのスペックやインターネット回線の環境にも依りますが,とにかく遅いです. どうしてもRaspberry PiでMNISTを読み込みたいのなら, 普通のパソコンでget_mnist()を実行してダウンロードしてから, Raspberry Piの「./chainer」フォルダに直接入れてしまいましょう.

NumPyを使うと幸せになれるかも1: データの読み込み

はじめに

こんにちは.

私は普段Pythonでプログラミングをすることが多いです.
Python以外はほとんど使いません.
私がPythonを使うのは

  • 楽にコードが書ける
  • CaffeやChainerなどの深層学習用のライブラリをPythonから使える
  • そもそも他の言語がよくわからない
  • なんだか名前が可愛い

といったところが理由です.

一方で,私が所属している研究室のPython使いは少数派です.
そのような状況で私が困ったことは全く無いのですが,

Pythonをこう使えば,もっと幸せになれると思うんだけどなぁ.」

と,周りの人を見て思うことは多々有ります.

今回の記事では,NumPyを使うと幸せになれるかも」と題しまして,
Pythonの行列演算ライブラリNumPyを使って,
幸せになれるかもしれない方法を紹介できればと思っています.

※注意※
この記事は初心者向けですので,
普段からPythonを使ってらっしゃる方にとっては退屈なお話だと思われます.
Python使いからのツッコミもお待ちしております.

numpy.save()とnumpy.load()

今回の記事で紹介したかったのはこの2つのメソッドです.

想像がつくと思いますが,
その名の通りnumpyの配列を保存・読み込みができます.
それぞれ具体的な使い方は以下の通りです.

import numpy as np

# numpy.ndarray
array = np.array([1, 2, 3])
print array

# 配列の保存
# 引数はファイル名, 配列名
np.save('array.npy', array)

# 配列の読み込み
# 引数はファイル名、返り値が配列
new_array = np.load('array.npy')
print new_array

注目すべき点はその読み込みの速さです. 私の場合,画像処理や機械学習の対象として,大量の画像を取り扱うことがよくあります. この時,画像を読み込んで,画像処理やら機械学習の計算をさせるといったプログラムを作成するのですが,この画像を読み込むフェーズにどうしても時間がかかってしまいます.

そこで,numpy.save()とnumpy.load()の出番です. プログラムの初回起動時には画像を素直に読み込んでおき,numpy.save()で保存しておきます.次回起動時には初回起動時に保存したファイルを読み込むようにします.

その読み込みの速さを確認していただくために,素直な画像の読み込みとnumpy.load()による読み込みの実行時間を比較してみましょう.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import numpy as np
import cv2, os, time

# 複数の画像を読み込んでnumpy配列にする関数
def imgsread(path):
    # ディレクトリ中のファイル名のリストを取得
    filelists = os.listdir(path)
    print 'number of files: ', len(filelists)
    
    # 読み込んだ画像をリストに追加
    imgs = []
    for f in filelists:
        img = cv2.imread(f)
        imgs.append(img)
        
    # リストをnumpyに変換
    return np.asarray(imgs)


# 画像の読み込み時間の計測
s1 = time.time()
array1 = imgsread('hogehoge/foo/bar')
print 'imgsread()', time.time() - s1

# 画像をnpy形式で保存
np.save('array.npy', array1)

# npyファイルの読み込み時間の計測
s2 = time.time()
array2 = np.load('array.npy')
print 'np.load()', time.time() - s2
number of files:  60000
imgsread() 0.231508970261
np.load() 0.0085620880127

小さい画像で実験したので,あまりありがたみは感じられませんでしたが,npy形式で保存させておくメリットはご理解いただけたかと思います.

おわりに

いかがでしたでしょうか. 既にご存知の方もいらっしゃったかもしれませんが, numpyを有効活用して幸せになれる方法が少しでも布教できたら何よりです・

また,numpyにはnumpy.loadtxt()というcsvファイルを読み込んでくるメソッドがありますが, この場合もcsvからではなく,npyファイルにしてからnumpy.load()で読んでくる方が速いみたいです(要検証).

それでは次の記事でお会いしましょう. さようなら.

ガンダムエクシアダークマター1

こんにちは.

私は月曜日から土曜日まで,各日7~8時間程大学で過ごすのですが,
常に集中して研究に取り組んでいるわけではありません.
(もちろん論文提出前などは除きますが…….)
研究に行き詰まったり疲れてくると,
ガンプラを組み立てて気分転換をするのです.

2週間ほど前に,これまで組み立てていたガンプラが組み上がりましたので,
新しくこちらのガンプラを購入いたしました.

f:id:ytbilly3636:20170219145102j:plain

ガンダムエクシアダークマター

こちらのガンプラは素組み+スミ入れで仕上げていこうと思っています.
パーツの色が濃いので,ゲート処理に気を遣いそうです.

作業の進捗があり次第,また更新いたします.
失礼致します.

初投稿です

はじめまして.

私はとある地方で,大学院生をやっているものです.
この度は自分の研究の備忘録を作成したいと思い,ブログを開設いたしました.

興味のあるテーマ(?)は

です.日記も書きます.

至らぬ点もあるかと思いますが, よろしくお願い申し上げます.


I am a graduate student in Japan.
I start a blog to note about my research.

I am interested in …

In this blog, I will keep a diary.

Nice to meet you.