본문 바로가기
DNN with Keras/Other Neural Network Techniques

Keras에서 노이즈 제거 오토인코더 사용

by goatlab 2024. 3. 5.
728x90
반응형
SMALL

Keras에서 노이즈 제거 오토인코더 사용

 

컴퓨터가 등장하고 머신러닝이라는 개념조차 생기기 훨씬 전부터 과학자들은 자연 관찰에 맞는 방정식을 만들어냈다. 과학자들은 관찰 사이의 상관 관계를 입증하기 위해 방정식을 찾는다.

 

예를 들어 질량, 가속도, 힘과 관련된 다양한 방정식이 있습니다. 복잡한 데이터를 살펴보고 방정식을 도출하는 데는 약간의 기술적 전문 지식이 필요하다. 함수 근사화의 목표는 이 과정에서 직관을 배제하고 대신 알고리즘에 의존하여 데이터를 설명하는 방정식을 자동으로 생성하는 것이다. 회귀 신경망이 이 작업을 수행한다. 회귀 함수를 차트화하는 데 사용할 함수를 만드는 것으로 시작한다.

 

def chart_regression(pred, y, sort=True):
    t = pd.DataFrame({'pred': pred, 'y': y.flatten()})
    
    if sort:
        t.sort_values(by=['y'], inplace=True)
    plt.plot(t['y'].tolist(), label='expected')
    plt.plot(t['pred'].tolist(), label='prediction')
    plt.ylabel('output')
    plt.legend()
    plt.show()

 

다음으로 삼각 사인 함수의 약간 무작위적인 변형을 근사화한다.

 

import tensorflow as tf
import numpy as np
import pandas as pd
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation
from tensorflow.keras.callbacks import EarlyStopping
import matplotlib.pyplot as plt

rng = np.random.RandomState(1)
x = np.sort((360 * rng.rand(100, 1)), axis=0)
y = np.array([np.sin(x * (np.pi / 180.0)).ravel()]).T

model = Sequential()
model.add(Dense(100, input_dim=x.shape[1], activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(25, activation='relu'))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(x, y, verbose=0, batch_size=len(x), epochs=25000)

pred = model.predict(x)
print("Actual")
print(y[0:5])
print("Pred")
print(pred[0:5])
chart_regression(pred.flatten(), y, sort=False)

 

보시다시피 신경망은 랜덤 사인 함수에 상당히 근접한 근사치를 생성한다.

 

다중 출력 회귀

 

 

대부분의 모델과 달리 신경망은 여러 회귀 출력을 제공할 수 있다. 이 기능을 통해 신경망은 동일한 입력에 대해 다양한 출력을 생성할 수 있다. 예를 들어, 연비와 마력을 예측하기 위해 연비 데이터 세트를 학습시킬 수 있다. 다중 회귀 출력이 유용할 수 있는 영역 중 하나는 오토인코더이다. 다음 다이어그램은 다중 회귀 신경망을 보여준다. 보시다시피 출력 뉴런이 여러 개 있다. 일반적으로 분류를 위해 여러 개의 출력 뉴런을 사용한다. 각 출력 뉴런은 클래스 중 하나의 확률을 나타낸다. 하지만 이 경우에는 회귀 신경망이다. 다음 프로그램은 다중 출력 회귀를 사용하여 동일한 입력 데이터에서 sin과 cos를 모두 예측한다.

 

from sklearn import metrics

rng = np.random.RandomState(1)
x = np.sort((360 * rng.rand(100, 1)), axis=0)
y = np.array([np.pi * np.sin(x * (np.pi / 180.0)).ravel(), np.pi * np.cos(x * (np.pi / 180.0)).ravel()]).T

model = Sequential()
model.add(Dense(100, input_dim=x.shape[1], activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(25, activation='relu'))
model.add(Dense(2))  # Two output neurons
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(x, y, verbose=0, batch_size=len(x), epochs=25000)
pred = model.predict(x)
score = np.sqrt(metrics.mean_squared_error(pred, y))
print("Score (RMSE): {}".format(score))
np.set_printoptions(suppress=True)
print("Predicted:")
print(np.array(pred[20:25]))
print("Expected:")
print(np.array(y[20:25]))

 

 

728x90
반응형
LIST

'DNN with Keras > Other Neural Network Techniques' 카테고리의 다른 글

자동 기계 학습 (AutoML)  (0) 2023.07.24