오답노트

[Keras] ANN 본문

Python/DL

[Keras] ANN

권멋져 2022. 9. 14. 18:01

ANN (Artificial neural network)

인공 신경망이라고도 부른다. 인간의 뇌에 있는 뉴런을 모방하여 만든 알고리즘이다.

input layer 와 output layer 그리고 둘 사이에 hidden layer가 존재하는 모습이다.

 

Hidden Layer (은닉층)

hidden layer는 input layer 와 output layer 사이에 존재한다. hidden layer를 추가하면 모델 성능에 유용한 feature를 모델이 알아서 만들게 된다. 또 hidden layer의 노드 수 만큼 새로운 feature를 만들게 된다. 이것을 Feature Representation 이라고 한다. 즉, 연결된 것으로부터 기존에 없던 새로운 Feature를 추출하는 것이다.

 

hidden layer의 개수는 level을 의미하고 output layer에 가까워질수록 high level이 된다.

hidden layer의 노드 개수는 feature의 개수를 의미한다.

 

만약 노드의 개수를 늘려서 성능이 더 좋아졌다면 유용한 feature가 생성된 것이고,

노드의 개수를 줄여서 성능이 더 좋아졌다면 이전의 노드는 유용하지 않은 feature 였던 것이다.

 

Keras 코드 실습

회귀 모델 Sequential API

#모델 선언
model_sqn_rgs = keras.models.Sequential()

#레이어 추가
model_sqn_rgs.add(keras.layers.Input((13,)))
model_sqn_rgs.add(keras.layers.Dense(32,'relu'))
model_sqn_rgs.add(keras.layers.Dense(32,'relu'))
model_sqn_rgs.add(keras.layers.Dense(1))

#모델 컴파일
model_sqn_rgs.compile(loss='mse',optimizer='adam')

#모델 학습
model_sqn_rgs.fit(x_train,y_train,epochs=10,verbose=1)

#모델 예측
print(y_val[:10]) # [22.4 30.3 20.6 16.1 12.  20.2 16.8 22.  11.7 18.9]
print(model_sqn_rgs.predict(x_val).reshape(-1)[:10]) # [22.91025   26.298347  22.8818     8.839511  14.825522  24.869944 26.069471  29.336393   7.1893716 23.681059 ]

회귀 모델 Functional API

#레이어 선언
il = keras.layers.Input(13)
h1 = keras.layers.Dense(32)(il)
h2 = keras.layers.Dense(32)(h1)
ol = keras.layers.Dense(1)(h2)

#모델 선언
model_fcn_rgs = keras.models.Model(il,ol)

#모델 컴파일
model_fcn_rgs.compile(loss='mse',optimizer='adam')

#모델 학습
model_fcn_rgs.fit(x_train,y_train,epochs=10,verbose=1)

#모델 예측
print(y_val[:10]) # [22.4 30.3 20.6 16.1 12.  20.2 16.8 22.  11.7 18.9]
print(model_fcn_rgs.predict(x_val).reshape(-1)[:10]) # [20.815323  22.669506  19.612282   4.5357857 19.691452  24.092922 20.897045  26.424305   3.1900365 19.754509 ]

 

분류 모델 Sequential API

#모델 선언
model_seq_cls = keras.models.Sequential()

#레이어 추가
model_seq_cls.add(keras.layers.Input(30))
model_seq_cls.add(keras.layers.Dense(32,'sigmoid'))
model_seq_cls.add(keras.layers.Dense(32,'sigmoid'))
model_seq_cls.add(keras.layers.Dense(1,'sigmoid'))

#모델 컴파일
model_seq_cls.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])

#모델 학습
model_seq_cls.fit(x_train,y_train,epochs=10,verbose=1)

#모델 예측
print('y_val : ',y_val[:10])
pred = model_seq_cls.predict(x_val).reshape(-1)
pred_res = np.where(pred>0.7,1,0)
print('pred : ',pred_res[:10])

'''
y_val : [1 1 0 1 1 1 1 0 0 0]
pred : [1 1 1 1 1 1 0 0 0 0]
'''

분류 모델 Functional API

#레이어 선언
il = keras.layers.Input(30)
h1 = keras.layers.Dense(32,'sigmoid')(il)
h2 = keras.layers.Dense(32,'sigmoid')(h1)
ol = keras.layers.Dense(1,'sigmoid')(h2)

#모델 선언
model_fnc_cls = keras.models.Model(il,ol)

#모델 컴파일
model_fnc_cls.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])

#모델 학습
model_fnc_cls.fit(x_train,y_train,epochs=10,verbose=1)

#모델 예측
print('y_val : ',y_val[:10])
pred = model_seq_cls.predict(x_val).reshape(-1)
pred_res = np.where(pred>0.7,1,0)
print('pred : ',pred_res[:10])

'''
y_val : [1 1 0 1 1 1 1 0 0 0]
pred : [1 1 1 1 1 1 0 0 0 0]
'''

'Python > DL' 카테고리의 다른 글

[Keras] EarlyStopping  (0) 2022.09.15
[Keras] Flatton Layer  (0) 2022.09.15
[Keras] MultiClass - SoftMax  (0) 2022.09.13
[Keras] Functional API  (0) 2022.09.13
[Keras] Sequential API  (0) 2022.09.13