SYA-KE Deep Learning Training

OReilyBook

Parent Repository URL

Pythonに慣れる

In [32]:
!python --version
Python 3.5.4 :: Anaconda custom (64-bit)
In [66]:
#もう何年もやってるので省略

Numpyに慣れる

参考URL

配列、行列

In [34]:
import numpy as np
In [35]:
np.__version__
Out[35]:
'1.11.3'
In [36]:
x = np.array([1.0,2.0,3.0])
In [37]:
y = np.array([2.0,4.0,6.0])
In [38]:
x + y
Out[38]:
array([ 3.,  6.,  9.])
In [39]:
x - y
Out[39]:
array([-1., -2., -3.])
In [40]:
x * y
Out[40]:
array([  2.,   8.,  18.])
In [42]:
x / y
Out[42]:
array([ 0.5,  0.5,  0.5])
In [43]:
x / 2.0
Out[43]:
array([ 0.5,  1. ,  1.5])
In [44]:
A = np.array([[1,2],[3,4]])
In [45]:
print(A)
[[1 2]
 [3 4]]
In [46]:
A.shape
Out[46]:
(2, 2)
In [47]:
A.dtype
Out[47]:
dtype('int64')
In [48]:
B = np.array([[3,0],[0,6]])
In [49]:
A + B
Out[49]:
array([[ 4,  2],
       [ 3, 10]])
In [50]:
A * B
Out[50]:
array([[ 3,  0],
       [ 0, 24]])
In [51]:
A*10
Out[51]:
array([[10, 20],
       [30, 40]])
In [67]:
X = np.array([[51,55],[14,19],[0,4]])
X
Out[67]:
array([[51, 55],
       [14, 19],
       [ 0,  4]])
In [54]:
X[0] #0行目
Out[54]:
array([51, 55])
In [55]:
X[0][1] #(0,1) =>(0行1列)
Out[55]:
55
In [56]:
for row in X:
    print(row)
[51 55]
[14 19]
[0 4]
In [68]:
AX = X.flatten() #行列を配列に
AX
Out[68]:
array([51, 55, 14, 19,  0,  4])
In [59]:
AX[AX>15]#配列から条件の値を抽出
Out[59]:
array([51, 55, 19])
In [72]:
X>15
Out[72]:
array([[ True,  True],
       [False,  True],
       [False, False]], dtype=bool)
In [71]:
X[X>15]#行列でもできる。
Out[71]:
array([51, 55, 19])

ニューラルネットワークにおいては行列は 行数=入力数 列数=重み数

Matplotlibに慣れる

In [73]:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,6,0.1) #0to6 by 0.1 => sin(0to6)
y = np.sin(x)
plt.plot(x,y)
plt.show()
plt.close()
In [74]:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,6,0.1) #0to6 by 0.1 => sin(0to6)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x,y1,label="sin(x)")
plt.plot(x,y2,label="cos(x)", linestyle="--")
plt.xlabel("x")
plt.ylabel("y")
plt.title("sin(x), cos(x)")
plt.legend()#show label box
plt.show()
plt.close()
In [75]:
%matplotlib inline
#plt.show()をinlineにて表示する
#Esc+Lで行番号を表示する
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,6,0.1) #0to6 by 0.1 => sin(0to6)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x,y1,label="sin(x)")
plt.plot(x,y2,label="cos(x)", linestyle="--")
plt.axhline(color='black',linestyle="--")
plt.xlabel("x")
plt.ylabel("y")
plt.title("sin(x), cos(x), y=0")
plt.legend()#show label box
plt.show()
plt.close()

パーセプトロンに慣れる

In [65]:
from graphviz import Digraph
dot = Digraph(comment="単純パーセプトロン")
dot.attr(rankdir="LR")
dot.attr(splines="line")
dot.attr(fixedsize="true")
with dot.subgraph(name="cluster_x") as x:
    x.attr(label="入力層")
    x.attr(color="white")
    x.node("x1","x1:入力1")
    x.node("x2","x2:入力2")
with dot.subgraph(name="cluster_y") as y:
    y.attr(label="出力層")
    y.attr(color="white")
    y.node("y","y:出力1")
dot.edge("x1", "y", label="w1:重み1")
dot.edge("x2",  "y", label="w2:重み2")
#print(dot)
dot
Out[65]:
%3 cluster_x 入力層 cluster_y 出力層 x1 x1:入力1 y y:出力1 x1->y w1:重み1 x2 x2:入力2 x2->y w2:重み2