「Pythonと僕」の話。

目次。

Javaの話をしたので、Pythonの話を。正直に言うと、あんまりPython好きではないが。(けど、最近はよく使う)

blog.sun-ek2.com

 

いろんな話をごちゃごちゃ書いたが、個人的に一番大事なところは、「ハッカーになろう (How To Become A Hacker)」。時間の厳しい方は、そこだけでも。。。

 

 

↓English version.

blog.sun-ek2.com

 

この文章を読んで、面白い!役に立った!...と思った分だけ、投げ銭していただけると嬉しいです。

ofuse.me

 

 

【宣伝】ギターも歌も下手だけど、弾き語りをやっているので、よければ聴いてください。

www.youtube.com

 

 

Pythonとは?

f:id:sun_ek2:20181118141701p:plain

Pythonは、プログラミング言語の一種。アイコンが可愛い。個人的にPythonのアイコンは、ものすごく好き。Pythonは、日本語でニシキヘビやけども、ニシキヘビ感がない。ニシキヘビのゆるキャラ。

 

Pythonは、プログラミング言語の中では、簡単な部類に入ると思う。初心者におすすめ。簡単でありながら、かなり実用的。元々、人気のある言語だったが、近年(?)、Pythonがディープラーニングを始めとした機械学習関連領域を制圧したことにより更に人気が爆発。

 

Pythonは、遅いだなんて言われるけれども、Pythonのコードの裏では、秘密裏にC系(C言語、C++)で書かれたプログラミングコードが走っているので、実は遅くない。(といってもPython単体は遅いと思う)

 

Python自体は、ごちゃごちゃした機能がなくて、シンプル。ただ、その分、必要な機能を外部ライブラリに委託している気がする。(ライブラリは、簡単に言うと便利なプログラムの集まりのこと)外部ライブラリには、独自の書き方みたいなものがあって、Pythonの文法のみならず、使用する外部ライブラリの独自ルールも覚えないといけないので、「あああああ」ってなってしまう。

 

また、Pythonは、動的型付け言語。(データを入れる箱には、数字であっても、文字であっても何でもかんでも入れていいです、何が入っているか、後で調べましょう言語)Javaを始めとした静的型付け言語(箱の中には、数字、文字といった特定のデータしか入らないようにあらかじめ制限しておきましょう言語)に慣れ親しんだ人が、Pythonで型に関するエラーを出すと、彼ら(僕もそうなんやけども)は、「あああああ」ってなってしまう。

 

生物系界隈の人々が最近、「プログラミング言語、身につけないとやばくない?そうだ、みんなでPythonやろう」って言っているような気がする。

 

 

 

Python遍歴。

高校時代

僕がPythonに出会ったのは、高校2年の頃。Javaに敗北した後。今は、Pythonの3系が主流やけども、僕が始めた頃は、2系が主流だったのでPython 2の勉強をした。Javaは、どうして始めたか覚えていないけれど、Pythonは覚えている。Pythonを始めたきっかけは、僕にとって重要なので、この後、独立に見出しを作って、そこに書こうと思う。

高校時代は、上の本を図書館で借りて読んだ。(上の画像は3系版だが、実際にはこの本の2系版で勉強した)この本に限らず、技術評論社の「スタートブック」シリーズは、全くプログラミングやったことがない人が読むのに最適だと思う。前に言ったCASLⅡは「アセンブリ言語 スタートブック」で勉強した。

 

ただ、入門書を読んだっきり、Pythonでプログラムを書くことはなかった。…大学院生になるまでは。。。

 

大学院時代

僕の所属している研究室は生物系。その生物系の研究室が所属しているのは、情報系の研究科。謎。ただ、この謎のおかげで、情報系の講義が取れた。取った講義の一つが「機械学習」。機械学習の初回の講義のときに「講義中のスライドにあるコード、課題のプログラミングで使用する言語は、Python」と言い渡されたので、再びPythonの勉強開始。

 

買った本は、オライリージャパンの「入門 Python 3」。

この本を選んだ理由は、オライリージャパンの本だから。オライリージャパンのプログラミングの本は、Pythonに限らずたくさんある。リアルな動物の絵が書かれてある表紙が特徴。本屋に行って、プログラミングの本が置いてあるところに立ち寄れば、すぐにリアルな動物たちに出会える。昔からずっとこのリアルな動物たちに興味があった。しかし、今までそのリアルな動物たちと触れ合うことはなかった。せっかくなので、とリアルなニシキヘビに手が伸びたわけである。(と思ったが、学部3年の冬にオライリージャパンのディープラーニングの本を中途半端に読んでいるのだった。。。忘れてた)

 

最初に断っておくと、この本は「入門 Python 3」という名前であるが、初心者向けではないと思う。というよりもオライリージャパンのプログラミングの本は、大体、初心者向けではないような気がする。(かなり偏見混じり)といっても、入門書の次に読む本としては最適。取り扱っている内容が幅広く、ちょっとした辞書代わりになる。後、この本は、ちょくちょく小ネタを挟んでくるので、勉強しながらニヤッっとしたい人におすすめ。

 

 

開発したプログラム。

高校時代、Pythonの勉強をしたが、特にプログラムはPythonで書かなかった。以下のプログラムは、大学院に入ってから。

 

英単語の難易度を算出するSVM

機械学習の講義の課題。SVMは、サポートベクターマシンの略。この課題には、scikit-learnという機械学習のライブラリを使った。英単語と難易度が組みになった2万個のデータをSVMに学習させるというもの。もちろん英単語と難易度だけじゃ、学習できないので、自分で英単語の難しさを定義して訓練データを作らなければならない。(例えば、単語の長さとか、音節の数とか)

 

「検索エンジン(Googleとか)の検索数が少ない単語ほど、難しい英単語である」という仮定のもと、2万単語分の検索数を集めるプログラムを書いたらまあまあうまくいった。

 

SVMの課題であったが、提出したプログラムのほとんどはスクレイピング(Webサイトから情報を抜き出す技術)のコードで構成されている。

 

画像を認識するCNN

機械学習の講義の課題。CNNは、畳み込みニューラルネットワークの略。よくディープラーニングって言われている。数万個の画像データを学習させて、新たな画像を200カテゴリー中のどれかに分類するというもの。

 

プログラムを書いたはいいけれども、惨敗ですわ。正答率は、5%くらい。

今回の課題には、googleが開発したTensorFlowという機械学習のライブラリを使った。

使ったはいいけども、使いこなすにはまだまだ。TensorFlow難しい。。。

 

うまくqueue runnerを使えなかった。queue runnerは、CNNが食べやすいように巨大なデータセットからランダムに小分けされたデータセット(バッチ)を作ってくれるやつ。(損失関数の局所解から抜け出せません問題も解消してくれる。気になる人は、確率的最急降下法とかの話を読めばいいと思う)結局、自分でqueue runnerっぽい動作をするコードを書いた。

 

学習後に保存したパラメータ値をテスト用のCNNにうまくセットすることができなかった。結局、CNNに学習させた後、パラメータ値を保存せず、間髪入れずに課題で与えられた画像データを分類するという暴挙で結果自体は得られた。

 

そもそも、手持ちのPCのスペックでは、CNNに訓練データを学習させることができなかった。(メモリが少なすぎるのでPCが固まる)結局、人のPCを借りてCNNを学習させるはめに…。

 

こんな感じで惨敗なので、もう一度TensorFlowの勉強をし直して、もっときちんとしたプログラムが組めるようになりたいと思う。Chainerもいいな。(Chainerは、日本産のニューラルネットワークのライブラリ)

 

いやいや、そもそもよ。何はともあれ、まずは、モデルを学習させるときにフリーズしないPCが欲しい。。。

 

研究データ解析用のプログラム

具体的にどんなことしているのは、言ったらいけないような気がするし、言っても伝わらない気がするので、内緒。まあ、単なるデータ解析。Pythonを使うとこういうプログラムは、楽に書けてよいよい。グラフとかすぐ描けるし。

 

オンラインプログラミングスクール。

最近は、オンラインプログラミングスクールがどんどん誕生している。オンライン相談会や体験レッスンなどが用意されているので、色々なところを見て回って、自分に合うプログラミングスクールを見つけて、そこで勉強してみては。

 

 

 

 

ハッカーになろう (How To Become A Hacker)

How To Become A Hacker: Japanese

この文章は、僕がPythonを始めたきっかけ。この文章におすすめの言語としてPythonが紹介されていた。そしてこの文章が高校時代、最も影響を受けた文章。

 

念のために言うと、本来「ハッカー」に悪い意味はない。天才的なプログラマなどに対して使う最上級の尊称が「ハッカー」。他人のコンピュータに不正アクセスなどする犯罪者は、「ハッカー」ではなく、「クラッカー」(cracker = 破壊者)。多分、犯罪者が「私は、天才プログラマ(=ハッカー)だ」って言ったのを一般人が「ハッカー=犯罪者」って誤解したものが広がったんだと思う。

 

この文章によると、ハッカーとクラッカーの違いは、、、

ハッカーはものをつくります。クラッカーは壊します。

 

特に文章中の「ハッカーの心構え」は、コンピュータの分野のみならず、あらゆる分野に応用できる汎用性の高い心構えなので目を通すのがおすすめ。あらゆる分野で最高水準に達した人・モノには、所謂”ハッカー精神”が見られるとのこと。

 

ハッカー精神は、研究者にも深く通じる。僕も研究者として、ハッカー精神を大切にしたい。

 

 

この文章を読んで、面白い!役に立った!...と思った分だけ、投げ銭していただけると嬉しいです。

ofuse.me

 

ブログランキング・にほんブログ村へ
にほんブログ村