学習メモ1 単純パーセプトロンのpythonコードの一部

そろそろ深層学習の手法も勉強してみたいと思い『詳解ディープラーニング』を少しずつ読んでいます。
この本で分からなかったことやメモを残しておきたいことなどを個人的な学習メモとして残しておきます。

なお、上記の書籍のコードは著者が以下で公開しています。
GitHub - yusugomori/deeplearning-tensorflow-keras

疑似乱数の生成

> rng = np.random.RandomState(123)


numpy.randomモジュールによる疑似乱数の生成。rng変数に作成したRandomStateクラスのインスタンスを代入。具体例として標準正規分布に従う乱数を10個戻す場合は以下のように記述する。

> rng = np.random.RandomState(123)
> rng.randn(10)
array([-1.0856306 ,  0.99734545,  0.2829785 , -1.50629471, -0.57860025,
        1.65143654, -2.42667924, -0.42891263,  1.26593626, -0.8667404 ])

他にもnumpy.randomモジュールには以下のような関数がある。

関数 説明
rand (連続)一様分布に従う乱数を戻す
uniform 区間[0,1)の一様分布に従う乱数を戻す
randint 付与された整数の範囲内で整数乱数を戻す
binomial 二項分布に従う乱数を戻す
normal 正規分布に従う乱数を戻す
chisqare カイ二乗分布に従う乱数を戻す
gamma ガンマ分布に従う乱数を戻す



配列の連結方法

> x = np.concatenate((x1, x2), axis=0)

numpy配列の結合concatenate()関数を使用する。引数のaxisはデフォルトで0となる。
引数axisは連結の方向を指定。0だと行が増え、1だと列が増える。今回のケースでは行方向に連結するため行が増えることになる。
コードの具体例を示すと理解しやすい。

> rng = np.random.RandomState(123)
> x1 = rng.randn(10, 2) + np.array([0, 0])
> print(x1)
[[-1.0856306   0.99734545]
 [ 0.2829785  -1.50629471]
 [-0.57860025  1.65143654]
 [-2.42667924 -0.42891263]
 [ 1.26593626 -0.8667404 ]
 [-0.67888615 -0.09470897]
 [ 1.49138963 -0.638902  ]
 [-0.44398196 -0.43435128]
 [ 2.20593008  2.18678609]
 [ 1.0040539   0.3861864 ]]

> x2 = rng.randn(10, 2) + np.array([5, 5])
> print(x2)
[[ 5.73736858  6.49073203]
 [ 4.06416613  6.17582904]
 [ 3.74611933  4.3622485 ]
 [ 5.9071052   3.5713193 ]
 [ 4.85993128  4.1382451 ]
 [ 4.74438063  2.20141089]
 [ 3.2284669   4.30012277]
 [ 5.92746243  4.82636432]
 [ 5.00284592  5.68822271]
 [ 4.12046366  5.28362732]]

このとき、x1とx2を行方向に連結させるためにnumpy.concatenateを利用すると以下のようになる。

> append_x = np.concatenate((x1, x2), axis=0)
> print(append_x)
[[-1.0856306   0.99734545]
 [ 0.2829785  -1.50629471]
 [-0.57860025  1.65143654]
 [-2.42667924 -0.42891263]
 [ 1.26593626 -0.8667404 ]
 [-0.67888615 -0.09470897]
 [ 1.49138963 -0.638902  ]
 [-0.44398196 -0.43435128]
 [ 2.20593008  2.18678609]
 [ 1.0040539   0.3861864 ]
 [ 5.73736858  6.49073203]
 [ 4.06416613  6.17582904]
 [ 3.74611933  4.3622485 ]
 [ 5.9071052   3.5713193 ]
 [ 4.85993128  4.1382451 ]
 [ 4.74438063  2.20141089]
 [ 3.2284669   4.30012277]
 [ 5.92746243  4.82636432]
 [ 5.00284592  5.68822271]
 [ 4.12046366  5.28362732]]


条件式が正しければTrue、そうでなければFalseを返すall()

all(条件式)

具体例は以下のとおり。

> all([x % 2 == 0 for x in [1,3,5]])
False