본문 바로가기

[프로그래밍]

(11)
[Numpy] numpy 기초 numpy란 무엇인가?¶ Numpy는 C언어로 구현된 파이썬 라이브러리로써, 고성능의 수치계산을 위해 제작되었습니다. Numerical Python의 줄임말이기도 한 Numpy는 벡터 및 행렬 연산에 있어서 매우 편리한 기능을 제공합니다. 또한 이는 데이터분석을 할 때 사용되는 라이브러리인 pandas와 matplotlib의 기반으로 사용되기도 합니다. numpy에서는 기본적으로 array라는 단위로 데이터를 관리하며 이에 대해 연산을 수행합니다. array는 말그대로 행렬이라는 개념으로 생각하시면 됩니다. 먼저 numpy를 사용하기 위해서는 아래와 같은 코드로 numpy를 import해야 합니다. import Library¶ In [4]: import numpy as np array 정의 및 사용¶ I..
[모두를위한딥러닝] 딥러닝 예측 값 높이기 1. Weight Initialization Xavier만 사용을 해도 최적의 Weight를 찾아내어 초기 Cost를 확실하게 잡아줄 수 있다. 파이썬 예시 코드 W = tf.get_variable("W", shape=[784, 256], initializer=tf.contrib.layers.xavier_initializer()) 2. Overfiting 학습 할 데이터를 전부 학습시켜서 새로운 샘플에 대해서 제대로 측정을 못하는 경우 이를 방지하기 위해 dropout을 사용하여 네트워크를 오버피팅 하지 않도록 한다. 1번과 2번에 대해 MNIST 예제로 적용 한 파이썬 코드 - 5계의 계층 - Xavier 적용 - dropout 적용 # input place holders X = tf.placehold..
[모두를위한딥러닝] Dropout과 앙상블 Dropout 학습을 할때 모든 노드를 전부 활용하지 않고 몇개의 노드는 끊어서 활용한다. 랜덤하게 어떤 뉴런을 삭제한다는 의미이다. 이런 방식이 왜 좋은가? 학습을 시킬 때 모든 요소들을 전부 학습 시키기 보다는 그 중 몇개 요소만 학습 시키고 나머지는 테스트에 활용한다. 그리고, 나서 다시 모든 요소를 다 활용하면은 최적의 결과가 있을 수 있다는 것이다. 파이썬 예제 코드는 다음과 같다. 학습을 시킬 땐, keep_prob를 0.7로 두어 일부 요소만 학습하도록 두고 실제 측정하고자 할 경우엔 keep_prob를 1로 둔다. # Lab 10 MNIST and Dropout import tensorflow as tf import random # import matplotlib.pyplot as plt ..
[모두를위한딥러닝] Weight 초기화를 잘해보자 weights에 대한 초기값은 매우 중요하다. 딥러닝에서 각 Layer간에 weights 값이 어떠한지도 매우 중요하다. Weight에 대한 값을 인풋으로 주었을 때 반대로 Weight가 원하는 방향으로 잘 적용되었는지 판단하기 위해 반대로 Layer 2-> Layer 1로 역계산하여 원래의 Layer 1에서 사용된 Weight 값을 추출한다. 즉, Layer 1 -> Layer 2에서 활용된 Weight에 대한 정확성을 보기 위해 Layer 2 -> Layer 1로 역계산하여 Layer 1의 Weight를 추출하는 것이다. 이러한 방식이라면 초기 Weight 값에 대한 선언을 Labels 만을 주어서 알아서 선언 할 수 있게 해줄 수도 있다. 그것이 바로 Find Tunning이라 부른다. Labels..
[모두를위한딥러닝] ReLU? ReLU에 대한 설명 이전에 ReLU의 등장 배경은 바로 Backpropagation 룰 때문이다. Layer의 수가 많으면 많을 수록 학습된 결과에 대해서 정확도가 높아야하는데 오히려 정확도가 떨어진다는 것이다. 이유는 경사에 대한 기울기가 사라진다는 것인데, 시그모이드 함수를 사용할 경우 결괏값에 대해서 Layer가 많을 수록 0에 수렴해진다는 것이다. 시그모이드의 값이 항상 0보단 크고 1보단 작은 값으로 Layer에 대한 결괏값을 또 다시 시그모이드에 대한 인풋으로 넣으면 값이 너무 작아진다는 것이다. 즉, 시그모이드의 1보다 작은 결괏값을 또 다음 계층의 시그모이드에 인풋으로 넣고 그 결괏값을 또 다음 계층의 시그모이드 인풋을 넣고 하는 행위를 많이 하다보면 값이 제대로 성립되지 않는다는 것이다..
[모두를위한딥러닝] 텐서보드(TensorBoard)로 딥러닝 해보기 텐서보드를 통해서 텐서의 그래프와 학습되는 과정을 시각화해서 볼 수 있다. 텐서보드는 다음과 같은 방법으로 구현할 수 있다. Step 1 어떤 텐서를 로깅할 지 히스토그램으로 정의한다. 파이썬 코드는 다음과 같다. with tf.name_scope("Layer1"): W1 = tf.Variable(tf.random_normal([2, 2]), name="weight_1") b1 = tf.Variable(tf.random_normal([2]), name="bias_1") layer1 = tf.sigmoid(tf.matmul(X, W1) + b1) tf.summary.histogram("W1", W1) tf.summary.histogram("b1", b1) tf.summary.histogram("Layer1..
[모두를위한딥러닝] XOR 문제를 딥러닝으로 풀기 Neural Network 하나로는 XOR 문제를 해결 할 수 없다. 그렇기에 다중 Neural Network로 이것을 해결하고자 하는데 이것이 딥러닝의 시작이다. 기존에 머신러닝이 XOR을 해결하고자 한다면 에러가 난다. 이론상으로 해결할 수가 없기 때문이다. X1 X2 Y 1 0 0 0 1 0 그렇기에 연구자들은 딥러닝 hidden Layer라는 개념을 도입한다. 아래와 같이 가정해보자 hidden layer 1 ==> w=[5,5] b=-8 hidden layer 2 ==> w=[-7,-7], b=3 hidden layer 3 ==> w=[-11,-11], b=6 그리고 X의 xor에 들어가는 인자라고 하고 결과 값을 구해보자 hidden layer 1 ==> W*x +b ==> 0+5-8 =-3 ..
[모두를위한딥러닝] 텐서(Tensor) 연산 기본 사용 명령어 Matmul 행렬을 곱할 땐 두 개의 곱에 대해서 끝이 맞아야 한다. matrix1=tf.constant([[1.,2.],[3.,4.]]) matrix2=tf.constant([[1.],[2.]]) tf.matmul(matrix1,matrix2).eval() 위는 (2,2) 행렬(x)과 (2,1) 행렬(y)을 곱하는데 곱한 결과는 y의 shape와 동일 하도록 해야한다. Broadcasting 행렬 요소 안에 있는 값을 포함하여 행렬 간 합을 구할 경우 사용한다. matrix1=tf.constant([[1.,2.],[3.,4.]]) matrix2=tf.constant([[1.],[2.]]) tf.matmul(matrix1,matrix2).eval() array([[ 5., 5.], [ 5., 5.]], ..