티스토리 뷰
Simple ID array and slicing¶
In [5]:
# https://www.tensorflow.org/api_guides/python/array_ops
import tensorflow as tf
import numpy as np
import pprint
tf.set_random_seed(777) # for reproducibility
pp = pprint.PrettyPrinter(indent=4)
sess = tf.InteractiveSession()
In [2]:
from PIL import Image
Image.open('kimbab.png')
Out[2]:
In [6]:
t = np.array([0., 1., 2., 3., 4., 5., 6])
1차원 array를 생성시킬 수 있다. 김밥을 보고 1차원 array라고 생각할 수 있다.
김밥 각 한덩이를 element라고 할 수 있고, 맨 왼쪽부터 0번째, 1번째,...라고 번호를 매길 수 있다.
In [7]:
pp.pprint(t)
print(t.ndim) # rank 몇 차원 array냐
print(t.shape) # shape 어떤 모양이냐
print(t[0], t[1], t[-1]) # 어떤 특정한 자리의 김밥을 먹고 싶다
print(t[2:5], t[4:-1]) # 김밥을 여러개 먹고싶다
print(t[:2], t[3:])
2D Array¶
In [9]:
t = np.array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.], [10., 11., 12.]])
pp.pprint(t)
print(t.ndim) # rank
print(t.shape) # shape
Shape, Rank, Axis¶
In [10]:
t = tf.constant([1, 2, 3, 4])
tf.shape(t).eval()
Out[10]:
In [14]:
t = tf.constant([[1, 2],
[3, 4]])
tf.shape(t).eval()
Out[14]:
In [15]:
t = tf.constant([[[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]],
[[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]]]])
tf.shape(t).eval()
Out[15]:
Matmul VS multiply¶
In [18]:
matrix1 = tf.constant([[1., 2.], [3., 4.]])
matrix2 = tf.constant([[1.],[2.]])
print("Metrix 1 shape", matrix1.shape)
print("Metrix 2 shape", matrix2.shape)
tf.matmul(matrix1, matrix2).eval()
Out[18]:
In [19]:
(matrix1 * matrix2).eval() # 이런식으로 곱하면 잘못된 결과가 나옴
Out[19]:
Broadcasting¶
유용한 기능이지만 잘못사용하면 독이 된다.
In [22]:
# Operations between the same shapes
matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2., 2.]])
(matrix1 + matrix2).eval()
Out[22]:
shape이 다르더라도 계산기 가능
In [23]:
matrix1 = tf.constant([[1., 2.]])
matrix2 = tf.constant(3.)
(matrix1+matrix2).eval()
Out[23]:
In [24]:
matrix1 = tf.constant([[1., 2.]])
matrix2 = tf.constant([3., 4.])
(matrix1 + matrix2).eval()
Out[24]:
In [25]:
matrix1 = tf.constant([[1., 2.]])
matrix2 = tf.constant([[3.],[4.]])
(matrix1+matrix2).eval()
Out[25]:
Reduce mean¶
In [26]:
tf.reduce_mean([1,2], axis=0).eval()
Out[26]:
In [27]:
x = [[1., 2.],
[3., 4.]]
tf.reduce_mean(x).eval()
Out[27]:
In [28]:
tf.reduce_mean(x, axis=0).eval()
Out[28]:
In [29]:
tf.reduce_mean(x, axis=1).eval()
Out[29]:
In [30]:
tf.reduce_mean(x, axis=-1).eval() # 가장 안쪽에 대괄호 속에 있는 값의 평균
Out[30]:
Reduce sum¶
In [31]:
x=[[1., 2.],
[3., 4.]]
In [32]:
tf.reduce_sum(x).eval()
Out[32]:
In [33]:
tf.reduce_sum(x, axis=0).eval()
Out[33]:
In [34]:
tf.reduce_sum(x, axis=-1).eval()
Out[34]:
In [35]:
tf.reduce_mean(tf.reduce_sum(x, axis=-1)).eval()
Out[35]:
Argmax¶
가장 큰 것의 위치가 나온다.
In [36]:
x = [[0, 1, 2],
[2, 1, 0]]
tf.argmax(x, axis=0).eval()
Out[36]:
In [37]:
tf.argmax(x, axis=1).eval()
Out[37]:
In [38]:
tf.argmax(x, axis=-1).eval()
Out[38]:
Reshape¶
가장 안쪽에 있는 3은 잘 안건든다.
In [39]:
t = np.array([[[0, 1, 2],
[3, 4, 5]],
[[6, 7, 8],
[9, 10, 11]]])
t.shape
Out[39]:
In [40]:
tf.reshape(t, shape=[-1, 3]).eval()
Out[40]:
In [42]:
tf.reshape(t, shape=[-1, 1, 3]).eval() #랭크를 늘리고 싶다.
Out[42]:
Reshape(squeeze, expand)¶
In [43]:
tf.squeeze([[0], [1], [2]]).eval() # 안에 있는 값을 쭉 펼쳐준다.
Out[43]:
In [44]:
tf.expand_dims([0, 1, 2], 1). eval() # 스퀴즈와 반대 기능, tensor의 shape을 변경하는 기능
Out[44]:
One hot¶
In [45]:
tf.one_hot([[0], [1], [2], [0]], depth=3).eval()
Out[45]:
In [46]:
t = tf.one_hot([[0], [1], [2], [0]], depth=3)
tf.reshape(t, shape=[-1, 3]).eval()
Out[46]:
Casting¶
In [47]:
tf.cast([1.8, 2.2, 3.3, 4.9], tf.int32).eval() # float을 integer로 바꿈
Out[47]:
In [49]:
tf.cast([True, False, 1 == 1, 0 == 1], tf.int32).eval() # True, False를 1이나 0으로 바꿈
Out[49]:
Stack¶
축을 바꾼다
In [50]:
x = [1, 4]
y = [2, 5]
z = [3, 6]
# pack along first dim.
tf.stack([x, y, z]).eval()
Out[50]:
In [51]:
tf.stack([x, y, z], axis=1).eval()
Out[51]:
Ones and Zeros like¶
똑같은 shape의 0이나 1로 차있는 matrix를 만들 수 있다.
In [52]:
x = [[0, 1, 2],
[2, 1, 0]]
tf.ones_like(x).eval()
Out[52]:
In [53]:
tf.zeros_like(x).eval()
Out[53]:
Zip¶
복수개의 tensor를 한번에 처리하고 싶다.
In [55]:
for x, y in zip([1, 2, 3], [4, 5, 6]):
print(x, y)
In [56]:
for x, y, z in zip([1, 2, 3], [4, 5, 6], [7, 8, 9]):
print(x, y, z)
'beginner > 파이썬 딥러닝 기초' 카테고리의 다른 글
딥 네트웍 학습 시키기 (0) | 2019.05.06 |
---|---|
XOR 문제 딥러닝으로 풀기 (0) | 2019.05.06 |
딥러닝의 기본 개념: 시작과 XOR 문제~Back-propagation과 2006/2007 '딥'의 출현 (0) | 2019.05.06 |
Meet MNIST Dataset (0) | 2019.05.06 |
Training/Test dataset, learning rate, normalization (0) | 2019.05.05 |