数値解析系

2017年10月24日 (火)

ディープラーニング用USBデバイス”Movidius Neural Compute Stick”が入荷

なんと、私が秋葉原に行った日に、こんなものが売られていたんですね。

ディープラーニング向けのUSBデバイス「Movidius Neural Compute Stick」が店頭入荷 - AKIBA PC Hotline!

Intelが先日発表した”Movidius Neural Compute Stick”です。

PCやRaspberry Pi 3に挿してやると、ディープラーニング用の演算を加速してくれるっていう夢のようなデバイスです。

お値段は10800円。発表された時(Intelがディープラーニングに特化したUSBデバイスを発売: EeePCの軌跡参照)の価格は79ドルといってましたから、円レートや手間賃を考えると、まあまあなお値段では。

ただ、使い方がよくわかりませんね。どういうコードやフレームワークを使うのか?以前の記事ではCaffeに対応と書いてましたけど、それ以上のことがよくわかっておりません。

ハードの活用には、ソフトの支援も必要。もう少し事例やコードが公開されれば、使ってみたくなりますね。

Raspberry Pi3 Model B ボード&ケースセット 3ple Decker対応 (Element14版, Clear)-Physical Computing Lab

2017年10月13日 (金)

”けものフレンズ”動画顔検出器をディープラーニング+OpenCV物体検出で作る(転移学習&メモリ不足対策)

ディープラーニングネタはしばらくぶりですが、最近個人・業務において水面下でいろいろとやってたので、まとめて載せます。

ベースとなるのはこちらの記事。

けものフレンズの動画からフレンズさんの顔を検出するやつを無理やり作ってみた: EeePCの軌跡

Kemono

このときから教師データも検出器も変わってませんが、コードの方をいろいろ工夫したので、そちらを紹介します。

また、物体検出の方のコードを公開してなかったので、そちらも載せておきます。

さて、私がTensorFlowによるディープラーニングを行うにあたり、2つほど問題がありました。

ひとつは“転移学習”、もう一つは”メモリ不足”。

この2つを解決したコードを作成しました。以下のリンクからダウンロードしてください(右クリックして”名前を付けて保存”)。

・学習用コード

cnn_train_56_d.py

・物体検出用コード

rcnn_app_56_a.py

他にも”アニメ顔検出器”が必要です。

入手元:http://anime.udp.jp/data/lbpcascade_animeface.xml

他に用意するものは、”けものフレンズ”の顔データ(1キャラ当たり30枚以上)と動画(360p以上)が必要です。別にアニメであれば、けものフレンズでなくてもいいです。

もし題材を人の顔(アイドル等)にするのであれば、OpenCVに付属する顔検出器(haarcascade_frontalface_default.xml)等をご使用ください。

これらを動かすために、ひとつのフォルダにこの2つのコードを入れて、以下のフォルダを作っておいてください。

Kemono_dl01

「data」「face」「model」の3つです(「movie」は不要です)。

「data」フォルダの中に、以下のように教師データ(フォルダごとに分けたけもフレ各キャラの顔画像)を入れておきます。

Kemono_dl02

私は37種類、計2236枚集めました。

著作権が絡むので、さすがにこの教師データを公開するわけにはいきません。動画から頑張って切り出してください。この辺りの記事が参考になるかと。

TensorFlowで「けものフレンズ」の”フレンズ判別器”作ってみた: EeePCの軌跡

また、私はこのコードをTensorFlow 1.2.0、Windows用64ビット版Anaconda 4.2.0、これにOpenCVをpipまたはcondaコマンドでインストールした環境で使っております。

では、一つ一つ紹介します。

機械学習の実行

まずは”学習”から。

この”cnn_train_56_d.py”というコードは、先の”転移学習”に対応しました。

以前、けもフレ判別器を作ったときは、フレンズさんの画像が増えるたびに1から学習しなおしてました。

が、既に学習器があるのに、一人フレンズを学習させるのもいちいち最初からやり直し

ものすごい時間がかかるし、ラベルが増えると収束性が悪くなります。最悪、学習が全く進行しなくなることもあります。

そこで、ラベルが追加になっても既存の学習器を初期値にして学習をさせることで、大幅に機械学習の時間を削減する&収束しやすくするというテクニックがあります。

これを”転移学習”といいます。

このコード、普通の新規学習から転移学習まで、以下の3パターンの学習ができるように作りました。

・ 新規学習

dataフォルダにラベルごとのフォルダを作り、画像を入れます。

そのあとに以下のコマンドを実行。

> python cnn_train_56_d.py

これは今までの実行形式ですね。

・追加学習

この言葉の表現が正しいかどうかわかりませんが・・・フレンズの数は同じ(ラベルを増やさず)で、画像データのみを増やした場合は、まず「model」フォルダに学習器(model_end.ckpt.data-00000-of-00001、model_end.ckpt.indexのように「○○.ckpt.data-00000-of-00001」「○○.ckpt.index」の2つのファイル)を入れておきます。

そして、以下のコマンドを実行。

> python cnn_train_56_d.py ○○.ckpt

これで、追加の学習がはじまります。

サイクル数が足りなくて、損失値(loss)がまだ大きいときに更にサイクルを回したくなった時もこれを使います。

・転移学習

けものフレンズ2期がはじまって「わあい!新しいフレンズさん!」が増えてしまって、さらにフレンズを追加したい(ラベルを増やしたい)ときに使います。

まず「data」フォルダに新しいラベルのフォルダと画像データを追加。

そのあとに、以下のコマンドを実行します。

> python cnn_train_56_d.py ○○.ckpt 1

「追加学習」のコマンドの最後に「1」がついてます。

実は、後ろは「1」でなくても、例えば0でも、誕生日でも、彼女の名前でもOK。

要するに、何か書いてあると転移学習が動くようになってます。ダサいコードですね。すいません。

コードを見てもらうとわかりますが、最終段付近の結合層、Softmax以外の「tf.name_scope」の後ろの名前には「A_」というのがついてます。

この「A_」が付いた名前の層の部分のみの重み値を読み込むため、ラベル数が増えてもエラーが出ません。最後の2層だけ真っさらにして学習を行うという仕組みです。

まったく新規でやるよりも早く計算ができるだけでなく、おそらく画像が増えると学習が進まなくなりますが、転移学習だとかなり強引に学習を進行させることができます。

もう一つの問題、「メモリ不足」問題についてです。

我が家のGeForce GTX1050Tiはメモリが4GBしかありません。

ところが、教師データが4000枚近くになるとメモリ不足で落ちるという事態に陥りました。

で、いったいどこでメモリを食っているのかと思って調べてみると、どうやら各Step(= epoch)ごとに「精度(accuracy)」と「損失(loss)」を計算するところでメモリを大量に使用していることが判明。

どうやら、accuracy、lossを計算する際にtrain用の画像データ(全画像の9割)をいっぺんに放り込むため、大量のメモリを消費してしまうようです。

これを解決するために参考にしたのは、以下のサイト。

メモリの少ないグラフィックボードで MNIST を動かす - walkingmask’s development log

このaccuracy、lossを分割(ここでは50分割)して計算し、それぞれ平均、合計を取ります。

具体的には、以下のようなコードがあるはずです。

            num_test = len(train_label)
            sum_accuracy = 0
            sum_loss = 0

            for i in range(0,num_test,50):

                sum_accuracy = sum_accuracy + sess.run(acc, feed_dict={
                    images_placeholder: train_image[i:i+50],
                    labels_placeholder: train_label[i:i+50],
                    keep_prob: 1.0})
                sum_loss = sum_loss + sess.run(loss_value, feed_dict={
                    images_placeholder: train_image[i:i+50],
                    labels_placeholder: train_label[i:i+50],
                    keep_prob: 1.0})
                train_accuracy = sum_accuracy /(num_test/50.0)
                train_loss = sum_loss

            line = "step , %d , training_accuracy , %g , loss , %g"%(step, train_accuracy, train_loss)
            print (line)

私のところで実行するとちょっとaccuracyの値が大きめ(1を超えることもある)になりますが、まあ大体わかるので、これでいいかなぁと。

これで劇的にメモリを削減できました。我が家のGTX1050Tiで計算できる画像枚数が飛躍的に増加しました。

会社では112×112の1.2万枚の学習(CPUで実行)をやらせたら、16GBメモリが飛ぶ事態に遭遇。メモリが32GBくらいないと動かないため困り果ててました(しばらく128GBのマシンで実行してました)が、これで16GB機でも余裕で動いてくれるようになりました。

メモリ少なめのグラフィックボードで実行したい方は、是非参考になさってください。

なお、教師データ用の画像のラベル付けツール”AnnotationTool.exe”も少し改良したものを置いております。

AnnotationTool.exe

以前でも紹介したVOC2007構成のアノテーションファイルを出してくれるツールですが、このコードに合わせて正方形にカットできるようにしました。

ただ、アノテーションファイルを作っても、そのままではこのコードで使えないため、ラベルごとに画像を切り出してくれるツールも作りました。

anocut.py

この辺を使うと、画像ファイル集めが少し楽になります。

物体検出

続いて「物体検出」です。

コマンドは以下。

> python rcnn_app_56_a.py

(動画データはあらかじめどこかから調達してご用意ください。コード中の”kemo07.mp4”にその動画ファイル名を入れます)

これで、次のような動画が生成されるはずです。

Kemono

ただ、「lbpcascade_animeface.xml」のアニメ顔検出器では、一部のフレンズさん(ハシビロコウなど)が検出できません。

OpenCVの機能を使って自分で作ることもできますが、私はいいものが作れませんでした。

OpenCVでLBP特徴を使った”物体検出器”を作成してみた: EeePCの軌跡

画像データが”けもフレ”だけでは足りませんでしたね。

ただ、かばんちゃんとサーバルちゃんはわりとちゃんと認識します。

さて、これで第2期の準備完了!新しいフレンズにも対応できる画像認識器にするぞ!

なんて思ってましたけど、昨今のあの監督解任騒ぎ。

画像認識以前の問題で、存亡が危ぶまれております。大丈夫でしょうかね?なんとかしてほしいものです。

けものフレンズBD付オフィシャルガイドブック (6)

2017年10月11日 (水)

日経ソフトウェア11月号買ってみた

近所の書店が改装されたので、ちょっと覗きに行ったらつい買ってしまったのがこちらの本。

Img_1855

なんていうか、AI系の記事が多数あります。

Img_1856

付録はこの冊子とDVD-ROMの二つ。

Img_1857

中でも気になったのはこちら。なんとお手軽人工知能が付録です。

Img_1858

どうやら、画像認識系ですね。中身はきっとディープラーニングを使っているものと思われます。

Img_1859

まず読んだのはこちら。TensorFlow+Kerasの機械学習入門。

Img_1860

プログラムも載ってますが、どちらかというと教師データ集めの記事が中心といった感じ。

ディープラーニングやってみるとわかりますが、このデータをどうやって集めて、どうやって学習させるかで性能が大きく変わります。この辺りのノウハウはなかなか手に入りません。私も苦労してます。

Img_1861

ここでは画像水増しの方法なども含めて、教師データの作り方を紹介してますね。

ただ、私が本当に知りたかったのは、どちらかというと”検出”だったのですが、そちらは載ってませんでした。

Img_1862

続いて、付録の人工知能”ちの”の使い方が載ってました。

GUIで画像の学習、認識ができるようです。

犬、猫の画像を学習させて、さらに”シマウマ”の画像を追加していけば、どんどんと”賢くなる”人工知能が作れる、というのが売りのようです。

私もちょうど”転移学習”てのをやってますけど、あれを気軽にできる仕組みのようですね。

早速試したかったんですが・・・動作条件が”Windows 10 Pro”または”MacOS Sierra”となってました。うちのWindows 10 Homeは非対応。残念。

そういえば、先日隔月刊になったばかりの日経ソフトウェア。

その分、今回のように中身を充実していただけると嬉しいですね。

日経ソフトウエア 2017年 11 月号

2017年9月 1日 (金)

その発想はなかった!?撮った写真がインスタっぽいかTwitterぽいかを判別する学習器

私もTensorFlowを独自データを使って学習器を作るようになって、かれこれ1年ほど経ちましたけど、こういう学習器というのは全く発想になかったですね。

撮った写真がInstagramっぽいかTwitterっぽいか判別するツールをTensorflowで作ってみた「わりと精度高い」「AIの無駄遣い(笑)」 - Togetterまとめ

撮影した写真が、Instagram向きか、Twitter向きかを判別してくれる学習器を作った猛者が現れました。

ということは、教師データはもちろんInstagramとTwitterで話題になったものを集めたものと思われます。でないと、らしさが現れないと思われます。

ちなみにこの猫の写真、左がインスタっぽい猫、右がTwitterっぽい猫だそうです。

正しいかそうでないかは、判別が難しいですね。

しかし、好みというか明文化できない指向というものにあえて分類できる学習器を作るという試みは、発想としては素晴らしいと思います。

実は人間社会、こういうあいまいというか言葉に表せないものを分別するという作業が多くて、そういうものは自動化できないため人手がかかるという実態があります。

こんな役に立たない微妙な差の違いを判別できる技術が蓄積されれば、少子化で労働力不足になる時代にきっと役立つ何かが生まれる気がします。

私もこういうネタ探してみようかな。でも、あまり思いつかないですね。

こういう差が、判別できるようになれば万々歳でしょうか?

そういえば、私は初代ガンダム好きですが、Zガンダム好きの友人に大した違いはないといわれて「違うのだ~!」って言ったことはありますね。こだわりィ・・・ですかねぇ。

できるポケットこれからはじめるインスタグラム Instagram 基本&活用ワザ

2017年8月31日 (木)

中国のBitcoinマイニング工場

こういうものが今、中国では流行っているようです。

高騰し続ける仮想通貨Bitcoinを掘る世界最大のマイニング工場に潜入、2万5000台のマシンを酷使する採掘現場の恐るべき実態に迫る - GIGAZINE

Bitcoinをはじめとする仮想通貨のマイニング工場だそうです。

仮想通貨というのは、取引に膨大な計算を必要とするため、その計算に貢献してくれた分だけ仮想通貨が割り当てられるという仕組みがあります。これが”マイニング”(採掘)と呼ばれるもの。

ただ最近はちょっとやそっとマイニングしただけでは通貨が得られない。そこで、マイニング用のマシンを集約して”工場”として稼働するところが現れたようです。このBitmainという向上もその一つ。

ただ・・・私はこの仮想通貨採掘工場、すごーく違和感をかじるんですよね。

まず一つは、この工場は石炭火力による安い電力を使って稼働しているとのこと。

石炭火力って、要するにPM2.5の発生源ですよね?そんなものを使って仮想通貨を採掘する必要、あるんでしょうか?

それ以上に感じる違和感は・・・そう、この工場。何も作ってないんですよね。

ただお金を作っているだけという、経済原理に反した工場なわけです。

そりゃソフトウェアメーカーのように、データという形の製品というのは昔からありますが、Bitcoinというのはそれ自身で何かをしてくれるわけではありません。

それをただ作り出すだけの工場。

なんだか、すごい違和感を感じます。

私が古い人間ってことなんでしょうかね?

でも、お金というのは、本来何かの物、サービスに対して支払われるもの。

物々交換の効率の悪さをカバーするために設けられたシステムなわけです。

そのシステムにおける”手段”に過ぎないものを作り出すだけの工場。なんだか変な気分です。

私もGPU活用に興味があって、今はディープラーニングに手を出してますけど、仮想通貨のマイニングだけは手を出そうとは思いませんね。

上のような理由のためですが、こういう考え方って、間違ってますかね?

玄人志向 ビデオカード GEFORCE GTX 1080Ti搭載 GF-GTX1080Ti-E11GB/OC/DF

2017年8月29日 (火)

SONYがディープラーニング用開発環境”Neural Network Console”を無償公開

SONYが以前ディープラーニング用フレームワークを無償公開するといってましたが、このほど”Neural Network Console”が公開されたようです。

【 SONY発 】GUI の マウス ドラッグ&ドロップ で、直感的 に 深層ニューラルネットワーク の ネットワーク構成 を 構築 できる 統合開発環境 Neural Network Console を 無償提供開始 〜 パフォーマンス・チューニング を 自動最適化 する 機能付き - Qiita

かなり衝撃を持って受けとられているようですが、正直言って国産フレームワークはすでにChainerがあるし、世間ではCaffeやTensorFlow、Kerasがあるという状況での公開。

今さら感があるんですけど、どうなんでしょうね・・・

と思ってましたが。

このNeural Network Consoleは一つ大きな特徴があります。

それは、GUIのみでニューラルネットワークが組めてしまうこと。

こんな感じの画面でネットワークを組めるようです。

ある程度CNNなどを勉強したなら、Pythonなどをわざわざ覚えなくても画像認識などが組めるようです。

凄いですねぇ。ただ、コードが組めないとすると、画像認識後のアクションをどうやって記述するんでしょうか?

学習済みデータを、Pythonプログラムなどに持っていけるんでしょうか?それができれば無敵のフレームワークといえるかもしれません。

ちょっと気にはなりますね。もうちょっと事例がたまってきたら、ぜひ試してみたいですね。

はじめての人工知能 Excelで体験しながら学ぶAI

2017年8月26日 (土)

RNN(LSTM)で株価予測をやってみた(失敗)

最近音沙汰ないですが、地味にディープラーニングネタは進行中です。

今回は、ディープラーニングでも”RNN”(リカレント ニューラル ネットワーク)というやつにトライしてみました。

そもそもこのRNNってやつは何ぞや?ですが、誤解を承知で簡単にいうと”未来の時系列データを予測する手法”とでもいうんでしょうか。

CNNがある時間における画像認識をするための手法なら、RNNは時間で変化するデータを予測するという手法、ということです。

で、LSTMとは何ぞや?ですが。

”Long Short-Term Memory (Networks)”の略だそうです。

ロングでショート?というずいぶん矛盾した名前の手法ですが、これが時系列予測に革命をもたらした(大げさ)手法のようです。

詳しい説明は一つ目のリンクあたりを参照願いますが、すごく簡単に言うと「長い時系列データから特徴を取り出すために、どうでもいい特徴は忘れる」手法なんだそうです。

考えてみれば、人間もそうですね。

今までの人生で、すごく印象に残った出来事やトラウマ的なものはしっかり残ってるけど、どうでもいい出来事って本当にまったく覚えていないものです。

そうでなければ人間、いろいろなことを覚えていられないんでしょうね。

それにしても人間は、いいことばかりというより、悪いことの方がよく覚えているものですよね。私も思い出したくない黒歴史やトラブルほどよく覚えていてですね・・・

脱線しましたが、LSTMってのは、そういうものです。とりあえず、そういうことにしておきましょう。

さて、時系列データの予測なんて話を聞くと「株価が予測できるんじゃねぇ?」と思うのは人の業というもの。

そんな不純な動機で、RNNというのを体感してみました。

参考にしたのは、こちらのサイト。

RNNで来月の航空会社の乗客数を予測する:TFLearnでLSTMからGRUまで実装しよう - DeepAge

大元はこちら。

Time Series Prediction with LSTM Recurrent Neural Networks in Python with Keras - Machine Learning Mastery

コードは2つ目のリンクから入手しました。

さて、まずやらなきゃいけないのは”Keras”ってやつを導入すること。

TensorFlow(+Keras)がWindowsで簡単にインストールできた件 - Qiita

この辺のサイトを読むと

> pip install keras

で行けると書かれてますが、どっこいそうは簡単にはいきませんで。

scipyだかscikit-learnだがを入れろといわれます。

でこれがどちらかが”pip”コマンドでは入らなかったため、

> conda install scikit-learn

という感じに”conda”コマンドを使ったら行けました(自宅ではscikit-learnのみconda使いましたが、会社ではscipyあたりもcondaコマンド使わないと入りませんでした。理由は不明)。

あとは、matplotlibあたりも入れておきます。

> pip install matplotlib

あとは

> pip install keras

(”conda”の方がいい場合があります)

これで準備完了。

続いて、2つ目のリンク先にあるコードをテキストエディタで保存します。

◆「lstm.py」

# LSTM for international airline passengers problem with regression framing
import numpy
import matplotlib.pyplot as plt
from pandas import read_csv
import math
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
# convert an array of values into a dataset matrix
def create_dataset(dataset, look_back=1):
    dataX, dataY = [], []
        for i in range(len(dataset)-look_back-1):
            a = dataset[i:(i+look_back), 0]
            dataX.append(a)
            dataY.append(dataset[i + look_back, 0])
    return numpy.array(dataX), numpy.array(dataY)
# fix random seed for reproducibility
numpy.random.seed(7)
# load the dataset
dataframe = read_csv('international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=3)
dataset = dataframe.values
dataset = dataset.astype('float32')
# normalize the dataset
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)
# split into train and test sets
train_size = int(len(dataset) * 0.8)
test_size = len(dataset) - train_size
train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]
# reshape into X=t and Y=t+1
look_back = 1
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
# reshape input to be [samples, time steps, features]
trainX = numpy.reshape(trainX, (trainX.shape[0], trainX.shape[1] ,1))
testX = numpy.reshape(testX, (testX.shape[0], testX.shape[1] ,1))

print(testX , testY)
# create and fit the LSTM network
model = Sequential()
model.add(LSTM(4, input_shape=(1, look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=50, batch_size=1, verbose=2)
# make predictions
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
# invert predictions
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform([trainY])
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform([testY])
# calculate root mean squared error
trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))
print('Train Score: %.2f RMSE' % (trainScore))
testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))
print('Test Score: %.2f RMSE' % (testScore))
# shift train predictions for plotting
trainPredictPlot = numpy.empty_like(dataset)
trainPredictPlot[:, :] = numpy.nan
trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict
# shift test predictions for plotting
testPredictPlot = numpy.empty_like(dataset)
testPredictPlot[:, :] = numpy.nan
testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict
# plot baseline and predictions
plt.plot(scaler.inverse_transform(dataset))
plt.plot(trainPredictPlot)
plt.plot(testPredictPlot)
plt.show()

このとき使うデータ”international-airline-passengers.csv”は、以下のサイトから入手。

International airline passengers: monthly totals in thousands. Jan 49 – Dec 60 — Dataset — DataMarket

ここで”Export”タブから”CSV(,)”をクリックするとダウンロードできます。

あとは、以下のように打ち込んで実行。

> python lstm.py

さて、これを実行した結果はこちら。

6割くらいのデータを使って、残り4割を予測しています。

実際のデータが青、予測が赤。

ちょっとずれがありますが、おおむねいい予測ですね。

これはとある国際線の利用者数のデータのようです。実際は緑までのパターンより、需要が伸びたんでしょう。これが赤と青のずれの原因と思われます。

さて、上のコードの”international-airline-passengers.csv”てのを株価データに変えてしまえば、予測できるんじゃないか?

やってみました。

最近、妻が株を保有してて、その中の一つで吉野家HDの株を持ってるので、”吉野家HD”の株価のデータで予測させてみました。

ちなみに、株価データは以下から入手。

株価データサイト k-db.com

ここから吉野家HDの株価250日分(概ね1年分)を入手。

ただし、ここから入手したデータは、そのままだと下に行くほど過去になるCSVが得られるため、上下ひっくり返さないとおかしなデータになります。

やり方は、こちらを参照。

表の上下を入れ替える -エクセルで作成した表を、あとから見たら、「上- Excel(エクセル) | 教えて!goo

データは必ず2つ(2行)にします。

Yoshi_kabu00

こんな感じで保存。私は”終値”を使いました。

これを”yoshinoya.csv”とでも付けて保存。

先のコード中の”international-airline-passengers.csv”を”yoshinoya.csv”に変えて実行。

結果はこちら。

Yoshi_kabu01

おお!すごい!ぴったり予測できてるじゃん!!

ということはなくて、これは失敗事例です。。。

一体どこが失敗なのか?

LSTMのこのコードは「一つ手前のデータと、これまでのパターンから次の値を予測する」ことをやってます。

実はこの株価の場合、ただ単に一つ手前のデータをコピーして返しているだけ。よーく見ると、一つだけずれたデータになってます。

この先を予測するためには、最後の予測値を含んだ時系列データを使ってその次のステップを予測して、またこれを含んだデータを使って・・・というのを繰り返せばいいんですが、こういうパターンの時は”最後の値がずーっとフラットに吐き出されるだけのデータ”になってしまうようです。

要するに、彼は0~150までの学習データからパターンを見いだせなかったんですね・・・

考えてみれば、株価というのは外的要因が大きくて、決して基準となるパターンがあるわけではありません。

決算の傾向や企業買収の噂だけでなく日経○聞の飛ばし記事、マ○ゴミどもの印象操作報道、北朝鮮・トランプ氏のチャーハン合戦・・・などで株価って結構変動してます。

あまりに不確定要素が多すぎて、そのたびに妻が一喜一憂しておりますね。ほんと。見てて面白い・・・いや、なんでもありません。

そんなもののパターン予測をやろうなんて、どだい無理だったんでしょうかね・・・

sinカーブを予測させるというのは得意なようです。

LSTM で正弦波を予測する

さて、ここで痛感したRNN(LSTM)の活用法は以下。

・ 例えば生産機械などの異常検知

生産機械というのは、一定の間隔、決まったパターンで動作しているものが多いため、正常パターンを学習させれば、異常が起きた時には予測と実データのずれが発生。そこから”異常検知”をするらしいです。

・ 季節や時間周期で起こる現象の予測

先の国際線の利用客じゃないですが、ああいうある程度パターン化された現象というのはこのRNN(LSTM)手法で予測できるようです。

近似式を作って予測すればいいかもしれませんが、なかなかすべてのデータが定式化できるというわけでもないですし、右肩上がりな成長をしているものの場合はRNNの出番なのかもしれません。

他にも、CNNと組み合わせて画像の変化を予測するということもやられてるようです。具体的なプログラムコードを知りませんが。

・ 文書自動作成

これが今一番ホットな使い方の一つのようです。

単語の前後のつながりを学習して、決まった単語や画像認識結果から文書作り出すという者が作れます。

もっとも、そのためには相当な学習データが必要ですが・・・参考サイトを紹介しておきます。

LSTMで夏目漱石ぽい文章の生成 - Qiita

もうちょっと教師データがあって、もうふた工夫くらいすれば文章が作れるかもしれません。

自動翻訳にも、最近このLSTMが注目されてるっぽいですね。

ということを思い知らされたところで、一旦RNNの試行は停止状態。

株価予測がとりあえずダメだってことがわかったからモチベーションが落ちたというのは、多分気のせいです。

どのみち、私の周りに(私的、職場的に)ちょうどいい題材がありません。最後の文書作成が一番やってみたいですが、多分これが一番難易度が高いです。

いい活用術が見つかったら、もう少しコードをいじっていろいろやってみたいですよね。

・・・などと偉そうに記事書いてますけど、プロの方が見たら多分突っ込みどころ満載のはず。やり方や解釈等ご指摘あれば、ぜひコメント欄にお願いします。

パソコンで楽しむ 自分で動かす人工知能

2017年7月23日 (日)

Intelがディープラーニングに特化したUSBデバイスを発売

ディープラーニングといえば、学習も認識も高速演算が必要なためGPUなどがもてはやされておりますが。

IntelがCPU、GPUに次ぐ第3の選択肢といえるデバイスを発表しました。

Intelが激安1万円以下のUSB型ディープラーニング用端末「Movidius Neural Compute Stick」を発売 - GIGAZINE

このデバイス、どう見ても大きめのUSBメモリといった感じ。これが、かなり強力な”ディープラーニング用デバイス”なんだそうです。

クラウド前提ではなく、あくまでもエッジコンピューティングとして使うデバイスで、実際このチップを搭載したドローンなどがあるようです。

上の動画ではRaspberry Piっぽい小型コンピュータボードに接続している場面が見られますが、もしかしてRaspberry Pi自体の画像認識速度とかを上げられるんでしょうかね?

搭載されている”Myriad 2 Vision Processing Unit”というチップの演算速度は100GFLOPSとあります。演算桁数などが同じ条件ではないでしょうから直接比較にはなりませんが、Corei7 7700Kが大体200GFLOPSといわれてるので、結構な演算能力です。

使われているフレームワークはCaffe。TensorFlowではないんですね。まあ、老舗なフレームワークですし、妥当なところかも。

お値段はなんと79ドル。用途を考えるとかなり激安。

ちなみに複数個を接続して性能を上げることも可能だそうです。

認識だけでなく、訓練にも使えるでしょうかね?ハワイで22日から開かれる開発者会議CVPR2017で先行発売されてるそうです。

こういうのを見ちゃうと一つほしくなっちゃいますねぇ・・・一般向けはいつ発売されるんでしょう?気になります。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

2017年7月11日 (火)

AMD Radeonの実力は!?

最近アキバなどの電気街で、AMDのRadeon RX580/570あたりが売り切れ続出、その余波でGeForce GTX1060まで売り切れるという事態になっているようです。

数枚挿しじゃないと動かないゲームが出たわけでもなく、まさか急にディープラーニングが流行ったわけではなし、何故こんなに急にグラボが大人気になるのか?と思ったら、要するに”マイニング”需要だそうです。

マイニングで人気のRadeon RX 580に防塵ファン搭載のOCモデル、ASUS製 - AKIBA PC Hotline!

とくにRadeon RX580はコスパ最強なようで、百枚単位で購入されてるという話も。

ディープラーニングではNVIDIA製GPUがほぼ一強ですが、マイニングではいったいどれくらいすごいんでしょうか?Radeon。

そのRadeonの実力を垣間見る記事を発見。

仮想通貨 のマイニングにはRadeonがオススメ? GeForce GTX 1070とRadeon R9 390Xを比べてみた | しょぼんブログ

NVIDIA最新コアのGeForce GTX1070と、実質4世代前となるRadeon R9 390Xとを比較してますが、この両者、Bytecoinという仮想通貨のマイニングに関してはほぼ同性能だそうで。

ということは、最新版のRadeonだったらもっとすごいってことに。

RX 580は3万円台半ばらしいので、確かに安いですよね。GeForceならGTX 1060とほぼ同じ価格。

てことはこれを使ってディープラーニングをすれば・・・などと思うところですが、残念ながらいろんなディープラーニング用プラットフォームがRadeon対応したという話は聞きませんね。得手不得手があるようです。

それにしても、世の中ディープラーニングが大流行りですが、さすがに秋葉原のボード買い占めにつながるほどのブームとはいかず。なんだかちょっぴり、寂しいというか、なんというか。

HIS AMD RADEON RX580搭載ビデオカード HS-580R8LCBR オーバークロックモデル

2017年7月10日 (月)

Interface 2017年8月号は”ディープラーニング特集”

今月号の”Interface”は、みんな大好き(?)ディープラーニングに関する特集記事で満載です。

Img_1589

思わず本屋で見かけるや否や速攻で買いましたが、この雑誌は毎月25日発売。もうちょっと早く気づくべきでしたね。

Img_1604

Img_1590

目次だけでも気になる記事が満載です。

詳しくは雑誌を買っていただくとして、個人的に今月号のInterfaceの注目すべき内容は

・”ディープラーニング”の基礎

・ 画像認識以外の使い方

・ ”Chainer”の導入・使い方

の3点です。

”ディープラーニング”の基礎

Img_1591

まずディープラーニングに関する解説について。

実際の活用事例を紹介したこんなページから

Img_1598

「算数」でわかる簡単なディープラーニングの解説記事が載ってます。

Img_1599

もっとも「これが算数かよ!!」って突っ込みどころ満載な内容ですが、かなりわかりやすく書かれているのは間違いありません。

”ディープラーニング”最大の問題は、中身を理解するためのいい解説書籍・記事が少ないこと、いったい何ができるのかがわかりにくいこと、じゃないでしょうか。

このInterfaceは、その問題に十分こたえてくれる内容かと。

画像認識以外の使い方

Img_1595

ディープラーニングといえば、画像認識が最もメジャーな活用法。私もまさにこれに取り組んでいる真っ最中。

今月号のInterfaceでも、画像認識に関するコードが載せられてます。

なんと「きのこ」「たけのこ」を判別するという、あの紛争をさらに炎上することになりそうな内容。恐ろしい子・・・

そろそろ他のデータ処理方法も知りたいところと思っていたところですが

Img_1594

このInterfaceでは、音声データを教師データにする事例や

Img_1602

言語処理に関する記事まで出ております。もちろん、コード付きで。

いずれ画像以外の処理でも活用したいと思っていたので、これは役立ちますね。

”Chainer”の導入・使い方

Img_1596

今月号のInterfaceは”Chainer”を勧めてます。

日本発のこのディープラーニング用プラットフォーム、確かに日本国内では活用事例が豊富です。

ただ、Windows PCで使うにはインストール方法が煩雑そうでなかなか手が出せなかったんですが。

Img_1597

Windowsへのインストール方法も載ってますね、この記事。VirtualBoxを使うようです。

これからのAI技術として脚光を浴びているディープラーニングについてもっと勉強したい方や、会社で上司から「AIで何か作れ!」などと理不尽な要求をされているシステムエンジニアな方にはお勧めです。25日までしか売ってないので、早めの購入をお勧めします。

それにしても、Interfaceのディープラーニング系の記事はだんだんとレベル上がってきてますね。この分野に明るい編集者がいるんでしょうか?一方で日○Linux等は最近あまり進んでない様子。個人的にはInterfaceに注目してます。

Interface(インターフェース) 2017年 08 月号

より以前の記事一覧

当ブログ内検索

  • カスタム検索

スポンサード リンク

ブログ村

無料ブログはココログ