딥러닝으로 x=y 함수식을 구성하고 싶습니다.
하지만 잘못된 학습 데이터를 가지고 있는 상황입니다.
예제 에서의 학습 데이터는 x=[1,2,3,4,5] 이고 y= [1,2,3,5,4] 인 상황이다.
이 상황에서도 model.predict([6]) = 6 이 나오게
즉 x=y 함수가 되게 구성할 수 있을까요?
# 0. 텐서플로우 넘파이 임포트
import numpy as np
import tensorflow as tf
print(tf.__version__)
x = y 공식에 맞지 않는 데이터입니다
x= 4 일 때 y =5 이고 x가 5일 때 y= 4 라서 기존 x=y 공식에 적합하지 않습니다.
# 1. 잘못된 데이터 준비
x = np.array([1,2,3,4,5])
y = np.array([1,2,3,5,4])
# 2. 모델구성
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 모델은 순차적이며 input 노드 1개 output 노드 1개 로 구성
# 손실함수 mae, 옵티마이저는 아담이 국룰
model = Sequential()
model.add(Dense(1,input_dim=1))
model.compile(loss="mae",optimizer="adam")
# 3. 모델 학습진행
model.fit(x,y, epochs=100,steps_per_epochs=100)
Epoch 1/100
100/100 [==============================] - 0s 562us/step - loss: 6.4720
Epoch 2/100
100/100 [==============================] - 0s 544us/step - loss: 6.1005
Epoch 3/100
100/100 [==============================] - 0s 564us/step - loss: 5.7293
Epoch 4/100
100/100 [==============================] - 0s 544us/step - loss: 5.3578
Epoch 5/100
100/100 [==============================] - 0s 548us/step - loss: 4.9866
Epoch 6/100
WARNING:tensorflow:Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches (in this case, 10000 batches). You may need to use the repeat() function when building your dataset.
100/100 [==============================] - 0s 170us/step - loss: 4.9866
<keras.callbacks.History at 0x1d0de86b820>
result = model.predict([6])
print("6의 예측값 :", result)
6의 예측값 : [[-4.097407]]
잘못된 데이터가 주어져서 역시나 잘 안나오네요 … 다시 학습후 돌려봅시다
# 3. 새로운 모델 학습진행
model.fit(x,y, epochs=100,steps_per_epoch=100)
Epoch 1/100
100/100 [==============================] - 0s 584us/step - loss: 0.4201
Epoch 2/100
100/100 [==============================] - 0s 494us/step - loss: 0.4052
Epoch 3/100
100/100 [==============================] - 0s 483us/step - loss: 0.4014
Epoch 4/100
100/100 [==============================] - 0s 504us/step - loss: 0.4007
Epoch 5/100
100/100 [==============================] - 0s 504us/step - loss: 0.4007
Epoch 6/100
WARNING:tensorflow:Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches (in this case, 10000 batches). You may need to use the repeat() function when building your dataset.
100/100 [==============================] - 0s 160us/step - loss: 0.4007
<keras.callbacks.History at 0x1d0df9612b0>
result = model.predict([6])
print("6의 예측값 :", result)
6의 예측값 : [[5.9937496]]
모델을 한 10번정도 더 돌려 보니까 x=y 함수식이 만들어졌습니다 !!!
조금 잘못된 데이터도 노가다 앞에서는 x=y 값으로 수렴 하기는 합니다….
하지만 작업이 오래 걸리고 인간의 개입이 많이 필요 한만큼
학습시에 퀄리티 좋은 데이터를 사용하는것이 가장 좋은 판단입니다.