深層学習⼊⾨
たなか あきのり⽥中 章詞 github.com/AkinoriTanaka-phys
理化学研究所 iTHEMS/AIP 慶應義塾⼤学 数理科学科
今回の⼊⾨の詳細版へのリンク

1

今⽇お話しする内容. Python⼊⾨. NumPy⼊⾨. Matplotlib⼊⾨. 深層学習ライブラリ⼊⾨

2

1 .Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

1. Python⼊⾨

深層学習のフレームワークの多くはプログラミング⾔語pythonから使います。そこで、まずはpythonの⽂法から説明します。
詳細版（Colaboratory notebook）：

https://colab.research.google.com/github/AkinoriTanakaphys/deeplearning_notes/blob/master/appendix/intro2python.ipynb3

1 .Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

基本的な⽂法更に詳しく知りたい⽅は公式ドキュメントのチュートリアルを読むといいのかもしれません。
あるいは、「python+やりたいこと」でインターネット検索して下さい。検索するとだいたいうまいやり⽅がヒットします。
この⽅法でコードを拾ったときは、どこから拾ったかのURLも⼀緒にコメントなどで取っておくのが良いです。と⾔うのも、プログラミングのコードには著作権が発⽣する場合があるからです。
正確なことは公式ドキュメントで検索するのが間違い無くて良いかと思います。
4

1 .Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

⽂字列を表⽰する
値の出⼒の⽂法

print(value)

デフォルトでは最後に改⾏されます。
数値を表⽰：
print(365)3655

1 .Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

簡単な演算演算#addition
x + y#subtractionx - y#productx*y#quotientx/y#floored quotientx//y#reminder
x%y#powerx**y

計算順序がわからなくなった場合、半⾓括弧 で囲む。

6

1 .Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

コメント

読み⼿（未来の⾃分⾃⾝も含む）の理解を助けるコメントをつけたりします。
コメントhogehoge # comments

コメントは、なるべく英語で書くのが良いらしいです。
例えば以下のセルを実⾏すると（話の本筋とは関係のない）興味深い計算結果が得られますが、なぜそうなるのかコメントを読むとわかります：
1/0.9899 # Generating function of Fibonacci numbers 1/(1-x-x**2)

1.0102030508132134

with x=1/100

71 .Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

変数と型

数値などの値は変数に格納できます。
変数代⼊x = value

左辺（x）に右辺（value）が代⼊されます。
計算は上から順に実⾏されます：
変数の使⽤例#x = 30
3*x908

1 .Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

代⼊できる数値にも、様々な型があります。型について詳細を説明していると⻑くなりすぎるので、チートシート的なものを並べるだけに⽌めます。詳細は公式ドキュメント参照
数：int float complex: 1 3.14 3+2j
⽂字列：str: "this is it"
シーケンス型：list tuple [1,2,3] (1, "two", 3.0)
辞書型：dict {"short":290, "tall":330, "grande":370}
論理型：bool True, False
None オブジェクト None91 .Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

インデント 字下げ
Pythonではインデント（字下げ）を使って処理のブロック（かたまり）を明記します。
インデント・ルール（とても重要）
block:
operation...

インデントは⼊れ⼦の構造を持っていても構いません：
例：ブロックAの中で、別のブロックBを定義
blockA:
operationsA
blockB:
operationsB10

1 .Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

for⽂の⽂法

for n in range(N):n-th operations

n=01 2 ... N-1と順にループします。

条件分岐の⽂法

if A:
operationsAelif B:
operationsB
else:
operationsC

elifやelseがなくても動きます。ifやelifにはブール代数の値（TrueかFalse）が⼊るようにします。

11

1 .Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

for⽂とif⽂を使えば素数の判定ができます：
N = 31for n in range(2, N):
if N%n==0:
print(f"Its divisible by {n}")break # stop the for loop here
if n==N-1:
print("prime")
prime

12

1.Python⼊⾨ | 2 .NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

2. NumPy⼊⾨

実はpythonだけでは、計算速度が遅いため数値計算などには向いていません。数値計算したい場合はnumpyを使うのをオススメします。
NumPy詳細版（Colaboratory notebook）：

https://colab.research.google.com/github/AkinoriTanakaphys/deeplearning_notes/blob/master/appendix/intro2np.ip
ynb13

1.Python⼊⾨ | 2 .NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

インポートコマンド

まず使うためには以下のようなコマンドを打ち込みます：
import numpy as np

コマンドは以下のように、npとコマンド名を.で区切ります：
コマンド名numpyは配列=np.arrayを取り扱うライブラリーです。
np.

14

1.Python⼊⾨ | 2 .NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

pythonリストとnumpy配列

np.arrayはpythonのlist型と⾏き来できます
np.array ← リスト
x_np = np.array(x_list)

リスト ← np.arrayx_list = x_np.tolist()
x_np = np.array([[2, 1], [5, 3]])x_nparray([[2, 1],[5, 3]])15

1.Python⼊⾨ | 2 .NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

データの形状np.arrayにはshapeという変数が設定されています。例：
array x_np
shape x_np.shape[1 2 3 4 5 6]

(6,)[[1] [2] [3] [4] [5] [6]](6, 1)[[1 2] [3 4] [5 6]](3, 2)

形状を取得する：.shapex_np.shape # -> (dimension0, dimension1, ...)

16

1.Python⼊⾨ | 2 .NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

要素にアクセスする⽅法
x_npをshapeが M N ... であるようなnumpy配列とします
特定の要素にアクセス
x_np[m, n, ...]

まとめた要素にアクセス
x_np[m, n0:n1, ...]

n0からn1-1までの要素にアクセス。特に:だけだと、全要素にアクセスとなります。

17

1.Python⼊⾨ | 2.NumPy⼊⾨ | 3 .Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

Matplotlib⼊⾨

pythonで図を描く場合はだいたいこれを使います。
Matplotlib詳細版（Colaboratory notebook）：
https://colab.research.google.com/github/AkinoriTanakaphys/deeplearning_notes/blob/master/appendix/intro2plt.ip
ynb
18

1.Python⼊⾨ | 2.NumPy⼊⾨ | 3 .Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

インポートコマンド

まず使うためには以下のようなコマンドを打ち込みます：
import matplotlib.pyplot as plt%matplotlib inline

2⾏⽬は⼿元のノートブック環境で結果をブラウザなどの枠内に収めるためのコマンドでGoogle Colaboratoryでは不要です。
このライブラリはNumPyを使うことが想定されているので、NumPyもインポートしておきます。
import numpy as np

19

1.Python⼊⾨ | 2.NumPy⼊⾨ | 3 .Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

グラフ
plt.plot(x, y, options)x = np.linspace(-10, 10)
plt.plot(x, np.sin(x), "o-", color="red", alpha=0.4)
plt.show()20

1.Python⼊⾨ | 2.NumPy⼊⾨ | 3 .Matplotlib⼊⾨ | 4.深層学習ライブラリ⼊⾨

散布図
plt.scatter(x, y, options)

擬似乱数⽣成器

rg = np.random.default_rng() #xy = rg.standard_normal(size=(100, 2))plt.scatter(xy[:,0], xy[:,1], marker="x", alpha=0.8)

21

1.Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4 .深層学習ライブラリ⼊⾨

4. 深層学習ライブラリ⼊⾨

pythonでは様々な深層学習ライブラリを使うことができます。全てGPUでの並列処理が可能です。

ライブラリ TensorFlow PyTorch MXNet CNTK ...
名サポート Google
Facebook AWS Microsoft ...
22

1.Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4 .深層学習ライブラリ⼊⾨

TensorFlow⼊⾨

ここまでの⽂法を踏まえて、実演してみます。
TensorFlow（Colaboratory notebook）：

https://colab.research.google.com/github/AkinoriTanakaphys/deeplearning_notes/blob/master/appendix/intro2tf.ipynb23

1.Python⼊⾨ | 2.NumPy⼊⾨ | 3.Matplotlib⼊⾨ | 4 .深層学習ライブラリ⼊⾨PyTorch⼊⾨

ここまでの⽂法を踏まえて、実演してみます。
PyTorch（Colaboratory notebook）：

https://colab.research.google.com/github/AkinoriTanakaphys/deeplearning_notes/blob/master/appendix/intro2torch.ipynb24