素人が機械学習GANの実装を目指してPythonを学ぶ




機械学習の素人が、Pythonで機械学習を学ぶ過程を書いています。

機械学習を勉強しようと思った

Crypkoという人工知能(AI)がアニメキャラクターを描いてくれる、ブロックチェーンのプロジェクトがある。

これが面白く、いろんなキャラクターを描いてもらっていたらその仕組みが気になり調べてみました。

すると、GAN(Generative Adversarial Network)敵対的生成ネットワーク、という学習システムによるものと分かった。
GANは機械学習、ディープラーニングの方法の一つで、教師なし学習に分類されるものです。

教師あり学習は、例えばネコの画像と、これはネコという答え(タグ)を一緒与えることでネコの特徴を学習させるものです。
タグ付けは人が行うもので、時間とコストがかかるもののようです。

教師なし学習は、答え(タグ)を与えずに特徴を学習させるものです。
そのため、より多くの入力データが必要になります。

そこで、GANは入力データもコンピュータに作ってもらうことで学習を効率化します。

GANは生成する側generatorと、識別する側discriminatorが競争することで成り立つシステムです。
これは偽造者と警察に例えられます。
偽造者はより本物に近い偽造品を作ろうとします。
対して、警察は偽造品を偽物だと見破る精度を上げようとします。
偽造者が偽造品を作り、警察が見破る、さらに本物に近い偽造品を作る。
これを繰り返すことで、両者の能力が向上していきます。

先ほどのネコの学習を例にすると、結果的にGANのシステムは高い精度でネコの画像をネコだと判断できるようになりますし、本物に近いネコの画像を出力することもできるようになります。

GANは機械学習の分野でとても注目されているシステムです。

自分でも何か出来ないかな?と考えるとプログラミングをする必要があるのですが、機械学習の分野ではPython(パイソン)というプログラミング言語を利用するのが一般的なようです。

Pythonの勉強をする

Pythonはシンプルにコードがかける特徴を持ち、機械学習だけではなく、Webアプリ、デスクトップアプリ、組み込み、ゲームなど様々な利用に向いていることから世界的に注目されているプログラミング言語です。

私はC言語ならちょっと分かる程度なのですが、機械学習で何かやってみたいなぁと思いましたので、機械学習の勉強と合わせてPythonも勉強することにしました。
Pythonが機械学習でよく使われるのは、ライブラリが多くあるからだとか?

Pythonとは何かを知るならここがおすすめ
https://www.sejuku.net/blog/curriculums-python
侍エンジニア塾という神サイト。神サイト。
IT,プログラミングに関するあらゆる内容の記事があるため、迷ったら見る。
検索したら必ず上位に出てくるので、誰もがお世話になる。

Pythonのバージョン2.X.Xは3.X.Xとは完全には互換がないため、2.X.Xで作ったプログラムが3.X.X用の環境で動かないことがあるそうだ。
しかし、2.X.Xは2020年でサポートが切れるとのことで、今から始める場合は3.X.Xを選ぶべきです。

プログラミングの学習はここがおすすめ!
paizaラーニング https://paiza.jp/works
5分前後の動画を見ながら、その横でコードを書いて動作確認しながら学習ができる。
聞き取りやすく楽しいナレーション入りなので、時間を忘れて学習が進みます。
動画を見た後はすぐ演習問題に移ることができる。
ここで基本的なことは一通り学べます!

Pythonの開発環境
統合開発環境(IDE)のPyCharmが最もおすすめのようだ。
https://www.jetbrains.com/pycharm/

これは日本語化されていないのでこちらを参考に日本語化した。
https://qiita.com/y-sato19/items/46bc0f8c8f91f51564e0

1. http://mergedoc.osdn.jp/からPleiadesプラグインをダウンロード
2. 解凍後setup.exeを実行
3. 日本語化するアプリケーションからpycharmのexeファイルを選択
4. 日本語化するボタンを実行

 

ANACONDA?
https://qiita.com/gold-kou/items/dc991440e64f76f81b2f

Python学習

Pythonの練習を超効率的に!無料おすすめ学習サイト厳選6選


こちらでおすすめの6サイトが紹介されている。

機械学習の学習
大学時代には、知的制御というニューラルネットワークやファジィ制御、遺伝的アルゴリズムなどを機械制御に応用する
研究をしていましたので、

【保存版】Python機械学習のレベル別コンテンツ厳選7選

機械学習ライブラリ

現役エンジニアがよく使う!Python機械学習ライブラリ厳選9選

Pythonドキュメント
https://docs.python.jp/3/
https://docs.python.org/3/

【Chainer】DCGANでkeyキャラっぽいイラストの自動生成
http://akasuku.blog.jp/archives/67610046.html

 

機械学習にPythonが選ばれる理由

機械学習でPythonが主流になっている必然的な理由とは

Pythonはインタープリタ型と呼ばれる言語(スクリプト言語)
これはコンパイル型のように、実行ファイルを作成するコンパイルの手順なしにプログラムを実行できるもの
このため、プログラムの修正と実行を繰り返し行う実験的なプログラミングではPythonが適している。
コンパイル型の方が処理速度は速い。

しかしながら、PythonにはNumpyやScipyという数値計算を高速に実施できるライブラリがあるため、
コンパイル型と比べて遅いという部分も気にする必要がなくなったようです。

機械学習ライブラリ
TensorFlow
Caffe
Scikit-learn
Theano
Keras
Chainer
PyTorch
Pyevolve(遺伝的アルゴリズム/ニューラルネットワーク)
Deap(遺伝的アルゴリズム)
Edward(確率的プログラミング)

Jupyter notebook

データを高速に処理するためのPandas
データをアルゴリズムでより高度かつ高速に処理するためのNumpy

現役エンジニアがよく使う!Python機械学習ライブラリ厳選9選


https://qiita.com/jintaka1989/items/bfcf9cc9b0c2f597d419
https://qiita.com/jintaka1989/items/3b70b5c5541620536fa2

http://ibisforest.org/index.php?python

環境構築

TensorFlow(+Keras)がWindowsで簡単にインストールできた件 – Qiita
https://qiita.com/samacoba/items/207f2650ee60fe1de25a

kerasのインストールがpipでは入らなかった話 – mimikaki_kowaiのブログ

【2018年度版】TensorFlow 1.5のインストール方法を解説!【Windows 10】

https://qiita.com/isboj/items/3d62d7dc3f7a616de24e

https://qiita.com/agumon/items/4d7826c2c39d0af868bd

TensorFlowはanacondaの64bit版が必要

WindowsのAnaconda環境にTensorFlowをインストール

TensorFlowの導入
https://qiita.com/yossyyossy/items/bc6f077400b80593b2f1

https://qiita.com/FukuharaYohei/items/7540c29a4bdd028e117b
https://qiita.com/FukuharaYohei/items/d8f82c827e0bae70096a

PycharmでTensorFlor

学習の流れ
https://qiita.com/daxanya1/items/218f2e3b922142550ef9
https://liginc.co.jp/275684

Machine Learning
https://www.coursera.org/learn/machine-learning
無料で学べるオンライン講座

スタンフォード大学が提供する教科書。無料
http://www.mmds.org/

Machine Learning Mastery

Start Here With Machine Learning

ニューラルネットワーク⇒多層パーセプトロン⇒GAN
ニューラルネットワーク勉強
https://qiita.com/nushio/items/7bc4a32d8e27e8b5b751

多層パーセプトロン(GANは基本的にこれで学習している)
ニューラルネットワークのひとつ
http://hokuts.com/2015/12/04/ml3-mlp/

誤差逆伝播法(バックプロパゲーション)
https://qiita.com/yusuke2568/items/21d919e1f0c2e48c7c6f

ニューラルネットワークとディープラーニング
http://neuralnetworksanddeeplearning.com/
http://nnadl-ja.github.io/nnadl_site_ja/index.html

暮井慧
http://pronama.azurewebsites.net/

アイビスペイント
https://ibispaint.com/

Pythonの書き方メモ

abs(x) 絶対値

len(x) 長さ。リストの場合要素の数を取り出す

int() 整数int型に変換する。input()のデータは文字列なので計算する際は数値になおす。
float() float型に変換する。
long() long型に変換する。

round(x, 1) 数値xを少数第一まで表示。以下の桁は四捨五入。0なら整数にする。

max(x),min(x) 最大、最小の値を返す。

str() 数値を文字列に変換する。

文字列+文字列は文字列の連結 ”abc”+”def”=”abcdef”

str[0:1] str = “ABCDE”の時”A”のみ取り出せる。スライスという。

数字の桁数を取る len(str(100))のように文字列で長さを取る

str.replace(“a”, “b”) 文字列strの中の”a”を”b”に置換する。

“moji” in str ”moji”がstrの中に含まれればTrue

str[-1:] 文字列の最後尾を取り出す。-2なら後ろ2つを取り出す。

str.zfill(4) 文字列を4桁に満たない場合、4桁になるように先頭から0で埋める。

str.rjust(8, “X”) 8桁で右詰め。空きはXで埋める。
str.ljust(8, “X”) 8桁で左詰め。空きはXで埋める。
str.center(8, “X”) 8桁で中央寄せ。空きはXで埋める。

“文字列{変数}文字列”.format(変数) 数値も文字列に埋め込める。
“{0}, {1}”.format(変数1, 変数2) 複数変数も一括で埋め込める。場所をインデックスで指定する。
“{0:08d}”.format(num)とした場合は、8桁で桁埋め。スペースで埋める場合は8dとする。

range(0,10,2) 0から10まで(10は含まない)の2ステップ
range(10,0,1) 10から0まで(0は含まない)の-1ステップ

for i in range(0,5): i=0から4の5回繰り返し
for char in “Hello”: charにH e l l oと1文字ずつ取り出される
for index, item in enumerate(list): indexにはリスト並び順、itemにはリストの要素を取り出す

del(list[5]) list[5]そのものが削除される。
list.pop(5) list[5]がそのものが削除される。インデックスで指定する。
list.remove(list[5]) 指定した要素と一致する要素を先頭から探索して削除する。list[5]が削除されるとは限らない。

import random
random.randint(1, 100) 1~100の整数をランダムに生成
random.randrange(1, 100, 2) 開始、終了(100は含まない)、ステップ 1,3,5,・・・,99
random.seed(1) 初期化する。ある値で初期化して乱数を発生させると毎回同じパターンになる。

 

Tweet about this on Twitter
Twitter
Share on Facebook
Facebook
ポチッとシェアをお願いします
自己完結型のお小遣い稼ぎ