pandasのseriesをintへ変換

これからpointの値をとる

Seriesとなり,Intでは所得できない

valuesをつければNumpyのarrayとして取得できる。

AWSlambdaでkerasを動かす

AWSのlambdaはサーバレスアーキテクチャで非常に扱いがいいのですが、一つ難点があって、アップロードできるファイルサイズが限られていることです。
最大50MのZIPファイルまでなのですが、裏技を使って展開時に500M以上のファイルを使うことができます。

そのカラクリは、Lambdaの/tmp以下は500Mまで使うことができます。この領域に、Lambdaが起動するときにファイルをS3から読み込めば、非常に大きなライブラリが必要なプログラムも動かすことができます。
以下は、pythonにてkeras+tensorflow+opencvを動かすサンプルです。

ライブラリ準備

python3を使用します。
ライブラリは、あらかじめ、EC2でAmazonLinuxを使って作成しておきます。

requirements.txt

このlib以下にライブラリがインストールされます。

pycは削除しておきます。しなくてもいいですが。。。

これを全てLambdaの起動時に追加してもいいのですが、ロードが面倒になるので2つに分けます。

libを固めてS3にアップ

lambdaディレクトリ

lambda用のディレクトリに、先ほど分けたlib_otherのライブラリを入れておきます。
これ全部を入れてようやく50Mぐらいまでに収まります。

lambdaプログラム

lambdaのプログラムには少し工夫が必要です。
起動時に、S3から先ほどアップしたlib.zipをダウンロードし展開、ロードします。

lambda_functioy.py

こんな感じでコードを書きます。
Lambdaは一度起動すると、しばらくはインスタンスが残っているので、2回目以降に再度S3からダウンロードするのを防ぎます。

こんな感じで、500M以上のモジュールをつかったLambdaファンクションが作ることができます。

multivariate regressionをkerasで

複数出力の回帰をKerasで行います。

通常、回帰分析は複数の説明変数に一つの目的変数なのですが、これは、複数の目的変数を取ることができます。
multivariateとmultivariableの違いはこのあたりを参照のこと。

コードはこちらを参考にこんな感じ。

結果

ちゃんと学習できているようです

R.3.4.3にmxnetをインストール

mxnetのインストールがエラーになるのでその対処方法

環境

mxnetを使用する際に,インストール方法が公式サイトにも書いているのですが,
その方法ではインストール時にエラーが出ます。使っている環境がMacだからなのかもしれませんが。。

  • OS:MacOS 10.13.3
  • R 3.4.3 brewでインストールしたもの

この環境で下記コマンドでインストール

どうやらVersionがあっていないようでインストールできないようです。
ググっていろいろなやり方を試したのですがダメ。

対処方法

ここここの方法でようやくインストールできました。

opencv

まずOpenCVをインストール

openblas

OpenBlasも入れます

mxnet

最後にソースコードからダウンロードしてインストールします

確認

これでインストールが終わっています

これで使えそうです。多分。

リモートでJupyter Notebookをつかう

大学のサーバでどうしてもJupyter Notebookが動かしたいのでメモ。

経緯

データをSQLiteで管理しており,これのサイズが10Gを超え始めた。計算などは大学のサーバで行なっているのであるが,RやJupyterなどビジュアルなツールを使いたい時にはいちいちローカルのPCへSQLiteをコピーするのが大変。

以前Xサーバを使ったリモートでの起動を試したが,どうも使いづらい。
Macからだと,XQuartzをあらかじめMacにインストールしておき,
以下のSSHコマンドで接続し,

Jupyterを起動するだけ。

これで,リモートサーバでFirefoxが立ち上がり,MacのXQuartzで表示される。
しかしこれがいかんせん使いづらい。遅いし,サーバ側のFirefoxなので見た目も悪く,日本語入力も一苦労。

設定

Jupyter

まずはここを参考に設定する。

~/.jupyter/jupyter_notebook_config.pyを編集。ポートが8080が空いている場合には以下のように指定する。

R

Rも使いたいので,ここを参考にRを起動してインストール。

起動

起動時に現れるこれから,

以下のようにPCのブラウザのアドレスバーに打ち込めばOK

githubの仕様変更に対応する

昨日までちゃんとアクセスてきていたのですが,今日,git pushしようとするとエラーが発生。

ここに書いていました。SSLプロトコルはどうやら仕様から外れた模様。TLSにあげてくださいとのことです。

使っている大学のサーバのアプリケーションは古いモジュールが多く,OPENSSLもいまだに0.9.8のもの。相当古いです。。。

そこでインストールし直しますが,大学のサーバなので,ユーザ領域にインストールする必要があります。

環境

サーバcray スパコン
ユーザ領域/work/$USER

OpenSSL

ここを参考に,32bitモードでコンパイルします,これはいらないかも?

curl

git

vimでXML整形

xmllintをインストール

.vimrcの設定

~/.vimrc

OpenWnnの内部辞書解析

OpenWnnの内部辞書を解析したのでそのメモ

経緯

OpenWnnはオープンソースの日本語変換辞書でこの派生製品がそこそこ使われているようです。NicoWnnGというソースコードをダウンロードしていじりだしたのがきっかけ。

どうしても辞書に手を入れる必要があったので調べました。NicoWnnGだけで使うのであればJava側で辞書を持っても良かったのですが,速度や他への転用を考えて,内部辞書を解析することにしました。

オープンソースとは言いつつこの辞書に関しては,バイナリを16進数配列にしたものをソースコードにベタがきしたものしか公開されておらず,このバイナリ部分を自分で作るためのソースコードは見当たりませんでした。

10年くらい前のモバイルデバイスに使われていたらしく,その時に解析された結果がいくつかあり,このサイトを参考に,ソースとにらめっこしながらようやく解析が終了しました。

使っていないであろうコードも結構見受けられたのですがなんとか。多分100%わかっているわけではないのですが,とりあえずNicoWnnGに組み込んで動くところまでは終了しました。

仕様

ヘッダ
00000000-00000003:[NJDC]識別子
00000004-00000007:バージョン
00000008-0000000b:タイプ
0000000c-0000000f:データサイズ
00000010-00000013:extサイズ
00000014-00000017:max check用(使ってない?)
00000018-0000001b:maxlen check用(使ってない?)
0000001c-0000001f: 1c-1d:前品詞数,1e-1f:後品詞数
00000020-00000023:単語ブロックのアドレス
00000024-00000027:登録されている単語の数
00000028-0000002b:登録されている単語の数?
0000002c-0000002f:que size,データ領域の一つのブロックのバイト数
00000030-00000033:最後に編集した単語ブロックの位置, 未使用
00000034-00000037:Write Flag
00000038-0000003b:未使用
0000003C-0000003F:インデックス1のアドレス
00000040-00000043:インデックス2のアドレス

インデックス
インデックス1は読み、インデックス2は表記の昇順で、
単語ブロックの位置が2バイトずつ並んでいる
最後に2バイト00がついている

単語ブロック
00000000-00000000: 2bit fflag, 4bit mflag, 6-7bit type
00000001-00000002: 1-9bit 前品詞,10-16bit 読みバイト数
00000003-00000004: 1-9bit 後品詞,10-16bit 表記バイト数
00000005- :読み、表記が詰めて設定されている
文字コードはUNICODE

フッタ
[NJDC]識別子

変換方法

ソースコードはここに入れておきました。

writedic.cppが変換用プログラムです。
入力ファイルはタブ区切りで
よみ 表記
の順に並んでいることが必要です。

一ファイルは最大65535行まで。

作成したファイルをWnnJpnDic.hのdic_07_dataなどを作成し貼り付ける。
dic_dataにもdic_07_dataを追加。プログラムから出力されるサイズをdic_sizeの該当の場所にコピー。

コンパイル

コンパイルはAndroidStudioから行う場合には文字量によるがメモリが必要なので注意。AnroidStudioのメモリ量を増やしておく必要あり

 

こんな感じで内部辞書を新しくすることができました。

Pythonで誕生日計算

AmazonLinux(CentOS)にMPIを入れる

yumでインストール

パス追加

~/.bashrcに追加

python

ライブラリを追加

pyenv

.bashrcに追加 

python install

mpi4pyを導入

chainermn