暇人日記

アラフォーおっさんのコーセラの機械学習の課題を解こうと頑張っています!

Coursera Machine Learning Week8 課題 苦闘日記⑤

今回は課題と課題の間にあるoptionalに取り組みます。

 

f:id:omoshiroamericanews:20191123141628p:plain

 

2Dセットに慣れたら画像でクラスタリングをやってみよう!と問題文の

冒頭にありましたがその通り画像での演習が載っています。

 

f:id:omoshiroamericanews:20191123141858p:plain

(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)

 

色数を256色から16色へ落とし込んでのData圧縮をクラスタリングで

行うという主旨のようです。

 

Original Dataはbird_small.pngなのでこれを読み込みます。

問題文にある通り、

A=imread(’bird_small.png')とすると

f:id:omoshiroamericanews:20191123142547p:plain

おぉ、3次元!?

3次元はこのコースで初な気がします。

 

どのようにOctaveで表現されるかというと、

f:id:omoshiroamericanews:20191123142822p:plain

3つ目の要素は1の時、2の時、3の時と固定して

128X128で表現していました。

 

例えば(50,25,3)のような情報は

最初の2つは場所を示し、最後の一つは1,2,3が赤、緑、青をそれぞれ示す、

ということです。

 

ここから課題プログラム全体版を読み解いていきます。

f:id:omoshiroamericanews:20191123143436p:plain

(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)

 

doubleの意味って何だろう?

さっきimreadで読み込んだものと比較したのが下です。

f:id:omoshiroamericanews:20191123143558p:plain

依然、doubleの意味はよくわかりません。

sizeは128X128X3の3次元は同じですね。

 

続きの部分です。

f:id:omoshiroamericanews:20191123144228p:plain

(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)

 

結果、Xは16384X3のベクトルになっていました。

f:id:omoshiroamericanews:20191123144542p:plain

なので

X=reshape(A,128x128=16483,3)でXは16384X3のベクトルになった模様です。

 

Xの最後の方の部分です。

f:id:omoshiroamericanews:20191123145104p:plain

 

reshapeされても

『最初の2つは場所を示し、最後の一つは1,2,3が赤、緑、青をそれぞれ示す』

のでしょうか?

 

一番右の列はAの3(青)のときの128行目の最下部と同じでした。

真ん中の列はAの2(緑)のときの128行目の最下部と同じでした。

 

違いますね。

 

このXの読み取り方は

f:id:omoshiroamericanews:20191123150839p:plain

 

青の(1.1)の濃さは0.457778と言っている

RowNo.ColumnNo.自体が場所を示していると思います。

 

それではプログラムを実行させてみます!

 

大きな問題にぶち当たりました。

プログラムを実行させたところ、40分たっても絵が描かれません!!!

2Dセットの300X2でも2-3分はかかっていたのですが、

データ量が増えて格段に時間がかかるようになってしまったようです。

 

findclosestcentroidsではloopではなくvectorizationした方が早いという

コメントがあったのでそれにトライします。

 

と思いましたが、CourseraのDiscussion Forumで

メンターのコメントを見たところ、ベクトルにしても

Single Loopは発生して劇的には改善しないということです。

 

どうやら私のPCスペックではダメだったようです。

諦めます。

 

次回は次の課題に取り組みます。