2019/04/09

python入門。Courseraディープラーニングコースの解説。

Courseraのディープラーニングコースとは。

動画の視聴とテストからなるDeep Learningの5講座。入門的内容なので数学的な背景があまりなくても動画を見れば、ある程度理解ができる。テストでは内容の理解を助ける選択問題の他、pyhtonを使った演習がある。コースの修了には課金が必要だが、修了証がでる。


役立つpythonのトピック

まずは、最入門ということで、 Neural Networks and Deep Learning から。
便利なことにjupyter notebookというWeb上で動くpythonがあるので、インストールなど当面考えなくても使える。書籍などを読むとMACやWindowsにインストールして使う方法が解説しているが、環境の立ち上げで迷わなくて済むのは初心者にとってpyhtonのいいところ。

その1 axisの指定

例えば、行列の縦方向に割合を求めたい場合などに使える。 axis=0の指定は行列の縦(列)方向に足す。
なお、axis=1は横(行)方向に足すことになる。
import numpy as np A = np.array([[56.0,0.0,4.4,68.0], [1.2,104.0,52.0,8.0], [1.8,135.0,99.0,0.9] ]) cal=A.sum(axis=0) #axis=0 は縦を足す #axis=1 は横に足す percentage = 100 * A / cal.reshape(1,4) print('行列') print(A) print('カロリー',cal) print('パーセント',percentage)

その2 行列の指定方法

Pyhtonに限らず、ディープラーニングやAI、機械学習では物事を行列に置き換えてガシガシ計算を回して最適解に近づくようにしている。(これが夢のような世界の正体だ。)いわゆるFor文と違って、行列の計算は速く行うことができる。この行列計算を確かなものをするのがpythonの肝になる。
pythonでプログラムする上で、最初に知るべきなのは、配列が持つ次元数(ランク)の概念だ。 pythonで配列を作ると1行や1列の配列を作る時には注意が必要だ。
import numpy as np # a note on python/ numpy vectors a = np.random.randn(5) print(a) print(a.shape) #(5,) -> rank1 array と呼ばれる。 #行ベクトルでも列ベクトルでもない print(a.T) print(np.dot(a,a.T)) #外積ではなく、1つの値が返ってくる。
shapeを表示した時にでる、'(5,)'。これが曲者だ。 ランク1の配列と呼ばれるもので、行ベクトルでも列ベクトルでもない。なので、この指定をすると外積が計算出来ない。
ちなみに、ランク0は1つの数値で示される定数や変数で表されるスカラーを指す。
ではどうすればいいのかというと、配列を二次元(ランク2)できちんと指定してやる。
a = np.random.randn(5,1) #column vector a = np.random.randn(1,5) #row vector print(a) print(a.T)
この場合のaの出力にはブラケットが2つ(’[[’)ある。
[[0.18932994 0.4821708 0.77581062 0.23628661 0.15776551]]
後は、assert文を一々入れることも有効だそうだ。
a = np.random.randn(5) #a=a.reshape(5,1) assert(a.shape==(5,1)) print(a) #AssertionError: