(11주차) 5월11일
import tensorflow as tf
import tensorflow.experimental.numpy as tnp
tnp.experimental_enable_numpy_behavior()
import matplotlib.pyplot as plt
- 이미지자료의 정리
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()
X = tf.constant(x_train.reshape(-1,28,28,1),dtype=tf.float64)
y = tf.keras.utils.to_categorical(y_train)
XX = tf.constant(x_test.reshape(-1,28,28,1),dtype=tf.float64)
yy = tf.keras.utils.to_categorical(y_test)
- net1,2
tf.random.set_seed(43052)
net1 = tf.keras.Sequential()
net1.add(tf.keras.layers.Flatten())
net1.add(tf.keras.layers.Dense(30,activation='relu'))
net1.add(tf.keras.layers.Dense(10,activation='softmax'))
net1.compile(loss=tf.losses.categorical_crossentropy,optimizer='adam',metrics='accuracy')
net1.fit(X,y,epochs=10)
net1.evaluate(X,y)
tf.random.set_seed(43052)
net2 = tf.keras.Sequential()
net2.add(tf.keras.layers.Flatten())
net2.add(tf.keras.layers.Dense(500,activation='relu'))
net2.add(tf.keras.layers.Dense(500,activation='relu'))
net2.add(tf.keras.layers.Dense(500,activation='relu'))
net2.add(tf.keras.layers.Dense(500,activation='relu'))
net2.add(tf.keras.layers.Dense(10,activation='softmax'))
net2.compile(loss=tf.losses.categorical_crossentropy,optimizer='adam',metrics='accuracy')
net2.fit(X,y,epochs=10)
net2.evaluate(XX,yy)
- DNN 아키텍처로는 한계가 있음
- net3
tf.random.set_seed(43052)
net3 = tf.keras.Sequential()
net3.add(tf.keras.layers.Conv2D(30,(2,2),activation='relu'))
net3.add(tf.keras.layers.MaxPool2D()) # net3.add(tf.keras.layers.MaxPool2D(pool_size=(2,2)))와 동일한 코드
net3.add(tf.keras.layers.Conv2D(30,(2,2),activation='relu'))
net3.add(tf.keras.layers.MaxPool2D())
net3.add(tf.keras.layers.Flatten())
net3.add(tf.keras.layers.Dense(10,activation='softmax'))
net3.compile(loss=tf.losses.categorical_crossentropy,optimizer='adam',metrics='accuracy')
net3.fit(X,y,epochs=10)
net3.evaluate(XX,yy)
- DNN의 한계를 가볍게 돌파함
- net3의 구조 감상
net3.layers
cv1, mp1, cv2, mp2, flttn, d1 = net3.layers
print(XX.shape) ## 이미지 (2D)
print(cv1(XX).shape) ## 이미지 (2D)
print(mp1(cv1(XX)).shape) ## 이미지 (2D)
print(cv2(mp1(cv1(XX))).shape) ## 이미지 (2D)
print(mp2(cv2(mp1(cv1(XX)))).shape) ## 이미지 (2D)
print(flttn(mp2(cv2(mp1(cv1(XX))))).shape) ## 이미지를 펼친것 (1D)
print(d1(flttn(mp2(cv2(mp1(cv1(XX)))))).shape) ## 이미지를 펼친것 (1D)
- 복잡한거아냐?
- 파라메터 비교
net1.summary() ## 23,860
net2.summary() # 1,149,010
net3.summary() # 14,590
14590/23860
14590/1149010
- 교재1: http://www.kyobobook.co.kr/product/detailViewEng.laf?mallGb=ENG&ejkGb=ENG&barcode=9781838823412
- 장점: 텐서플로우 2.0을 다룬 교재, 기본적 내용을 간략히 소개. 다양한 분야를 커버.
- 단점: 내용이 조금 산만함 (잘 안읽힘). 코드가 예쁘지 않음. 글을 진짜 못씀.
- 장점: 코드가 예쁘다. 예제가 잘 구성됨. 참신하다. 내용에 깊이가 있다.
- 단점: 입문용 내용이 아예 없음
- 교재3: 텐서플로 딥러닝 프로그래밍 (김동근/가메출판사)
- 장점: 한글교재, 그래도 교재구성에 흐름이 있다. 공식문서의 가이드내용도 포함 (대부분은 튜토리얼 수준만 포함)
- 단점: 공식문서내용 그냥 거의 그대로 베낌.
- 튜토리얼: https://www.tensorflow.org/tutorials?hl=ko
- 탭눌러서 초보자~고급 모두 읽어보면 좋다.
- 간단한 모형실습들 제공.
- 대부분의 교재는 튜토리얼의 내용을 베껴서 출판한다. (외국교재도 포함!)
- 가이드: https://www.tensorflow.org/guide?hl=ko
- 왜 파이토치가 아니고 텐서플로우를 써야하는가? 에 대한 대답들
- 모형에 대한 설명보다 프로그램 자체에 대한 이해도를 높여준다.
- API: https://www.tensorflow.org/versions?hl=ko
- tf의 다양한 모듈구조를 확인
- 파이썬에서 도움말 치면 나오는 것들 + $\alpha$
- 교재에서 확인불가능한 아주 디테일한 부분까지 확인가능
tf.GradientTape?
- Deep Learning (이안굿펠로우): https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=171345378
- 장점: 그나마 잘 쓰여진 전통있는 교재, 교수님들 책꽃이에 하나씩 꼽혀있었음. 방대한 내용다룸. 깊이있음. 틀린것 없음. 무료
- 단점: 번역이 쓰레기임. 내용이 너무 어려움. (이해를 하라고 쓴 설명이 아님)
- 무료제공: https://www.deeplearningbook.org/
- 기계학습 (오일석)
- 장점: 이해가 잘된다. 꽤 넓은 분야를 다룬다. 비교적 간단한 예제로 개념을 설명한다.