DL

텐서플로우를 활용하여 신경망 구현하기 - 모델 구현

Haribo- 2022. 11. 24. 21:08

 

텐서플로우를 활용하여 신경망 구현하기 - 모델 구현

[실습1]에 이어서 이번 실습에서는 텐서플로우와 케라스(Keras)를 활용하여 신경망 모델을 구현해보겠습니다.

케라스는 텐서플로우 내의 신경망 모델 설계와 훈련을 위한 API 입니다. 케라스는 연속적으로(Sequential) 레이어(Layer)들을 쌓아가며 모델을 생성하고, 사이킷런과 같이 한 줄의 코드로 간단하게 학습 방법 설정, 학습, 평가를 진행할 수 있습니다.


텐서플로우와 케라스를 이용해 신경망 모델을 만들기 위한 함수/메서드

  • 모델 설정
tf.keras.models.Sequential()
Copy

: 연속적으로 층을 쌓아 만드는 Sequential 모델을 위한 함수

  • Dense 레이어
tf.keras.layers.Dense(units)
Copy

: 신경망 모델의 레이어를 구성하는데 필요한 keras 함수

  • units: 레이어 안의 노드 수

예를 들어, 5개의 변수에 따른 label 을 예측하는 회귀 분석 신경망을 구현하고 싶다면 아래와 같이 구현할 수 있습니다.

tf.keras.models.Sequential([
    tf.keras.layers.Dense(10, input_shape=(5,)),
    tf.keras.layers.Dense(1)
    ])
Copy

input_shape 인자에는 (입력하는 변수의 개수, )로 입력합니다. 또한 회귀 분석이기에 마지막 레이어의 유닛 수는 1개로 설정합니다.

input_dim인자를 사용하면 아래와 같이 표현할 수 있습니다.

tf.keras.models.Sequential([
    tf.keras.layers.Dense(10, input_dim=5),
    tf.keras.layers.Dense(1)
    ])
Copy
 

지시사항

  1. tf.keras.models.Sequential()을 활용하여 신경망 모델을 생성합니다.
    • 자유롭게 layers를 쌓고 마지막 layers는 노드 수를 1개로 설정합니다.

 

 

import tensorflow as tf
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

np.random.seed(100)
tf.random.set_seed(100)

# 데이터를 DataFrame 형태로 불러 옵니다.
df = pd.read_csv("data/Advertising.csv")

# DataFrame 데이터 샘플 5개를 출력합니다.
print('원본 데이터 샘플 :')
print(df.head(),'\n')

# 의미없는 변수는 삭제합니다.
df = df.drop(columns=['Unnamed: 0'])

X = df.drop(columns=['Sales'])
Y = df['Sales']

# 학습용 테스트용 데이터로 분리합니다.
train_X, test_X, train_Y, test_Y = train_test_split(X, Y, test_size=0.3)

# Dataset 형태로 변환합니다.
train_ds = tf.data.Dataset.from_tensor_slices((train_X.values, train_Y))
train_ds = train_ds.shuffle(len(train_X)).batch(batch_size=5)

"""
1. tf.keras.models.Sequential()를 활용하여 신경망 모델을 생성합니다.
자유롭게 layers를 쌓고 마지막 layers는 노드 수를 1개로 설정합니다.
"""
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(10, input_shape=(3,)),
tf.keras.layers.Dense(1)
])

print(model.summary())
 
원본 데이터 샘플 :
   Unnamed: 0     FB    TV  Newspaper  Sales
0           1  230.1  37.8       69.2   22.1
1           2   44.5  39.3       45.1   10.4
2           3   17.2  45.9       69.3    9.3
3           4  151.5  41.3       58.5   18.5
4           5  180.8  10.8       58.4   12.9 

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 10)                40        
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 11        
=================================================================
Total params: 51
Trainable params: 51
Non-trainable params: 0
_________________________________________________________________
None