Deep Learning2020. 1. 7. 19:54
반응형

 김성훈 교수님의 [모두를 위한 딥러닝] 강의 정리

 - https://www.youtube.com/watch?reload=9&v=BS6O0zOGX4E&feature=youtu.be&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&fbclid=IwAR07UnOxQEOxSKkH6bQ8PzYj2vDop_J0Pbzkg3IVQeQ_zTKcXdNOwaSf_k0

 - 참고자료 : Andrew Ng's ML class

  1) https://class.coursera.org/ml-003/lecture

  2) http://holehouse.org/mlclass/ (note)

  3) http://cs231n.stanford.edu/



1. LeNet-5 [LeCun et al., 1998]

 - 6개의 hidden layer 사용

 ※ softmax에서 좋은 결과를 내기 위한 두 가지 방법 : Deep(layer를 여러 개) & Wide(하나의 layer에 노드를 많이)

 

2. AlexNet [Krizhevsky et al. 2012]

 - 원본 그림 : 크기 227x227, 색상 RGB 3가지

 - 필터 : 크기 11x11, 개수 96

 - W 개수 : 11x11x3

 

 - AlexNet 전체 네트워크 구성 : ReLU를 사용한 첫 번째 모델, dropout 및 ensemble도 적용함

 

3. GoogLeNet [Szegedy et al., 2014]

 - 새로운 이론 'inception module' 적용

 

4. ResNet [He et al., 2015]

 - 152개의 layer 사용, 2~3주간 8개의 GPU로 학습

 - VGANet(2014년 ImageNet 대회 출전 모델 - 당시 16개의 CONV/FC layer만 사용)보다 빠름

 

5. ResNet vs GooLeNet

 

6. CNN for Sentence Classification [Yoon Kim, 2014]

 

7. AlphaGo [DeepMind]

 - 19x19 크기의 이미지 사용 -> 패딩을 적용하여 23x23 크기로 재구성

 - 48개의 feature planes(채널) 사용 -> 바둑돌 하나 놓을 때마다 48가지 특징으로 판단 (이세돌이 한판이라도 이긴게 대단한 거 아닐까..)

반응형
Posted by CCIBOMB
Deep Learning2020. 1. 3. 23:55
반응형

 김성훈 교수님의 [모두를 위한 딥러닝] 강의 정리

 - https://www.youtube.com/watch?reload=9&v=BS6O0zOGX4E&feature=youtu.be&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&fbclid=IwAR07UnOxQEOxSKkH6bQ8PzYj2vDop_J0Pbzkg3IVQeQ_zTKcXdNOwaSf_k0

 - 참고자료 : Andrew Ng's ML class

  1) https://class.coursera.org/ml-003/lecture

  2) http://holehouse.org/mlclass/ (note)

  3) http://cs231n.stanford.edu/

 

1. Convolutional Neural Networks (CNN)

 - CONV와 RELU가 한 쌍으로 구성, 중간에 POOL(pooling, sampling, resizing)이 들어감

 - FC : Fully Connected network

 

2. image로 CNN 이해하기

 (1) Start with an image (width x height x depth)

  - 그림 크기 32 x 32

  - 색상 3가지(red, green, blue) x 3

 

 (2) Let's focus on a small area only (5 x 5 x 3)

  - 색상에 해당하는 3은 항상 같아야 함

 

 (3) Get one number using the filter

  - 필터가 차지하는 영역을 하나의 값으로 변환 : Wx + b

  - W는 weight (필터에 해당), x는 외부에서 읽어온 값으로 불변(이미지에 해당)

  - CNN의 목표는 올바른 필터를 찾는 것

  - ReLU 함수를 이용하고 싶다면 간단하게 ReLU(Wx+b)

 

 (4) Let's look at other areas with the same filter

  - 동일한 필터를 사용하여 다른 영역도 조사

 

  - 이 때 필터가 움직이는 규칙을 stride라고 하며, ouput의 크기를 계산하면 다음과 같음

    output size = (input size - filter size) / stride + 1

 

  - 이와 같이 반복되는 경우 convolutional layer를 거칠 때마다 output의 크기가 작아지는 문제가 발생함

    => padding을 통해 해결 (원본이미지 주변을 0으로 채움)

 

 (5) Swiping the entire image

  - activation map : 여러 개의 필터(convolutional layer)를 거친 출력 결과(channel)

 

  - activation map(28, 28, 6) :

    output size 28 = (input size 32 - filter size 5) / stride 1 + 1

    filter 개수 6

 

 (6) Convolutional layers

  - CONV를 거칠 때마다 크기가 작아지고 두꺼워짐

  - 두께는 필터의 개수, 색상, 채널(channel)을 의미함

 

3. Pooling (sampling, resizing)

 

 - Max Pooling : 여러 Pooling 기법 중 가장 많이 사용. 여러 개의 값 중 가장 큰 값을 꺼내서 모음

 

4. FC layer (Fully Connected Layer)

 - 아래 그림의 경우, 최종 결과물이 5개 중 하나 : softmax 사용 

 

 - CNN 동작을 시각적으로 보여주는 웹사이트 : https://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html

 

ConvNetJS CIFAR-10 demo

 

cs.stanford.edu

 

반응형
Posted by CCIBOMB
Deep Learning2020. 1. 3. 23:39
반응형

 김성훈 교수님의 [모두를 위한 딥러닝] 강의 정리

 - https://www.youtube.com/watch?reload=9&v=BS6O0zOGX4E&feature=youtu.be&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&fbclid=IwAR07UnOxQEOxSKkH6bQ8PzYj2vDop_J0Pbzkg3IVQeQ_zTKcXdNOwaSf_k0

 - 참고자료 : Andrew Ng's ML class

  1) https://class.coursera.org/ml-003/lecture

  2) http://holehouse.org/mlclass/ (note)



1. Softmax classifier for MNIST : Accuracy 0.9035

 - (중요 코드)

# weights & bias for softmax classifier
  hypothesis = tf.matmul(X, W) + b
# define cost/loss & optimizer
  cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=hypothesis, labels=Y))
  optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

 

 

2. NN for MNIST : Accuracy 0.9455

 - (중요 코드) 3단으로 늘림, ReLU 사용

# weights & bias for nn layers
W1 = tf.Variable(tf.random_normal([784, 256]))
b1 = tf.Variable(tf.random_normal([256]))
L1 = tf.nn.relu(tf.matmul(X, W1) + b1)
 
W2 = tf.Variable(tf.random_normal([256, 256]))
b2 = tf.Variable(tf.random_normal([256]))
L2 = tf.nn.relu(tf.matmul(L1, W2) + b2)
 
W3 = tf.Variable(tf.random_normal([256, 10]))
b3 = tf.Variable(tf.random_normal([10]))
hypothesis = tf.matmul(L2, W3) + b3
 
# define cost/loss & optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=hypothesis, labels=Y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

 

3. Xavier Initialization for MNIST (초기화를 잘 하기) : Accuracy 0.9779

 - (중요 코드) 초기값 initializer만 변경

# weights & bias for nn layers
# http://stackoverflow.com/questions/33640581/how-to-do-xavier-initialization-on-tensorflow
W1 = tf.get_variable("W1", shape=[784, 256],
initializer=tf.contrib.layers.xavier_initializer())
b1 = tf.Variable(tf.random_normal([256]))
L1 = tf.nn.relu(tf.matmul(X, W1) + b1)
 
W2 = tf.get_variable("W2", shape=[256, 256],
initializer=tf.contrib.layers.xavier_initializer())
b2 = tf.Variable(tf.random_normal([256]))
L2 = tf.nn.relu(tf.matmul(L1, W2) + b2)
 
W3 = tf.get_variable("W3", shape=[256, 10],
initializer=tf.contrib.layers.xavier_initializer())
b3 = tf.Variable(tf.random_normal([10]))
hypothesis = tf.matmul(L2, W3) + b3

 

4. Deep NN for MNIST : Accuracy 0.9742 

 - (중요 코드) 5단으로 늘림, 더 넓힘. 깊고 넓게~ => but 결과는 실망 (아마도 overfitting)..

# weights & bias for nn layers
# http://stackoverflow.com/questions/33640581/how-to-do-xavier-initialization-on-tensorflow
W1 = tf.get_variable("W1", shape=[784, 512],
initializer=tf.contrib.layers.xavier_initializer())
b1 = tf.Variable(tf.random_normal([512]))
L1 = tf.nn.relu(tf.matmul(X, W1) + b1)
 
W2 = tf.get_variable("W2", shape=[512, 512],
initializer=tf.contrib.layers.xavier_initializer())
b2 = tf.Variable(tf.random_normal([512]))
L2 = tf.nn.relu(tf.matmul(L1, W2) + b2)
 
W3 = tf.get_variable("W3", shape=[512, 512],
initializer=tf.contrib.layers.xavier_initializer())
b3 = tf.Variable(tf.random_normal([512]))
L3 = tf.nn.relu(tf.matmul(L2, W3) + b3)
 
W4 = tf.get_variable("W4", shape=[512, 512],
initializer=tf.contrib.layers.xavier_initializer())
b4 = tf.Variable(tf.random_normal([512]))
L4 = tf.nn.relu(tf.matmul(L3, W4) + b4)
 
W5 = tf.get_variable("W5", shape=[512, 10],
initializer=tf.contrib.layers.xavier_initializer())
b5 = tf.Variable(tf.random_normal([10]))
hypothesis = tf.matmul(L4, W5) + b5
 
# define cost/loss & optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
logits=hypothesis, labels=Y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

 

5. Dropout for MNIST : Accuracy 0.9804 

 - (중요 코드) 1개의 layer 추가만으로 tensorflow에서 구현 가능. 통상 0.5~0.7로 training 후 1로 testing!

W1 = tf.get_variable("W1", shape=[784, 512], initializer=tf.contrib.layers.xavier_initializer())
b1 = tf.Variable(tf.random_normal([512]))
L1 = tf.nn.relu(tf.matmul(X, W1) + b1)
L1 = tf.nn.dropout(L1, keep_prob=keep_prob)

...

# train my model
for epoch in range(training_epochs):
avg_cost = 0
 
for i in range(total_batch):
batch_xs, batch_ys = mnist.train.next_batch(batch_size)
feed_dict = {X: batch_xs, Y: batch_ys, keep_prob: 0.7}
c, _ = sess.run([cost, optimizer], feed_dict=feed_dict)
avg_cost += c / total_batch
 
print('Epoch:', '%04d' % (epoch + 1), 'cost =', '{:.9f}'.format(avg_cost))
 
print('Learning Finished!')
 
# Test model and check accuracy
correct_prediction = tf.equal(tf.argmax(hypothesis, 1), tf.argmax(Y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print('Accuracy:', sess.run(accuracy, feed_dict={
X: mnist.test.images, Y: mnist.test.labels, keep_prob: 1}))

 

6. Optimizers

 - GradientDescentOptimizer 外 어떤 알고리즘이 더 좋은지 Simulation 가능

- http://www.denizyuret.com/2015/03/alec-radfords-animations-for.html  

 

- Adam Optimizer를 처음 써보는 것을 추천 : 기존 코드에서 GradientDescentOptimizer -> AdamOptimizer로만 변경

#define cost/loss & optimizer
cost =tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=hypothesis, labels=Y))
optimizer =tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

 

반응형
Posted by CCIBOMB
Deep Learning2020. 1. 3. 23:24
반응형

 김성훈 교수님의 [모두를 위한 딥러닝] 강의 정리

 - https://www.youtube.com/watch?reload=9&v=BS6O0zOGX4E&feature=youtu.be&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&fbclid=IwAR07UnOxQEOxSKkH6bQ8PzYj2vDop_J0Pbzkg3IVQeQ_zTKcXdNOwaSf_k0

 - 참고자료 : Andrew Ng's ML class

  1) https://class.coursera.org/ml-003/lecture

  2) http://holehouse.org/mlclass/ (note)



1. Overfitting을 방지하는 3가지 방법

 (1) training data 많이 모으기

  - data가 많은 경우 training set, validation set, test set으로 나누어 진행 가능

  - 영역별 data 크기가 커지므로 overfitting 확률이 낮아짐

 (2) feature 개수 줄이기

  - 서로 비중이 다른 feature가 섞여서 weight 경합시 좋지 않은 결과가 나올 수 있음

  - deep learning은 sigmoid 대신 ReLU 함수를 이용하거나, dropout 등을 통해 해결 가능

 (3) regularization

  - weight이 너무 큰 값을 갖지 않도록 제한

 

2. Dropout

 - 전체 노드를 weight 계산에 참여시키지 않고, 일부만 참여시키는 아이디어

 

 - TensorFlow 구현 : relu 함수 호출 후 다음 layer에 전달하기 전 dropout 함수를 호출. 그 비율은 0~1 사이로 랜덤하게.

 

3. Ensemble (앙상블) :  최소 2%에서 4~5% 상당의 성능 향상을 보임

 1) 데이터를 여러개의 training set으로 나누어 동시에 학습을 진행

 2) 모든 학습이 끝나면 결과를 통합

반응형
Posted by CCIBOMB
Deep Learning2020. 1. 2. 22:30
반응형

 김성훈 교수님의 [모두를 위한 딥러닝] 강의 정리

 - https://www.youtube.com/watch?reload=9&v=BS6O0zOGX4E&feature=youtu.be&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&fbclid=IwAR07UnOxQEOxSKkH6bQ8PzYj2vDop_J0Pbzkg3IVQeQ_zTKcXdNOwaSf_k0

 - 참고자료 : Andrew Ng's ML class

  1) https://class.coursera.org/ml-003/lecture

  2) http://holehouse.org/mlclass/ (note)



1. 모든 wieght 초기값을 0으로 설정한다면,

 - deep learning 알고리즘은 동작하지 않음

 

2. RBM(Restricted Boltzmann Machine)을 이용한 weight 초기화

 - Hinton et al. (2006) "A Fast Learning Algorightm for Deep Belief Nets" - Restricted Boltzmann Machine

 - Restriction = 같은 layer 안 어떤 연결도 존재하지 않음

 

 - forward : 현재 layer에 들어온 x값에 대해 weight을 계산한 값을 다음 layer에 전달
   backward : 전달받은 값을 거꾸로 현재 layer에 weight 값을 계산하여 전달

 - forward, backward 계산을 반복하여 최초 전달된 x와 에측한 값(x hat)간 차이가 최소가 되는 weight 발견

 

 - deep belief net : 이러한 RBM 방식으로 초기화된 모델

 - Fine Tuning : 이러한 방식으로 초기화하여 학습(learning)을 시작하면 시간이 매우 단축됨

 

3. Xavier/He initialization

 - Xavier : 입력값(fan_in)과 출력값(fan_out) 사이 난수를 선택하여 입력값의 제곱근으로 나눔

 - He : 입력값을 반으로 나눈 제곱급을 사용함. (Xavier보다 넓은 범위의 난수를 생성)

 

4. 그 밖에 다양한 초기화 방법

반응형
Posted by CCIBOMB
Deep Learning2019. 12. 23. 23:43
반응형

 김성훈 교수님의 [모두를 위한 딥러닝] 강의 정리

 - https://www.youtube.com/watch?reload=9&v=BS6O0zOGX4E&feature=youtu.be&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&fbclid=IwAR07UnOxQEOxSKkH6bQ8PzYj2vDop_J0Pbzkg3IVQeQ_zTKcXdNOwaSf_k0

 - 참고자료 : Andrew Ng's ML class

  1) https://class.coursera.org/ml-003/lecture

  2) http://holehouse.org/mlclass/ (note)

 

 

1. TensorBoard

 - TensorFlow가 동작하는 방식을 시각화해줌

 - 기존 콘솔방식

 - TensorBoard를 이용한 방식

 

2. TensorBorad를 이용하기 위한 5가지 단계

 (1) 로그를 남기고 싶은 텐서를 선택

 (2) 한 군데로 모음

 (3) 특정 파일에 기록

 (4) run 함수로 구동한 결과를 add_summary로 추가

 (5) tensorboard 명령으로 결과 확인

   - terminal command line에서 해당 명령어 입력

   - ssh port forwarding을 통해, 원격에서도 확인 가능

 

3. TensorBorad 실행결과

 - Scalars, Images, Audio, Graphs, Distributions, historgrams, Embeddings 등 확인 가능

 

4. TensorBoard에서 다양한 조건 실행결과 비교

 - 서로 다른 파일에 로그를 저장하여, 다른 조건에서 실행한 결과를 비교 가능 (ex. learning rate를 달리한 경우)

반응형
Posted by CCIBOMB
Deep Learning2019. 12. 23. 23:02
반응형

 김성훈 교수님의 [모두를 위한 딥러닝] 강의 정리

 - https://www.youtube.com/watch?reload=9&v=BS6O0zOGX4E&feature=youtu.be&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&fbclid=IwAR07UnOxQEOxSKkH6bQ8PzYj2vDop_J0Pbzkg3IVQeQ_zTKcXdNOwaSf_k0

 - 참고자료 : Andrew Ng's ML class

  1) https://class.coursera.org/ml-003/lecture

  2) http://holehouse.org/mlclass/ (note)

 

1. XOR 알고리즘을 딥러닝으로 풀기 (원리)

 - 논리적으로 매우 간단하지만 초창기 Neural Network에 큰 난관이 됨

 - 하나의 Neural Network unit으로는 XOR 문제를 풀 수 없음 (수학적 증명)

 - 그러나, 여러개의 Neural Network unit으로 XOR 문제 해결이 가능함

 - 위의 unit을 하나로 합쳐서 표시하면, 다음과 같음

 - 여러개의 logistic regression을 하나의 multinomial classification으로 변환 (행렬 이용)

 - 복잡한 네트워크의 weight, bias는 학습이 불가능한 문제가 있었으나, backpropagation으로 해결 가능함

 - 여러 개의 노드들이 있어 복잡한 경우에도 동일함

 

2. Sigmoid (시그모이드)

 - Logistic regression 또는 Neural network의 Binary classification 마지막 레이어의 활성함수로 사용

 - 시그모이드 함수의 그래프

 - 시그모이드 함수의 미분 (뒤에서부터 순서대로 미분해 나가면 됨)

 - Back propagation 미분을 위한 'TensorFlow'에서의 구현 방식 확인 (TensorBoard에서 확인 가능)

 

3. XOR 알고리즘을 딥러닝으로 풀기 (TensorFlow 구현)

 (1) XOR 문제를 logistic regression으로 풀기

 - 전체 소스코드

import tensorflow as tf
import numpy as np
 
tf.set_random_seed(777) # for reproducibility
 
x_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.float32)
y_data = np.array([[0], [1], [1], [0]], dtype=np.float32)
 
X = tf.placeholder(tf.float32, [None, 2])
Y = tf.placeholder(tf.float32, [None, 1])
 
W = tf.Variable(tf.random_normal([2, 1]), name="weight")
b = tf.Variable(tf.random_normal([1]), name="bias")
 
# Hypothesis using sigmoid: tf.div(1., 1. + tf.exp(tf.matmul(X, W)))
hypothesis = tf.sigmoid(tf.matmul(X, W) + b)
 
# cost/loss function
cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))
train = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(cost)
 
# Accuracy computation
# True if hypothesis>0.5 else False
predicted = tf.cast(hypothesis > 0.5, dtype=tf.float32)
accuracy = tf.reduce_mean(tf.cast(tf.equal(predicted, Y), dtype=tf.float32))
 
# Launch graph
with tf.Session() as sess:
# Initialize TensorFlow variables
sess.run(tf.global_variables_initializer())
 
for step in range(10001):
_, cost_val, w_val = sess.run(
[train, cost, W], feed_dict={X: x_data, Y: y_data}
)
if step % 100 == 0:
print(step, cost_val, w_val)
 
# Accuracy report
h, c, a = sess.run(
[hypothesis, predicted, accuracy], feed_dict={X: x_data, Y: y_data}
)
print("\nHypothesis: ", h, "\nCorrect: ", c, "\nAccuracy: ", a)

 

 - 결과값

Hypothesis: [[ 0.5]
[ 0.5]
[ 0.5]
[ 0.5]]
Correct: [[ 0.]
[ 0.]
[ 0.]
[ 0.]]
Accuracy: 0.5

 

 (2) XOR 문제를 Neural Net으로 풀기

 - 기존의 소스코드와 동일하나 L1, W2, b2 부분 유의

 - 상기 부분만 수정하였음에도 정확도가 100%로 향상됨

 - 전체 소스코드

import tensorflow as tf
import numpy as np
 
tf.set_random_seed(777) # for reproducibility
 
x_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.float32)
y_data = np.array([[0], [1], [1], [0]], dtype=np.float32)
 
X = tf.placeholder(tf.float32, [None, 2])
Y = tf.placeholder(tf.float32, [None, 1])
 
W1 = tf.Variable(tf.random_normal([2, 2]), name='weight1')
b1 = tf.Variable(tf.random_normal([2]), name='bias1')
layer1 = tf.sigmoid(tf.matmul(X, W1) + b1)
 
W2 = tf.Variable(tf.random_normal([2, 1]), name='weight2')
b2 = tf.Variable(tf.random_normal([1]), name='bias2')
hypothesis = tf.sigmoid(tf.matmul(layer1, W2) + b2)
 
# cost/loss function
cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))
train = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(cost)
 
# Accuracy computation
# True if hypothesis>0.5 else False
predicted = tf.cast(hypothesis > 0.5, dtype=tf.float32)
accuracy = tf.reduce_mean(tf.cast(tf.equal(predicted, Y), dtype=tf.float32))
 
# Launch graph
with tf.Session() as sess:
# Initialize TensorFlow variables
sess.run(tf.global_variables_initializer())
 
for step in range(10001):
_, cost_val = sess.run([train, cost], feed_dict={X: x_data, Y: y_data})
if step % 100 == 0:
print(step, cost_val)
 
# Accuracy report
h, p, a = sess.run(
[hypothesis, predicted, accuracy], feed_dict={X: x_data, Y: y_data}
)
 
print(f"\nHypothesis:\n{h} \nPredicted:\n{p} \nAccuracy:\n{a}")

 

 - 결과값

Hypothesis:
[[0.01338216]
[0.98166394]
[0.98809403]
[0.01135799]]
Predicted:
[[0.]
[1.]
[1.]
[0.]]
Accuracy:
1.0
'''

 

 (3) XOR 문제를 Wide Neural Net으로 풀기

 - Layer의 입력값이 많아지도록 하여, 이미지의 출력값을 증가시킴 -> Hypothesis가 향상됨 (Cost가 줄어듬)

 - Wide하거나 Deep하게 학습을 시키는 경우 Cost 값이 대부분 작아짐

 - 그러나 너무 잘 맞게 학습되는 경우, Overfitting 현상이 발생 가능함

 

 (4) XOR 문제를 Deep Neural Net으로 풀기

 - NN과 동일한 방법으로 단계를 여러번 반복함

 

반응형
Posted by CCIBOMB
Deep Learning2019. 12. 18. 23:04
반응형

 김성훈 교수님의 [모두를 위한 딥러닝] 강의 정리

 - https://www.youtube.com/watch?reload=9&v=BS6O0zOGX4E&feature=youtu.be&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&fbclid=IwAR07UnOxQEOxSKkH6bQ8PzYj2vDop_J0Pbzkg3IVQeQ_zTKcXdNOwaSf_k0

 - 참고자료 : Andrew Ng's ML class

  1) https://class.coursera.org/ml-003/lecture

  2) http://holehouse.org/mlclass/ (note)

 

1. Shape, Rank, Axis

 - Rank : 행렬의 차원(dimension). 1차원인 경우 1, 2차원인 경우 2.

            대괄호 '['의 개수를 세면 됨

 - Axis : 축. 가장 바깥 대괄호의 axis = 0 가장 안쪽의 axis = rank -1

 - Shape : 행렬의 구조. 행렬 형태의 표시방법(행렬츼 차원 및 요소가 몇개인지)

 

 

2. Broadcasting # 사용시 유의!

 

3. Reduce mean, Reduce sum

 - integer 인지 float 인지에 따라 결과값 달라짐을 주의해야 함

 - axis(축)에 따라 결과값 달라짐도 주의해야 함

 

4. Argmax

 - 가장 큰 값이 있는 위치를 구함

 

5. Reshape

 - reshape은 원하는 shape를 직접 입력하여 바꿀 수 있음

 - shape에 -1을 입력하면 고정된 차원을 채우고 남은 부분을 알아서 채워줌

 

 - Reshape (squeeze, expand)

   squeeze : 차원 중 사이즈가 1인 것을 찾아 스칼라값으로 바꿔 해당 차원을 제거함

   expand_dims : axis로 지정된 차원을 추가함

 

6. One hot

 - 입력받은 행렬보다 마지막에 한차원이 증가함

 - reshape을 통해 다시 증가한 차원을 줄여줄 수 있음 

 

7. Casting

 - Tensor를 새로운 형태로 캐스팅하는데 사용함

 - 부동소수점형(float)에서 정수형(int)으로 바꾼 경우 소수점 버림

 - Boolean 형태인 경우 True이면 1, False이면 0을 반환

 

8. Stack

 - 여러 조각의 행렬을 합침

 - axis = 0 / axis = 1에 따라 stack을 쌓는 방식이 달라짐

 

9. ones_like, leros_like

 - 주어진 shape과 동일하게 0 또는 1을 채운 행렬을 만듦

 

10. Zip

 - 여러 개의 Tensor를 한번에 추출

반응형
Posted by CCIBOMB
Deep Learning2019. 12. 2. 22:04
반응형

 김성훈 교수님의 [모두를 위한 딥러닝] 강의 정리

 - https://www.youtube.com/watch?reload=9&v=BS6O0zOGX4E&feature=youtu.be&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&fbclid=IwAR07UnOxQEOxSKkH6bQ8PzYj2vDop_J0Pbzkg3IVQeQ_zTKcXdNOwaSf_k0

 - 참고자료 : Andrew Ng's ML class

  1) https://class.coursera.org/ml-003/lecture

  2) http://holehouse.org/mlclass/ (note)

 



1. Loading data from file

import tensorflow as tf
import numpy as np
tf.set_random_seed(777) # for reproducibility
 
xy = np.loadtxt('data-01-test-score.csv', delimiter=',', dtype=np.float32)
x_data = xy[:, 0:-1]
y_data = xy[:, [-1]]
 
# Make sure the shape and data are OK
print(x_data, "\nx_data shape:", x_data.shape)
print(y_data, "\ny_data shape:", y_data.shape)
# placeholders for a tensor that will be always fed.
X = tf.placeholder(tf.float32, shape=[None, 3])
Y = tf.placeholder(tf.float32, shape=[None, 1])
 
W = tf.Variable(tf.random_normal([3, 1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
 
# Hypothesis
hypothesis = tf.matmul(X, W) + b
 
# Simplified cost/loss function
cost = tf.reduce_mean(tf.square(hypothesis - Y))
 
# Minimize
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5)
train = optimizer.minimize(cost)
 
# Launch the graph in a session.
sess = tf.Session()
# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())
 
for step in range(2001):
cost_val, hy_val, _ = sess.run([cost, hypothesis, train],
feed_dict={X: x_data, Y: y_data})
if step % 10 == 0:
print(step, "Cost:", cost_val, "\nPrediction:\n", hy_val)

1950, Cost: 2.8077145

Prediction:

array([[154.30186],
       [183.31505],
       [181.97646],
       [194.59978],
       [142.33385],
       [ 99.34767]], dtype=float32))

1960, Cost: 2.7977974

Prediction:

array([[154.296  ],
       [183.31776],
       [181.97401],
       [194.59859],
       [142.33716],
       [ 99.35353]], dtype=float32))

1970, Cost: 2.787885

Prediction:

array([[154.29016],
       [183.32051],
       [181.97154],
       [194.5974 ],
       [142.34042],
       [ 99.35938]], dtype=float32))

1980, Cost: 2.778064

Prediction:

array([[154.28435],
       [183.32324],
       [181.9691 ],
       [194.59624],
       [142.3437 ],
       [ 99.3652 ]], dtype=float32))

1990, Cost: 2.7683241

Prediction:

array([[154.27856],
       [183.32594],
       [181.96667],
       [194.59506],
       [142.34695],
       [ 99.37102]], dtype=float32))

2000, Cost: 2.7586195

Prediction:

array([[154.27278 ],
       [183.32866 ],
       [181.96426 ],
       [194.5939  ],
       [142.35019 ],
       [ 99.376816]], dtype=float32))

 

2. Loading data from multi-file

import tensorflow as tf
tf.set_random_seed(777) # for reproducibility
 
filename_queue = tf.train.string_input_producer(
['data-01-test-score.csv'], shuffle=False, name='filename_queue')
 
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
 
# Default values, in case of empty columns. Also specifies the type of the
# decoded result.
record_defaults = [[0.], [0.], [0.], [0.]]
xy = tf.decode_csv(value, record_defaults=record_defaults)
 
# collect batches of csv in
train_x_batch, train_y_batch = \
tf.train.batch([xy[0:-1], xy[-1:]], batch_size=10)
 
# placeholders for a tensor that will be always fed.
X = tf.placeholder(tf.float32, shape=[None, 3])
Y = tf.placeholder(tf.float32, shape=[None, 1])
 
W = tf.Variable(tf.random_normal([3, 1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
 
# Hypothesis
hypothesis = tf.matmul(X, W) + b
 
# Simplified cost/loss function
cost = tf.reduce_mean(tf.square(hypothesis - Y))
 
# Minimize
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5)
train = optimizer.minimize(cost)
 
# Launch the graph in a session.
sess = tf.Session()
# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())
 
# Start populating the filename queue.
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
 
for step in range(2001):
x_batch, y_batch = sess.run([train_x_batch, train_y_batch])
cost_val, hy_val, _ = sess.run(
[cost, hypothesis, train], feed_dict={X: x_batch, Y: y_batch})
if step % 10 == 0:
print(step, "Cost: ", cost_val, "\nPrediction:\n", hy_val)
 
coord.request_stop()
coord.join(threads)
 
# Ask my score
print("Your score will be ",
sess.run(hypothesis, feed_dict={X: [[100, 70, 101]]}))
 
print("Other scores will be ",
sess.run(hypothesis, feed_dict={X: [[60, 70, 110], [90, 100, 80]]}))

1980, Cost: 2.2382462

Prediction:

array([[152.35132],
       [183.37514],
       [180.53424],
       [197.20535],
       [139.35315],
       [103.52445],
       [152.35132],
       [183.37514],
       [180.53424],
       [197.20535]], dtype=float32))

1990, Cost: 3.407795

Prediction:

array([[139.34067],
       [103.51443],
       [152.33455],
       [183.35727],
       [180.5155 ],
       [197.18425],
       [139.34067],
       [103.51443],
       [152.33455],
       [183.35727]], dtype=float32))

2000, Cost: 3.3214183

Prediction:

array([[180.62273],
       [197.30028],
       [139.42564],
       [103.57615],
       [152.42416],
       [183.46718],
       [180.62273],
       [197.30028],
       [139.42564],
       [103.57615]], dtype=float32))

'Your score will be ', array([[182.8681]], dtype=float32))
'Other scores will be ', array([[169.80573], [177.92252]], dtype=float32))

반응형
Posted by CCIBOMB
Deep Learning2019. 11. 29. 19:47
반응형

 김성훈 교수님의 [모두를 위한 딥러닝] 강의 정리

 - https://www.youtube.com/watch?reload=9&v=BS6O0zOGX4E&feature=youtu.be&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&fbclid=IwAR07UnOxQEOxSKkH6bQ8PzYj2vDop_J0Pbzkg3IVQeQ_zTKcXdNOwaSf_k0

 - 참고자료 : Andrew Ng's ML class

  1) https://class.coursera.org/ml-003/lecture

  2) http://holehouse.org/mlclass/ (note)



1. Hypothesis using matrix

 - H(x1, x2, x3) = x1w1 + x2w2 + x3w3

 -> H(X) = XW

 

2. tensorflow 구현

 2-1. 기존 방법

import tensorflow as tf
tf.set_random_seed(777) # for reproducibility
 
x1_data = [73., 93., 89., 96., 73.]
x2_data = [80., 88., 91., 98., 66.]
x3_data = [75., 93., 90., 100., 70.]
 
y_data = [152., 185., 180., 196., 142.]
 
# placeholders for a tensor that will be always fed.
x1 = tf.placeholder(tf.float32)
x2 = tf.placeholder(tf.float32)
x3 = tf.placeholder(tf.float32)
 
Y = tf.placeholder(tf.float32)
 
w1 = tf.Variable(tf.random_normal([1]), name='weight1')
w2 = tf.Variable(tf.random_normal([1]), name='weight2')
w3 = tf.Variable(tf.random_normal([1]), name='weight3')
b = tf.Variable(tf.random_normal([1]), name='bias')
 
hypothesis = x1 * w1 + x2 * w2 + x3 * w3 + b
 
# cost/loss function
cost = tf.reduce_mean(tf.square(hypothesis - Y))
 
# Minimize. Need a very small learning rate for this data set
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5)
train = optimizer.minimize(cost)
 
# Launch the graph in a session.
sess = tf.Session()
# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())
 
for step in range(2001):
cost_val, hy_val, _ = sess.run([cost, hypothesis, train],
feed_dict={x1: x1_data, x2: x2_data, x3: x3_data, Y: y_data})
if step % 10 == 0:
print(step, "Cost: ", cost_val, "\nPrediction:\n", hy_val)

 

 2-2. matrix 이용

import tensorflow as tf
tf.set_random_seed(777) # for reproducibility
 
x_data = [[73., 80., 75.],
[93., 88., 93.],
[89., 91., 90.],
[96., 98., 100.],
[73., 66., 70.]]
y_data = [[152.],
[185.],
[180.],
[196.],
[142.]]
 
 
# placeholders for a tensor that will be always fed.
X = tf.placeholder(tf.float32, shape=[None, 3])
Y = tf.placeholder(tf.float32, shape=[None, 1])
 
W = tf.Variable(tf.random_normal([3, 1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
 
# Hypothesis
hypothesis = tf.matmul(X, W) + b
 
# Simplified cost/loss function
cost = tf.reduce_mean(tf.square(hypothesis - Y))
 
# Minimize
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5)
train = optimizer.minimize(cost)
 
# Launch the graph in a session.
sess = tf.Session()
# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())
 
for step in range(2001):
cost_val, hy_val, _ = sess.run(
[cost, hypothesis, train], feed_dict={X: x_data, Y: y_data})
if step % 10 == 0:
print(step, "Cost: ", cost_val, "\nPrediction:\n", hy_val)

 

 

반응형
Posted by CCIBOMB