반응형
파이썬 딥러닝 기본 코드 실습 (numpy, keras, adam)
데이터 준비: 입력 데이터 x와 출력 데이터 y를 numpy 배열로 정의합니다.
입력 데이터 x는 2개의 특성(feature)을 가진 10개의 샘플로 구성되어 있습니다.
데이터 전처리: x의 행과 열을 확인하고, x를 전치(transpose)하여 열을 특성(feature)로, 행을 샘플로 변환합니다. 이를 통해 모델이 올바른 형태의 데이터를 입력받을 수 있습니다.
모델 구성: Sequential 모델을 생성하고, Dense 레이어를 추가하여 모델을 구성합니다.
입력층과 은닉층을 추가하고, 출력층은 하나의 노드로 구성됩니다.
컴파일과 훈련: 모델을 컴파일하고, 훈련 데이터를 사용하여 모델을 학습시킵니다.
손실 함수로는 'mse'를 사용하고, 옵티마이저로는 'adam'을 사용합니다.
에포크 수와 배치 크기도 설정합니다.
예측과 평가: 학습된 모델을 사용하여 입력 데이터에 대한 예측을 수행하고, 손실 값을 평가합니다.
마지막으로, 특정 입력 [10, 1.6]에 대한 예측 값을 출력합니다.
코드를 실행하면 모델이 학습되고 예측 결과가 출력됩니다.
손실 값은 모델의 학습 성능을 나타내는 지표이며, 예측 결과는 입력 [10]과 [1.6]에 대한 출력 값을 나타냅니다.
은닉층과 에포크, 배치의 값을 조정하면 손실함수와 예측 결과값을 유의미 하게 조정시킬 수 있다.
은닉층과 에포크, 배치 크기의 값을 조정하면 모델의 표현력을 향상시킬 수 있다.
은닉층을 더 많이 추가하거나 노드 수를 늘리면 모델은 더 복잡한 패턴을 학습할 수 있지만,
과적합의 위험이 있으므로 적절한 구성을 선택해야한다.
에포크 수를 조정하여 모델이 전체 데이터셋을 적절한 횟수만큼 학습할 수 있도록 해야한다.
배치 크기를 작게 설정하면 모델이 더 자주 업데이트되지만 노이즈가 많아질 수 있고,
크게 설정하면 안정적인 학습이 가능하다.
따라서, 적절한 조정을 통해 모델의 손실 함수 값과 예측 결과를 개선할 수 있다.
[결과값 출력]
[예측/평가 결과 해석]
손실 값이 9.003997200607294e-12로 매우 작게 나타납니다.
이는 모델이 입력 데이터와 실제 출력 데이터 간의 차이를 매우 잘 예측하고 있다는 것을 의미합니다.
즉, 모델이 입력값에 대해 매우 정확한 예측을 수행하고 있습니다.
예측값인 20.00001은 입력 [10, 1.6]에 대한 모델의 출력 결과입니다.
모델은 입력 데이터를 기반으로 학습하여 이러한 입력에 대해 20.00001이라는 예측값을 제시하고 있습니다.
이는 모델이 입력에 대해 정확하게 예측하는 능력을 갖추고 있다는 것을 의미합니다.
따라서, 손실 값이 매우 작고 예측값이 실제 값과 유사하다는 것은 모델이 학습을 잘 수행하고 있다는 것을 나타내며, 입력에 대한 정확한 예측을 수행할 수 있다는 것을 의미합니다.
[코드 및 GPT질문]
GPT 질문1
입력층 안에 들어가는 dense 의 값은 ? 어떤 의미인가 ? 꼭 1이어야 하나 ?
▶ model.add(Dense(1)) #입력층 입력층 안에 들어가는 Dense의 값은 입력 데이터의 특성 수를 의미합니다. 입력층은 모델에 데이터를 입력하는 역할을 담당하며, 입력 데이터의 특성 수와 일치하는 Dense 레이어를 사용하여 설정해야 합니다. 예를 들어, 입력 데이터가 3개의 특성을 가지고 있다면, 입력층의 Dense 레이어는 3으로 설정됩니다. 따라서, 입력층의 Dense 값은 입력 데이터의 특성 수에 따라 결정됩니다. 고정된 값이 아니며, 입력 데이터의 특성 수에 맞게 설정되어야 합니다.
GPT 질문2
출력층은 꼭 dense가 1이어야 하나 ?
▶ model.add(Dense(1)) #출력층 출력층의 Dense 값은 해결하고자 하는 문제의 성격에 따라 다를 수 있습니다. model.add(Dense(1))은 출력층의 노드 수를 1로 설정한 예시입니다. 일반적으로 회귀 문제에서는 출력층을 하나의 값을 예측하기 위해 1로 설정할 수 있습니다. 분류 문제에서는 클래스의 수에 따라 출력층의 노드 수가 결정됩니다. 이진 분류의 경우 1로 설정하고, 다중 클래스 분류의 경우 클래스 수에 맞게 노드 수를 설정할 수 있습니다. 따라서, 출력층의 Dense 값은 해결하고자 하는 문제의 특성에 맞게 조정되어야 합니다.
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
# 1. 데이터
x = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[1, 2, 1, 1, 2, 1.1, 1.2, 1.4, 1.5, 1.6]])
y = np.array([11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
# 행과 열을 확인해준다.
print(x.shape) #(2, 10)
print(y.shape) #(10,)
a = x
a_transpose = np.transpose(a)
print("Transpose :\n", a_transpose)
print(a_transpose) #(2, 10)
x = a_transpose
# 2. 모델구성
model = Sequential()
model.add(Dense(10, input_dim=2)) #feature.=column (x1,x2)
model.add(Dense(500))
model.add(Dense(1))
# 3. 컴파일, 훈련
model.compile(loss = 'mse', optimizer='adam') # w 같이 음수일 때 사용.
#model.compile(loss = 'mae', optimizer='adam') # w 같이 음수일 때 사용.
model.fit(x, y, epochs=1000,batch_size=5)
# 4. 예측, 평가
loss = model.evaluate(x, y)
print('loss : ', loss)
result = model.predict([[10, 1.6]])
print('[10]과 [1.6]예측값 : ', result)
반응형