複数画像をKerasのVGG16で特徴抽出してk-means++でクラスタリング

VGG16, VGG19, ResNet50, InceptionV3など、 ImageNetで学習済みのモデルがKerasで使える。 物体認識だけでなく特徴抽出にも使えるので、 複数画像をVGG16で特徴抽出して、これをk-means++でクラスタリングしてみた。 なお複数画像は、ハワイで撮影したフラ…

listやarrayからPandas DataFrameを作成

カラム名をkey、listやarrayをvalueにして辞書を作成して、DataFrameに突っ込むとできる。 import numpy as np import pandas as pd def make_df_from_list_and_array(): col1 = [0,1,2,3,4] col2 = np.array([5,6,7,8,9]) df = pd.DataFrame({'col_list':co…

Pythonでディレクトリー内から特定の拡張子のファイルを取得

listdirを使ってディレクトリー内のファイルを取得し、リスト内包表記を使って条件付きでファイルを読み込む。 if文を変えれば拡張子に限定されない。 例えば、接頭語を指定するとか。 import os def get_target_files(dir_path='./image_dir/'): files = [f…

Python-OpenCVで動画をフレーム分割して画像として保存

動画をフレームに分割して画像として指定したディレクトリーに保存する操作をまとめた。 動画を読み込んで、フレームごとに存在を確認して、確認できれば画像として保存する、という手順。 引数は適宜変えてください。 import os import shutil import cv2 d…

Pythonでディレクトリーの削除と作成

処理中、一時的にディレクトリーを作ることが多いので、以下に操作をまとめた。 引数にディレクトリーパスを渡して、ある時は削除して、ない時は作るという仕様。 # coding: utf-8 import os import shutil def delete_and_make_directory(dir_path='./image…

TensorFlowからKerasに乗り換えてみた

モデル設計などの際に、TensorFlowのコードが長くなるので自分でラッパーを書いていたのだが、 ざっとKerasを調べてみたら、ラッパーが必要ないくらいシンプルに書けるし、 前処理などモデル設計以外のツールも充実しているようだったので、 KerasでCIFAR10…

PythonでData Augmentation

Pythonで画像の左右反転、回転、拡大を行ってみた。 Data Augmentationに使えるかなと。 左右反転 scikit-imageだけで実現したかったのだが、APIを見つけられなかったのでOpenCVで実装。 でも3つの処理の中で最も簡単に書けた。 ちなみに第2引数を1ではなく…

scikit-imageを使った画像の平行移動

scikit-imageという便利なライブラリーを見つけた。 画像の平行移動が2行で実装できたので、以下に示す。 import skimage as ski from skimage import io from skimage.transform import rescale def test(self): # Lennaさんの画像を読み込み img_raw = ski…

損失関数がNaNになる問題

TensorFlowでDeep Learningを実行している途中で、損失関数がNaNになる問題が発生した。 Epoch: 10, Train Loss: 85.6908, Train Accuracy: 0.996, Test Error: 90.7068, Test Accuracy: 0.985238 Epoch: 20, Train Loss: 42.9642, Train Accuracy: 0.998286…

ResourceExhaustedErrorの原因

TensorFlowで学習していると、訓練データ数が大きい場合、たまにResourceExhaustedErrorが出る。 Windows 10では、以下の内容が表示される。 ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[37800,32,28,28] [[N…

Python3でcPickleのエラーを回避する

CIFAR-10を読み込もうとしたら、Python2で動いてたcPickleがPython3では動かない。 import cPickleと書けばImportError: No module named 'cPickle'と吐き、 d = cPickle.load(f)と書けばUnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in posit…

CIFAR-10の取得と整理

MNISTの識別モデルをDeep Learningで上手く学習できたので、次の対象としてCIFAR-10を選んだ。 TensorFlowを使うと、学習が上手くいくように加工してくれるみたいだが、今回は一次ソースからデータを取得する。 CIFAR-10の取得 まず、CIFAR-10 and CIFAR-100…

TensorFlowでmodelを保存して復元する

modelの保存と復元は、それぞれ以下のようにシンプルな設計で行える。 Save a model saver = tf.train.Saver() saver.save(sess, '../model/test_model') Restore a model saver = tf.train.Saver() saver.restore(sess, '../model/test_model') 本記事では…

遺伝的アルゴリズムによるナップサック問題の最適化

以前、 遺伝的アルゴリズムの入門的なOneMax問題を解いた。 testpy.hatenablog.com 今回は、これよりも少し複雑なナップサック問題を解く。 ナップサック問題とは Wikipedia によると、ナップサック問題とは次のような問題である。 ナップサック問題は、計算…

Pandas.DataFrameをdicts in listに変換する

dicts in listからDataFrameを作成することはよくあるが、 DataFrameをdicts in listにしたい時がたまにある。 df.to_dict('records')を実行するだけで良いのだが、 このシンプルなコードを良く忘れるのに記事にした。 入出力がまったく同じdicts in listで…

Pandas.DataFrameの複数カラムの同時ソート

多分100回ぐらい調べてるので、いい加減覚えるために、記事を書いてみた。 ランダム生成したxとyについて、各々降順、昇順で同時にソートする。 import pandas as pd data = [{'x': random.randint(0, 10), 'y': random.randint(1, 5)} for i in range(10)] …

ラベルをOneHotでエンコードする

Deep Learning、と言ってもTensorFlowしか使ったことないけど、 ラベルがnx1(nはレコード数)の行列の場合は、OneHotにエンコードする必要がある(下図)。 scikit-learnのOneHotEncoderで、一発でエンコードできるのだが、 nx1の行列をnxm(mはラベルの値…

遺伝的アルゴリズムによるOneMax問題の最適化

OneMax問題とは、[1,0,0,1,0,1,1,1,1,0]のように0/1からなる数列の和を最大化する問題のこと。 答えはすべて1の数列と自明だが、これを最適化アルゴリズムの1つである遺伝的アルゴリズムで解く。 遺伝的アルゴリズムとは、このような数列を遺伝子と見立て複…

DeepLearningの学習曲線をmatplotlibで可視化

TensorBoardのEventsによる学習状況の可視化 を行ったが、今後いろいろとカスタマイズしたくなると思い、matplotlibで可視化することにした。 今回もFizzBuzz問題を例に扱う。詳しくは、Deep Learning入門としてのFizzBuzz問題を参照。 精度とコストの記録 …

TensorBoardのEventsによる学習状況の可視化

TensorFlowに学習状況を可視化するTensorBoardというツールがあるのだが、 コスト関数と精度を可視化してみたかったので使ってみた。 実装 Deep Learning入門としてのFizzBuzz問題 のモデル学習のメソッドをベースにしている。 コメント# Logging data for T…

Deep Learning入門としてのFizzBuzz問題

FizzBuzz問題とは何か。 こちらから引用させてもらう。 Fizz-Buzz問題の例はこんな感じだ。 1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合に…

Pythonの並列処理

最近Pythonの並列処理をよく使うのでまとめておく。 基本形 並列処理したいメソッドを別に書いてPoolから呼び出す。 multiprocessing.cpu_count()はシステムのCPU数を返す。 僕の環境では4。デュアルコアなのでスレッド数だと思う。 import multiprocessing …

TensorFlowによる精度計算の流れを追う

accuracy = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(Y, 1), tf.argmax(Y_, 1)), tf.float32)) Yをニューラルネットワークの出力層、Y_をその正解ラベルとした場合、学習モデルの精度を計算するとき、 TensorFlowでは上記ようにAPIを組合せて書くことがあ…

jsmでYahooファイナンスのデータを片っ端から取得してMongoDBに保存する

はじめに jsm(Japanese Stock Market)という Yahooファイナンスをクロールして株関連データを取得できるライブラリーがある。 Brand、Finance、Priceデータが取得できるので、東証一部に絞ってデータを片っ端から取得するコードを書いた。 インストール pip…

ReactのListとKey

ReactでList(ObjectのArray)を描画する際、mapを利用して各Objectの項目をセットする。 var data = [ {id: 1, author: "Pete Hunt", text: "This is one comment"}, {id: 2, author: "Jordan Walke", text: "This is *another* comment"} ]; var CommentLi…

React + Flask + Python + MongoDBで作るRSSリーダー

これまで2回に渡ってReactについて学んできた。 testpy.hatenablog.com testpy.hatenablog.com 僕は普段、Pythonを使って機械学習やデータ解析のコードを実装してるのだが、 Webアプリ化したいな、できればReactで実現できたらいいな、と思うことが度々あっ…

Reactチュートリアル入門: Pythonサーバーサイド連携編

チュートリアル | React がなくなったようで。。良いチュートリアルだったのに。。 まあとりあえず、前回は クライアントサイドのみでWebサイトを表示したので、 今回はサーバーサイドで取得したデータをクライアントサイドに渡して表示させる。 とは言って…

Reactチュートリアル入門:クライアントサイド編

チュートリアル | React(何故か2016-10-23時点ではNot Found) を理解しながら写経すると、Reactで簡単なWebアプリが作れるようになる。 しかし、僕自身もそうだが、テンプレートを使ったWebアプリしか作ったことしかなく、 Reactを理解したいという人向け…

Atomがフリーズしたときの対処法

macOS Sierraにアップデートしたら、"Editor is not responding"となったので、その対処法をメモに残しておく。 手順 Finderのメニューバーから、[移動] > [フォルダーへ移動...]と選択 テキストボックスに<~/.atom/storage>を入力して[移動]ボタンをクリッ…

Python製プログレスバーを3行で書く

for文の中に標準出力を書くと、ターミナルが文字で埋め尽くされるので回避したいが、 for文の中身が重くて無反応になるのも困る。 なのでプログレスバーを書けば良い、という結論に至るわけだが、 さくっと色んなfor文に書きたいので、3行で書く方法を説明…

Luhnの要約アルゴリズムの後処理

これまでLuhnの要約アルゴリズムの 前処理として基本的な自然言語処理を、 本処理としてテキストの各文のスコア付けを行った。 今回は後処理として要約テキストとして表示させる。 要約テキストは、スコア付けされた文を選択することで生成される。 ここでは…

Luhnの要約アルゴリズムの本処理

Luhnの要約アルゴリズムの前処理の続き。 記事本文を"。"で分割して文のリストにし、さらに英語を小文字化したのがnormalized_sents(以下、sents)だった。 ここでは、分割された各文がどのようにスコア付けされるかを見ていく。 文を単語に分割する 今回は…

Luhnの要約アルゴリズムの前処理

入門 ソーシャルデータ ―データマイニング、分析、可視化のテクニック作者: Matthew A. Russell,奥野陽(監訳),佐藤敏紀(監訳),瀬戸口光宏(監訳),原川浩一(監訳),水野貴明(監訳),長尾高弘出版社/メーカー: オライリージャパン発売日: 2011/11/26メ…

簡易的な日本語ストップワードの取得メソッド

それほど厳密に調査した訳ではないが、NLTKのコーパスには日本語のストップワードが存在しないようで、多くの人は SlothLib を利用している、という印象をWebから受けた。 SlothLibのように単語ベースでストップワードを定義している一方で、 IBM Content An…

MeCab-Pythonで分かち書きと形態素解析

MeCabでwakatiとchasenを使うと、それぞれ分かち書きと形態素解析ができる。 これらの結果を利用しやすくするために、前者は単語のリスト、後者は単語と品詞のセットのリストとして取得できるようにした。 分かち書き まずはMeCabの使い方から。最初は分かち…

新規リポジトリー同期のためのGitHub Desktop

GitHub Desktopを使って、GitHubで作った新規リポジトリーをローカルと同期させるための手順をまとめた。 手順 ローカルでファイル作成 GitHubでリポジトリー作成 GitHubのリポジトリーにファイルをアップロード GitHub DesktopでGitHubのリポジトリーをクロ…

GIGAZINEの記事をPythonでスクレイピング

前回、 GIGAZINEのRSSをDBに保存した。今回はソースから本文を抽出してDBに保存する。 urllib2でソースを取得 リンクからソースを取得するには、urllib2.urlopen()を使うのが早い。 articleのlinkを渡す。取得したソースは、idをファイル名にして保存する。 …

GIGAZINEのRSSをPythonで読み込む

毎日読んでいるGIGAZINEをなんとかもっと効率的に読めないかと常日頃思ってる。 とりあえず、PythonでRSSだけでも読み込んでみようとした記録を書いておく。 feedparserでRSSを取得 feedparserを使うとRSSから記事を取得してくれる。 各記事については、次の…

PythonからMongoDBをCRUD操作

MongoDBはHomebrewで、pymongoはpipでインストールすれば使える。 Create 前半は定型文。 datebaseとcollectionは、client.my_database.my_collectionでも作れる。 でも、のちのち名前を自由に付けたくなると思うのでStringを使った。 データはjsonライクな…

Homebrewがアップデートできない時の対処法

しばらくHomebrewを使っていなくて、mongodbを使うために久々にコマンドを打ったらエラーが出た。 $ brew update /usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter…

python-firebaseでCRUD操作

Python経由でFirebaseのDBを操作することができるので、CRUD操作の方法をまとめた。 インストール pipでrequestsとpython-firebaseをインストール。 python-firebase 1.2のチュートリアルだと、requestsのバージョン指定がある。 でも僕の場合、既にインスト…

FirebaseのApiKeyとAppIDはHTMLソースにコピペしてもセキュア

FirebaseのWebアプリ作成チュートリアルでは、ApiKeyやAppIDなどの情報をhtmlソースにコピペすることなっている。 これらの情報が公開されることに少し抵抗があったので、焼け石に水だが、これらの情報は別のjavascriptファイルにして、 htmlから呼び出す仕…

Firebase入門に最適な記事とリアルタイムデータベース体験

Firebaseとは?から簡単なWebアプリをホスティングサーバーにデプロイするまでは、 Firebaseの始め方が分りやすかった。 入門はこれだけ読めばOKだと思う。 リアルタイムデータベース 自分でも同様のアプリを作って、Firebaseの最も大きな特徴でリアルタイム…

Macでnpmを使う

Firebaseを始めようとしたら、npmコマンドが見当たらない、と言われ出鼻をくじかれた。 $ npm install -g firebase-tools -bash: npm: command not found 調べてみたら、Node.jsの管理ツールとのこと。 Pythonでいうところのpipみたいなものか、と理解して、…

ネット切断頻度が高くなってきたので、ルーターのファームウェアをアップデートした

Netflixを見ていると、たまに字幕が現れなくなることがあった。原因は、ルーターの不具合でネットが切断されていたためで、これは一度ルーターの電源を落として再起動させることで解決できていた。しかし、最近は1日数回と頻度が高くなり、とても快適なイン…

AtomのMarkdown Previewをgithubっぽく表示

Markdown Previewを使いたくてAtomを入れたのだが、mdファイルのテーマそのままだったので、githubっぽく表示させるために以下の設定を行った。 設定 Atom > Preferences > Packages Input 'markdown-preview' to textbox and Enter Click 'Setting' button …

AtomをSublime Textっぽく使うための設定

いま使ってる Sublime Text と同じような環境になるよう Atom を設定した。パッケージなどの詳細は参考文献を参照。 インストールしたもの Packages minimap file-icons highlight-line atom-beautify linter term3 highlight-selected tag Japanese Wrap sh…