SW/딥러닝

10. 딥러닝 : 텐서플로우 2.0 : 기본 예제 : 모델 선언 방법

얇은생각 2020. 2. 27. 07:30
반응형

텐서플로우

 

 

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf

observations = 1000

xs = np.random.uniform(low=-10, high=10, size=(observations,1))
zs = np.random.uniform(-10, 10, (observations,1))

generated_inputs = np.column_stack((xs,zs))

noise = np.random.uniform(-1, 1, (observations,1))

generated_targets = 2*xs - 3*zs + 5 + noise

np.savez('TF_intro', inputs=generated_inputs, targets=generated_targets)

 

 

 

training_data = np.load('TF_intro.npz')

 

저장한 NPC 파일의 데이터를 로드하는 것부터 시작하겠습니다. 이 단계를 건너뛸 수 있었지만 NPC에서 데이터를 로드하는 데 익숙해지는 것이 좋습니다. 일반적으로 이러한 방법으로 제공될 수 있기 때문입니다.

 

 

 

input_size = 2
output_size = 1

model = tf.keras.Sequential([
                            tf.keras.layers.Dense(output_size)
                            ])

model.compile(optimizer='sgd', loss='mean_squared_error')

model.fit(training_data['inputs'], training_data['targets'], epochs=100, verbose=0)

 

다음으로 앞서 살펴본 XS와 ZIS의 입력 변수가 두 개이고 출력 크기가 1이기 때문에 입력 크기를 측정하는 두 변수를 만들겠습니다. 이 두 줄의 코드는 변수 입력 크기와 출력 크기에 값 2와 1을 할당합니다.

텐서플로우를 사용할 때 모델에 내장되어 있는 다른 패키지와는 달리, 우리는 실제로 모델을 제작해야 합니다. 모델을 만들어 모델이라는 변수에 저장해 봅시다. 케라스의 방식과 같습니다. 마지막으로 순차적 기능은 알고리즘에 포함시키고자 하는 서로 다른 계층의 인수로써 모델을 배치하고 있음을 나타내는 함수입니다.

아직 레이어에 대해서는 이야기 하지 않았습니다. 이러한 방식은 알고리즘은 단순한 구조를 가지고 있습니다.

입력은 단일 선형 변환을 적용하고 출력을 제공합니다. 이러한 선형 조합과 출력은 소위 출력 레이어를 구성합니다.

NUMPY의 예제에서는 출력이 입력 및 가중치에 편향을 더한 것과 동일하다는 것을 알 수 있습니다.

케라스의 레이어로부터 Dense라고 불리는 메소드는 제공된 입력을 취하여 입력과 가중치의 값을 계산하고 바이어스를 추가합니다. 따라서 출력 크기를 지정해야 합니다.

변수를 이미 분류하여 해당 변수를 인수로 배치하여 코드를 매개변수화할 수 있습니다. 그것만으로도 모델 사양에는 완전히 충분합니다.

이제 이론적으로 객관적 기능과 최적화 알고리즘을 갖춘 데이터가 필요합니다. 데이터와 모델을 처리했고, 그것을 명시할 수 있는 방법을 컴파일이라고 부릅니다. 따라서 model.compile에는 여러 가지 인수가 포함됩니다.

최적화 알고리즘 SGD는 확률적 강하(stonchasticgradient down)를 의미하며, 그라데이션 강하 개념을 일반화하기 위해 약칭됩니다. 본 포스팅의 후반부에서 차이점에 대해 자세히 알아보겠습니다. 문자열이 필요한 고급 패키지를 사용할 때 Optimizer를 쓰는 인수로 추가하지 마십시오.

Optimizer는 따옴표와 현재 사용할 Optimizer의 문자열 이름과 같습니다. 케라스의 Optimizer를 확인하면 다양한 Optimizer의 이름 목록이 표시됩니다. 이 해당 사이트에서 원하는 Optimizer의 정확한 이름을 확인할 수 있습니다. 이 예에서는 SGD와 같은 것입니다. 물론 다른 최적화 도구도 나중에 사용해보도록 하겠습니다.

두 번째 인수는 가능한 한 목표에 가깝게 만들고자 하는 손실 함수입니다. 따라서 관측치 수에 따라 L2 Norm loss 척도를 사용해야 합니다. 이런 경우에는 이론적 이해가 필요합니다. L2 Norm 손실은 최소 제곱합이라고도 합니다. 또한 관측 개수에 의한 배율은 평균 또는 평균을 찾는 것과 동일합니다. 가능한 손실을 살펴보는 것은 제곱 오차를 의미하며 제곱 오차가 정확하게 L2임을 의미합니다.

관측치 수에 따른 정규 손실 척도입니다. 이를 염두에 두고 제곱 오류를 의미하는 것과 동일한 인수 손실을 포함하도록 합니다. 객관적 기능 및 최적화 알고리즘을 선택하여 모델의 개요를 로드하고 학습 프로세스를 구성했습니다. 이제 남은 것은 어떤 데이터에 적합해야 하는지 모델에 표시하는 것입니다.

다른 많은 라이브러리들과 마찬가지로 텐서는 두 개의 필수 인수를 가진 적합 메소드를 사용했습니다. 가변 교육 데이터의 입력 텐서에 포함된 입력과 교육 데이터의 대상 텐서에 포함된 대상을 지정해야 합니다.

model.fit은 반복 횟수를 설정하는 이기도 합니다. 기계 학습에서 전체 데이터 집합에 대한 각 반복을 하나의 epoch라고 합니다. 지금부터 이 용어를 반복과 횟수를 설명하는 데 사용할 것입니다.

이제 epoch의 수를 100으로 설정하겠습니다. 마지막으로 verbose은 0으로 설정하겠습니다. 다음 포스팅에서는 해당 결과를 가지고 논의해보도록 하겠습니다.

반응형