「software_development」カテゴリーアーカイブ

機械学習用のTensorFlowというソフトをMac(OS X El Capitan)に入れた

機械学習用のTensorFlowというソフトをMac(OS X 10.11 El Capitan)に入れた。

このあいだUbuntuのノートPCに入れていたのだけど、そのノートPCのOSを入れ替え作業をするので、その間に代わりに使うため今度はMacBook Airに入れることにした。

インストール方法は、公式ページに書いてある。
(TensorFlowのバージョンは、現在0.8。今後バージョンが上がるとインストール手順も変わってしまうので注意。)
→ TensorFlow — Download and Setup
続きを読む →

機械学習名古屋 第3回勉強会(ディープラーニングその1)に行ってきた

機械学習名古屋 第3回勉強会(ディープラーニングその1)に行ってきた。
20160416_141754
・勉強会の概要
1. 「深層学習」読書会
 教本として、「深層学習」の最初から3章までを読む。 
2. TensorFlow ミニ・ハンズオン
 TensorFlowの公式チュートリアルのMNIST For ML Beginnersを少し変えて、
 3層のニューラルネットワークをTensorFlowで作って解いてみる。
 → ハンズオン資料
3. Julia紹介
 → Juliaの紹介
という内容だった。
講師は@antimon2さん。
続きを読む →

機械学習用のTensorFlowというソフトをPC(Ubuntu)に入れた

機械学習用のTensorFlowというソフトをPC(Ubuntu)に入れた。

TensorFlowは、Googleが作っていて、Python言語で使う拡張ライブラリとして提供されている。
Windows版Pythonで動く物は提供されていないので、UbuntuのPCにインストールする。
自分のPCのUbuntuのバージョンは64bit版の14.04で、そこに入っているpythonのバージョンは2.7だ。

インストール方法は、公式ページに書いてある。
(TensorFlowのバージョンは、現在0.8。今後バージョンが上がるとインストール手順も変わってしまうので注意。)
→ TensorFlow — Download and Setup
続きを読む →

機械学習の勉強を始める前に

機械学習の勉強を始める前に、自分の昔(30年くらい前)の知識の整理をする。

大学の研究室で、同じ研究室の同級生がニューロを卒業研究で研究していた。
それを少し聞いただけなので、知識としては古いし、正確には分かってないと思う。

まず、ニューロ(ニューロコンピュータ、ニューラルネットワーク)は、脳細胞(ニューロン)の働きを模した素子を多数ネットワーク状に結合して演算する演算器である。
人間の脳のように(?)学習させることにより、学習させたとおりの演算結果を出力するようにトレーニングすることができる。

素子のニューロンは、こんな感じに細胞体本体(soma)とシッポ状の部分(axon)からできている。
→ ニューロン 画像 – Google検索

image1
1つのニューロン素子は、近傍の他の複数のニューロン素子にくっついている。

脳全体で3次元的にニューロン素子が組み合わさってネットワークを形成している。

これを数学的なモデルで表して、コンピュータでシミュレーションする。
続きを読む →

LLVM-IR(LLVM中間コード)用コンパイラの改良を考え中

LLVM-IR(LLVM中間コード)用コンパイラの改良を考え中だ。

・C言語で書いているのを、C++で書き直す?
 yaccないしbisonを使って作っていので、そのためC言語で書いている。
 うまくラッパーとか作ってC++で書き直したらどうだろうか?
 既存のそういうラッパーもありそうなので、それを流用すればいいのかもしれない。
 うまくオブジェクト/クラスに切り分けて作るにはどうするのかちょっと悩む。

・yacc(bision)だけではなく、lex(flex)を使ってみる?
 上記のC++化にも絡んでくる話だが、基本的にはC言語でのコンパイラ開発用に作られたツールなので、C++化しようとすると使いにくい。

・LLVM-IR用コンパイラ以外も統合する?
 以前作ったJavaバイトコード出力版のものや、.NET中間言語MSIL(CIL)出力版のものがあり、コードの半分くらいは共通になっている。
 統合して、1つのコンパイラで3種類に対応という形にしてしまったほうがいいのかもしれない。
 少なくとも、共通部分は整理して分離したほうがよさそうだ。

LLVM-IR(LLVM中間コード)用コンパイラの作り方 その11

前回の続き

配列変数の実装について、書くのを忘れていた。

10 DIM A(10)
みたいにTinyBasicで配列宣言をしたときに、LLVM-IRでそれに対応したコードを生成する。
通常の変数の場合は、最初に出現した時に生成するのだが、配列はDIM文で宣言が必要という仕様だ。

  %_A0 = alloca [11 x i32], align 4

というように11個の32bit整数のメモリ空間を割り当てる。
10個で無いのは、A(0)~A(10)まで11個だからだ。
続きを読む →

LLVM-IR(LLVM中間コード)用コンパイラの作り方 その10

前回の続き

INPUT文の実装について。

10 INPUT A
みたいなINPUT (変数)という構文を実装する。

入力を促すためのプロンプト表示として”?”を出力する。
これは前回のPRINTと同様にコード出力すればよい。

そのあとは、C言語のgets関数をcall命令で呼び出して、文字列を入力し、atoi関数で整数に変換する。
セキュアなコードではないのだけど、手抜きをして作ったのでこんなもので。
そして、そのatoiの戻り値をstore命令で変数%aのメモリに格納する。

まとめると、このようになる。

  %1 = call i32(i8*,...)* @printf(i8* getelementptr inbounds([3 x i8]* @.2, i32 0, i32 0)) nounwind
  %2 = call i8* @gets(i8* getelementptr inbounds ([1024 x i8]* @buf, i32 0, i32 0)) nounwind
  %3 = call i32 @atoi(i8* getelementptr inbounds ([1024 x i8]* @buf, i32 0, i32 0)) nounwind
  store i32 %3, i32* %a ,align 4

続きを読む →