verilog書く人

自称ASIC設計者です。どなたかkaggle一緒に出ましょう。

Windows 7 32bitにXGBOOSTをインストール

 

環境:Windows 7 32bit

Visual Studio 2010 Express

Python 2.7

 

いろいろとショボい環境にてKaggle界のロトの剣ことXGboostを漸くインストールできましたのでメモ。


64bitの方がらくだと思います。

また、XGBOOSTはWindows 32bit環境では正式サポートはされていません。Linuxに移る、OSを64bitにする、といったより賢明な選択肢もあります。今ならWindows 10にすれば無料で64bitに移れます。その点をご理解の上で以下はお読みください。

続きを読む

SOINNで手書き数字MNISTをクラスタリングしてみた

最近ちょいちょいニュースで見かけるようになったSOINN株式会社の機械学習アルゴリズムSOINNを試しました。

 

コードはこちらのtrain_mnist.pyです

 

 

SOINNとはSelf-Organizing Incremental Neural Network(自己増殖型ニューラルネットワーク)の略で、クラスタリング(データ群の中から、近しいもののグルーピングを行う)などに使われる機械学習アルゴリズムです。

 

続きを読む

JavaのTreesetをPythonで

「できらあ!!」

「え!!同じデータ構造をPythonで!?」

 

というわけでJavaのTreesetに当たるデータ構造がPythonで欲しくなったので、自分で実装してみました。

 

treeset.pyをコピーして使ってください。

 

Treesetはsetのように、重複が存在しないデータ集合ですが、setと違い、初期時にデータがソートされます。また、新しい要素が追加されるたびに、二分木探索によって適切な位置に挿入されます。

使い方は例えば、こんな感じ。

from treeset import TreeSet

# 初期化時に重複要素は消える、またソートが行われる ts = TreeSet([3,7,2,7,1,3]) print(ts) >>> [1, 2, 3, 7]
# 4を加えると、3と7の間に挿入される ts.add(4) print(ts) >>> [1, 2, 3, 4, 7]

 

インデックスによる取得、要素を指定してリムーブもできます。

 

# 三番目の要素を取得
print(ts[2])
>>> 3
# 最後の要素を取得
print(ts[2])
>>> 3
# Treesetに7があれば消去
ts.remove(7) print(ts) >>> [1, 2, 3, 4] ts.pop(
2)
# インデックスをpop
print(ts) >>> [1, 2, 4]

 

中身はシンプルでbisectモジュールを使って、適宜、中身のデータをソートしているだけです。

 

from treeset import TreeSet

class TreeSet(object)

def __init__(self, elements):
self._treeset = []
for element in elements:
self.add(element)
    def add(self, element):
# 要素が既に存在しなければbisect.insertで適切な位置に挿入
if element in self._treeset: continue
self.add(element)
bisect.insort(self._treeset, element)

 

よかったらお試しください。

雑記chainerエンジョイ勢のためのトラブルシューティング

chainerで遊んでいてつまづいたところのメモ。

インストール編、動作速度編、ランタイムエラー編、動作するけど学習結果がうまくいかないよ編の四つです。

続きを読む

chainerで気軽にスケールできる事前学習器付きニューラルネット生成

のためのコードを書きました。

 

やりたいこと

1.スケーラブル/コンフィギュラブルなニューラルネット生成

ニューラルネットでは難しい問題を解かせるためには中間層の数を増やす必要があります、

 

chainerでは普通は↓こんな風にハードコーディングして層を増やしていきますが、

import chainer.functions as F
h1 = F.dropout(F.relu(self.model.l1(x)), train=train) h2 = F.dropout(F.relu(self.model.l2(h1)), train=train) h3 = F.dropout(F.relu(self.model.l3(h2)), train=train) FunctionSet(l1=F.Linear(784, 100), l2=F.Linear(100, 100), l3=F.Linear(100, 10),


そうではなく、[784,100,100,10]と配列を食わせるだけで、
784次元の入力層、100次元の第一中間層、100次元の第二中間層、10次元の出力層という風にネットを生成し気軽に層数、次元数を変えながら解析が進められるようにします。

続きを読む

PythonだけでRaspberry piのGPIOピンをALT0に設定するための話

raspberry Pi2を最近いじっているのですが、GPIOピンからクロックをチップに供給したいことがありました。

そのためには、例えばGPIOピン5を通常の入出力ではなく、ALT0 (alternative function 0)に設定する必要があります。

他にもクロック出力を設定できるピンがありますが、詳しくはraspiに搭載されているARMプロセッサであるBCM2835のデータシートを参照してみてください(102pくらい)。↓

https://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf

 

結局色々調べたのですが、Pythonだけで完結できず、こちらのページ↓を参考にしてcプログラムでクロックを出力することに成功。(感謝!)

こじ研(Raspberry Pi)

 

しかし、データ取得・解析にはPythonを使っていたので、できれば動いているコードはPythonだけで統一したいなあと思い、必要なライブラリを実装しました。

 

そのために、RPIOライブラリのカスタマイズを行います。

ただし、私が使っているのはraspberry Pi2なのですが、現在RPIOはraspberry Piに対応していない模様。raspberry Pi2でも使えるようカスタマイズされた

tylerwowen/RPIO · GitHub

を改造し、ALT0への対応を行います。

 

■成果物

できました。フォーク元にプルリクエストを投げましたが、どうなることやら無事速攻でマージされました、感謝。

 

 

■インストール、つかいかた

raspberry Piターミナル上で

 

git clone https://github.com/fukatani/RPIO.git

git clone https://github.com/tylerwowen/RPIO.git

cd RPIO

python setup.py install

 

とうち、ここで完了と思いきや、なぜか私の環境では

 

f:id:segafreder:20151220003925p:plain

 

dist-packagesに未解凍のファイルが置かれます(左下)。シュール。

 

なんででしょうね。前世の行いでしょうかね。知ってる人、教えてくださいね。

しょうがないので、手作業で解凍してやりインストール完了です。

 

例えばPythonスクリプトにて

 

import RPIO

RPIO.setup(5, RPIO.ALT0)

 

とすると、5ピンからGPCLK1(大体20MHz)がでます。嬉しいです。

 

ちなみにGPCLKは波形がグチャグチャでそれなりに高周波ノイズが激しいので、クロックの波形を直で突っ込むとSPIなどの波形がゆがむことがあります。最悪、通信が失敗し、かえって来たデータが信用できなくなるかもしれません。

そういう場合はクロックの後ろに抵抗(100ohmくらい?)つけてみましょう。

高周波成分が除去されて、通信が成功するようになるはずです。

 

なんか今ハードウェアエンジニアっぽいこといってしまった、、、

 

■追伸

うーん、RPIOの一部テストが通りません。フォーク元も。Pi2はピン配変わったからかしら。

raspberry Pi用のTravis CIがあったらいろいろはかどるのになー。

やる気があるひと修正してみましょう(人まかせ)。