Numpy 超入門  [初心者からはじめるディープラーニング入門]

深層学習
Ganzy
Ganzy

こんにちは Ganzy(ガンジー)です。
今回は、Pythonでディープラーニングを実施するにあたり必要な「Numpy」についてまとめていきます。

Pythonは近年、画像認識や機械学習等の人工知能研究分野で広く用いられているプログラミング言語であり、画像認識や機械学習、データ解析に役立つモジュールが豊富に開発されております。

その中で「Numpy」と呼ばれているモジュールを用いることで画像認識や機械学習に必要な処理を効率的に実施することが可能となっております。

Numpyの使い方 ~基本編~

Ganzy
Ganzy

今回は、Numpyの超基本となる3つの操作について紹介します。

型の統一

まずNumpyの基本的な使い方としては型を統一する必要があります。
型を統一していないとコードを実行した際にエラーが返ってきますのでご注意ください。
( 型の統一方法は下記コードを参照 flot型に統一)

またNumPyの配列(ndarray)は、NumPyで多次元配列を扱うためのクラスで、型を統一する代わりにPythonのリストよりも高機能、そして高速で計算処理をしてくれます。

行列の足し算、掛け算

ndarrayは1次元であればベクトル、2次元は行列、3次元はテンソルを扱うことができます。
また各行列同士の足し算・掛け算が可能です。基本的な使い方の例を以下に示します。

例として、こんな行列を使って計算してみます。

import numpy as np

a = np.array([[0, 0, 1], [0, 0, 2]], dtype=np.float32) 
# dtype=***で配列要素の型を決めています
b = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)
print(a)
print(b)

# 行列の演算(和・積)
c = a + b
d = a * b  # * は要素ごとの掛け算です
print(c)
print(d)

# (数学的な)行列の掛け算
e = np.dot(a, b.T)   # b.Tは行列bの転置を表しています
print(e)
出力結果
[[0. 0. 1.]
[0. 0. 2.]]

[[1. 2. 3.]
 [4. 5. 6.]]

[[1. 2. 4.]
 [4. 5. 8.]]

[[ 0.  0.  3.]
 [ 0.  0. 12.]]

[[ 3.  6.]
 [ 6. 12.]]

行列から特定の要素を取り出す

また行列から特定の要素や特定の範囲を取り出す方法について紹介します。

  • 特定の要素を取り出す(インデキシング) … a[i, j]:行列aの(i, j)要素を取り出します。
  • 特定の範囲を切り出す(スライシング) … 範囲を指定する際にはコロン「:」を用います。
ここで注意!
Pythonにおいて行列の~番目というのは、”0番目から”スタートします。
つまり、Python上では1行(列)目は0、2行(列)目は1と指定する必要があるのです。

例として、下記のインデキシング、スライシングをしてみます。
先ほどの行列を使って、

行列aの(1, 3)要素 = a[0,2]

② 行列aの2行目(のベクトル) = a[1,:]

③ 行列aの3列目(のベクトル)= a[:,2]

④ 行列bの(2,1)要素から、2個の部分行列 = b[1,0:2]

# インデキシング
a_elem = a[0, 2]   #これが①
print(a_elem)

# スライシング②~③
a_slice1 = a[1, :]  #これが②
a_slice2 = a[:, 2]  #これが③
print(a_slice1)
print(a_slice2)
b_slice = b[1, 0:2]  #これが④
print(b_slice)
出力結果
1.0
[0. 0. 2.]
[1. 2.]
[4. 5.]

そのほかにも計算するうえで便利な関数が多数あります。

これらのコードを組み合わせ深層学習モデルなどのコーディングを行います。

a = np.array([0,1,2], dtype=np.float32)

# exp(指数関数を要素ごとに計算)
print(np.exp(a))
# power(累乗)
print(np.power(a, 2))

# 集計用の関数(非ゼロの要素数を計算)
b = np.array([1, 0, 1, 0, 0], dtype=np.int32)
print(np.count_nonzero(b))
出力結果
[1.        2.718282  7.3890557]
[0. 1. 4.]
2

そのほかにもたくさんの便利な関数が定義されております。興味がある方は参考リンク先へ!

Numpy Reference (関数一覧の公式ページ)

さて今後は紹介したNumpyを使いつつディープラーニングのコーディングについて紹介していきます!

コメント

タイトルとURLをコピーしました