본문 바로가기

SW/딥러닝

11. 딥러닝 : 텐서플로우 2.0 : 기본 예제 : 코드 해석

반응형
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')

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=2)

 

마지막 강의에서 저장 한 NPC 파일에서 데이터를 로드하는 것으로 시작하겠습니다. NPC의 데이터는 일반적으로 제공되는 방식이므로 입력의 크기를 측정하고 입력 크기를 출력하는 두 개의 변수를 만들어 두 가지 입력 변수가 있으므로 앞에서 본 XS와 ZS가 있습니다.

이 두 줄의 코드는 변수 입력 크기와 출력 크기에 값 2와 1을 할당합니다. 이것은 이미 익숙한 프로그래밍이므로 지금까지 새로운 것은 없습니다.

텐서 플로우를 사용할 때 모델에 내장된 다른 패키지와 달리 실제로 모델을 빌드해야하므로 모델을 빌드하고 Model 모델이라는 변수에 저장하였습니다.

알고리즘에 포함시키고 다른 레이어들에 대해 논의해보겠습니다. 레이어에 대해 이야기하지는 않았지만 구축하는 알고리즘은 간단한 구조를 가지고 있습니다. 입력은 단일 선형 레이어를 적용하고 출력을 제공합니다.

NUMPY의 최소 예제에서 출력이 입력과 가중치의 내적과 바이어스를 더한 것과 같습니다.

그다음 출력 크기를 지정합니다. 이미 변수로 정렬되어 있으므로 변수를 인수로 배치하여 코드를 매개 변수화 할 수 있습니다. 프레임 워크에 따라 데이터가 필요합니다. 객관적인 함수와 최적화 알고리즘을 모델링했습니다. 데이터와 모델을 처리하고 그것을 지정할 수있는 방법으로 남겨 두었습니다. 컴파일이라고 부릅니다.

SGD가 확률적 하강을 의미하고 이미 배운 그라디언트 하강 개념의 일반화로 사용되는 옵티마이저 또는 최적화 알고리즘은 축약되어 있습니다. 인수로 우리는 옵티 마이저를 따옴표와 같고 문자열이 필요한 고급 패키지를 사용할 때 지금 사용하려는 옵티마이저의 문자열 이름과 같습니다.

온라인으로 가서 케라스의 최적화를 확인하면 다른 옵티마이저의 목록이 표시됩니다. 이 부분은 사용하려는 옵티마이 저의 정확한 이름을 확인할 수 있는 곳입니다. 물론 SGD와 같은 이 예제에서는 대부분의 다른 옵티 마이저를 다룰 것입니다. 두 번째 논점은 num py 최소 예제에 최대한 가깝게 만들고자 하는 손실 함수입니다. L2 Norm 손실 척도는 관측치 로 사용해야합니다. L2 Norm 손실은 최소 제곱합이라고도 합니다. 측정한 손실의 평균 또는 평균 제곱 오차를 의미하고 제곱 오차가 정확히 L2임을 의미합니다.

관측치에 따른 손실 척도. 이를 염두에 두고, 제곱 오차를 의미하는 인수 손실을 포함하도록 하겠습니다. 데이터 개요에 모델을 로드하고 학습 과정을 구성하여 거의 어떤 데이터에 적합한 모델인지를 나타내는 것입니다.

다른 많은 라이브러리와 유사하게 두 개의 필수 인수가 있는 메소드를 사용하였습니다. 입력과 대상을 모델에 넘겨주었습니다.

가변 훈련 데이터에서 입력 텐서에 포함된 입력과 훈련 데이터에서 출력 텐서에 포함된 대상을 지정해야합니다. 이 동일한 방법은 반복 횟수를 설정하는 위치이기도 합니다. 머신 러닝의 전체 데이터 세트에 대한 각 반복을 에포크 (epoch)라고합니다.

이제부터 이 용어를 사용하여 반복 및 반복 횟수를 설명하겠습니다. 이제 에포크 수를 100으로 설정하였습니다. verbose를 0으로 설정하고 진행합니다. 아래 코드를 실행해보면서 결과를 살펴보도록 하겠습니다.

 

 

 

model.layers[0].get_weights()

# [array([[ 1.9980499],
#         [-3.004382 ]], dtype=float32), array([5.0288405], dtype=float32)]

 

weights = model.layers[0].get_weights()[0]

weights
# array([[ 1.9980499],
#        [-3.004382 ]], dtype=float32)

 

 

bias = model.layers[0].get_weights()[1]
bias
# array([5.0288405], dtype=float32)

 

 

model.predict_on_batch(training_data['inputs']).round(1)

# array([[ -1.1],
#        [  3.4],
#        [ 32. ],
#        [  5.3],
#        [ 20.3],
#        [ 17. ],
#        [ 32.8],

 

 

training_data['targets'].round(1)

# array([[ -1.9],
#        [  3.2],
#        [ 31.8],
#        [  5.1],
#        [ 20.7],
#        [ 17.4],

 

 

plt.plot(np.squeeze(model.predict_on_batch(training_data['inputs'])), np.squeeze(training_data['targets']))
plt.xlabel('outputs')
plt.ylabel('targets')
plt.show()

결과 그림

반응형