Post

[DL] Keras 이용해서 DL 모델 만들기

대학원 합격 예측 딥러닝 모델

[DL] Keras 이용해서 DL 모델 만들기

Keras를 이용하면 딥러닝 모델을 손쉽게 만들 수 있다.

💡 (요약) 딥러닝 모델 만들기

  1. 데이터 전처리
  2. 모델 빌딩 & 학습
  3. 새로운 데이터 예측

💡 (참고) 딥러닝 모델 성능 향상

  1. 데이터 전처리
  2. 파라미터 튜닝 (layer 갯수, node 갯수, activation 함수 등)
  3. 데이터 양 늘리기


대학원 합격 예측 프로젝트

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import pandas as pd
import tensorflow as tf


# Pre-process
data = pd.read_csv('gpascore.csv')
data = data.dropna()
y = data['admit'].values

x = []
for i, rows in data.iterrows():
    x.append([rows['gre'], rows['gpa'], rows['rank']])

# Model
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(64, activation='tanh'),
    tf.keras.layers.Dense(128, activation='tanh'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

# Train
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(np.array(x), y, epochs=1000)

# Predict
pred = model.predict( [ [800, 4.20, 1], [300, 1.2, 2] ] )


1. Dataset

  • column: 4 (admit, gre, gpa, rank)
  • row: 427
  • admit=0(불합격) / admit=1(합격)

(table) Dataset example

admitgregparank
03803.213
16603.673
180041


2. Data Preprocessing

1) Null value

1
2
3
4
5
6
import pandas as pd

data = pd.read_csv('gpascore.csv')

# check null value
print(data.isnull().sum())
1
2
3
4
5
admit    0
gre      1
gpa      0
rank     0
dtype: int64
1
2
3
4
# drop null-included rows
data = data.dropna()

print(data.isnull().sum())
1
2
3
4
5
admit    0
gre      0
gpa      0
rank     0
dtype: int64

2) X, Y data

1
2
3
y = data['admit'].values
print(y)
print(type(y))
1
2
[0 1 1 1 0 1 1 ...1 1]
<class 'numpy.ndarray'>
1
2
3
4
5
6
7
x = []

for i, rows in data.iterrows():
    x.append([rows['gre'], rows['gpa'], rows['rank']])

print(x)
print(type(x))
1
2
[[380.0, 3.21, 3.0], [660.0, 3.67, 3.0], ..., [760.0, 3.76, 2.0], [710.0, 3.82, 3.0]]
<class 'list'>


3. Build model & train

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import tensorflow as tf

# 1. model
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(64, activation='tanh'),
    tf.keras.layers.Dense(128, activation='tanh'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

# 2. model compile
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# 3. model training (weights updating)
model.fit(np.array(x), y, epochs=1000)
1
2
3
4
5
6
7
8
Epoch 1/1000
 9/14 [==================>...........] - ETA: 0s - loss: 0.7727 - accuracy: 0.4792
...
Epoch 999/1000
14/14 [==============================] - 0s 7ms/step - loss: 0.5708 - accuracy: 0.6965
Epoch 1000/1000
14/14 [==============================] - 0s 6ms/step - loss: 0.5710 - accuracy: 0.7082
<keras.callbacks.History at 0x17aab7280>
  • model.fit에 x, y 데이터를 넣을 때 list 형태가 아닌 numpy array 또는 tf.tensor 자료형으로 변환해서 넣어야한다. list 형태로 넣으면 에러가 뜬다.
    • np.array(데이터) : list to array 변환 함수
  • y 데이터가 0과 1로 되어있으므로, 손실함수로 binary_crossentropy를 사용하고, 마지막 레이어에는 sigmoid 활성함수를 사용한다.


4. Predict

1
2
pred = model.predict( [ [800, 4.20, 1], [300, 1.2, 2] ] )
print(pred)
1
2
3
1/1 [==============================] - 0s 20ms/step
[[0.77883834]
 [0.00869057]]


Reference

This post is licensed under CC BY 4.0 by the author.