기타

인공지능

softPattern 2023. 4. 14. 17:58

딥러닝<머신러닝<인공지능

딥러닝: 인간의 뉴런과 비슷한 인공신경망으로 정보 처리 (chatgpt)

머신러닝: 특정 부분을 스스로 학습해 성능 향상

인공지능: 계산, 학습 등 인간의 지적능력을 컴퓨터를 통해 구현하는 기술

 

TensorFlow 

자격시험

https://www.tensorflow.org/certificate?hl=ko

 

TensorFlow 개발자 인증서 받기 - TensorFlow

TensorFlow 인증 프로그램을 통과하여 TensorFlow를 활용한 딥 러닝 및 ML 문제 해결 숙련도를 입증하세요.

www.tensorflow.org

TensorFlow는 Google에서 개발한 오픈소스 라이브러리로, 딥러닝 모델을 구현하고 학습시키기 위한 도구입니다.

 

Anaconda는 데이터 과학을 위한 파이썬 배포판입니다. NumPy, Pandas, Matplotlib 등과 같은 데이터 분석 및 시각화에 필요한 다양한 라이브러리를 기본으로 포함하고 있으며, 가상환경을 쉽게 구축하여 여러 프로젝트를 별도의 환경에서 독립적으로 진행할 수 있습니다. TensorFlow를 사용하는 경우, Anaconda를 설치하여 TensorFlow와 관련된 다양한 라이브러리와 환경을 쉽게 구성할 수 있습니다.

 

keras는 라이딥러닝 모델을 쉽게 구축하고 학습시키기 위한 고수준의 오픈소스 신경망 라이브러리입니다.

 

 


 

<CLI에서 Anaconda 명령어 사용법>

더보기
  • conda env list : 가상 환경 확인
  • conda create --name  tf210 python=3.10 : conda 가상환경 생성하기. python 버전 지정해줌. 
  • conda install tensorflow : tensorflow 설치
  • activate tf210 : tf210 가상환경으로 접속?
  • conda deactivate : 가상환경에서 나가기
  • tf210 가상환경안에서 또 conda install tensorflow 설치해줘야 한다.
  • python : 파이썬 기본 정보 확인 및 언어입력
  • import tensorflow as tf : python 안에서 tensorflow를 import 해주기.
  • tf.__version__ : import한 것 버전 확인

 

 

 

<VS code에서 python 코드 작성하기>

`VS Code 에서 python 설치하고 F1누르고 interpreter 검색 후 select -> tf210 클릭.`

interpreter의 역할은?

코드를 한줄씩 읽어들이는 원시 컴파일러? 코딩한 것을 python 확장자로 변경시켜주고? tf210 가상환경에서 돌아갈 수 있도록 한다?

 

VS Code에서 TensorFlow 가상환경을 interpreter로 설정하는 이유는 TensorFlow를 사용하는 Python 코드를 실행할 때, 가상환경에 설치된 TensorFlow 라이브러리를 사용할 수 있도록 하기 위함입니다.

 

TensorFlow 라이브러리도 마찬가지로, 가상환경을 사용하여 설치하고 관리하는 것이 좋습니다. 따라서, VS Code에서 TensorFlow 가상환경을 interpreter로 설정해주면, VS Code에서 실행되는 Python 코드에서 TensorFlow 라이브러리를 가상환경에 설치된 버전으로 사용할 수 있습니다. 이를 통해, TensorFlow를 사용하는 Python 코드를 더욱 효율적으로 작성하고, 라이브러리 버전 관리를 보다 용이하게 할 수 있습니다.

 

 

  • import numpy as np : numpy 설치
    • NumPy는 Numerical Python의 약자로, 수치 계산을 위한 Python 라이브러리입니다. NumPy를 사용하면 파이썬에서 기본적으로 제공하는 리스트(List)보다 더 빠르고 효율적인 다차원 배열(array)을 사용할 수 있으며, 이를 활용하여 다양한 수학적 연산과 통계 분석을 수행할 수 있습니다.

 

 

 

<python + tensorflow를 이용해서 값을 예측하는 모델을 만들어보기>

  • 최적의 가중치, 최소의 로스값을 찾는 것...?
  • y=wx+b -> y값이 뭐가 될지 예측하는 모델
  • Sequential() 함수는 Keras 모델을 생성하는 기본적인 방법 중 하나로, 레이어를 선형으로 쌓아가며 모델을 구성합니다.
  • Dense() 함수는 fully connected layer를 추가하는 함수로, 첫 번째 인자는 해당 layer에서 사용할 뉴런의 개수를 지정하고, input_dim 인자는 input 데이터의 차원을 지정합니다.

레이어층과 뉴런

# *최적의 가중치, 최소의 로스값을 찾는 것

# 1. 데이터 구성
import numpy as np
x = np.array([1,2,3])
y = np.array([1,2,3])


# 2. 모델 구성
from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(10000, input_dim=1)) # x변수를 몇 개 받을 것인지?  
model.add(Dense(6000))
model.add(Dense(1))              # 1로 내보낼거야..?


# 3. 훈련
model.compile(loss='mse', optimizer='adam') # 로스를 최소로, 가중치를 최적으로 만들어주는 러닝머신..?
model.fit(x, y, epochs=100)      # 100번 실행시킨다.


# 4. 예측, 평가
loss = model.evaluate(x,y)
result = model.predict([143])      # 예측할 값 넣어주기

print('loss : ', loss)
print('4의 예측값 :', result)

 

Dense()를 이용해서 레이어를 많이 쌓고 뉴런을 많이 지정해주면 무조건 좋은 것일까?

Dense() 함수를 사용하여 뉴런을 많이 지정하고 레이어를 많이 쌓을수록 모델이 더 복잡해지지만, 항상 좋은 것은 아닙니다.

먼저, 뉴런의 개수나 레이어의 깊이가 많을수록 모델이 더 복잡해져서 학습 데이터에 대해 더 정확한 예측을 할 수 있습니다. 하지만, 이는 과적합(overfitting)이 발생할 가능성이 높아집니다. 과적합이란, 모델이 학습 데이터에 지나치게 적합하게 학습되어, 새로운 데이터에 대한 일반화(generalization) 능력이 떨어지는 현상을 말합니다.(최소의 로스값이 중요)

따라서, 모델의 복잡도는 데이터의 복잡도와 일치해야 하며, 적절한 수의 레이어와 뉴런을 사용하는 것이 중요합니다. 이를 위해서는 적절한 하이퍼파라미터를 선택하고, 교차 검증(cross-validation) 등의 기법을 사용하여 모델을 평가해야 합니다.

또한, 모델의 복잡도는 학습 시간과 메모리 사용량도 증가시킵니다. 따라서, 학습 데이터에 대해 적절한 성능을 발휘하는 모델을 찾는 것이 중요합니다.

 


import numpy as np
import time
from keras.models import Sequential
from keras.layers import Dense
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score

#1. 데이터
datasets = load_diabetes()
x = datasets.data
y = datasets.target

x_train, x_test, y_train, y_test = train_test_split(
    x,y,train_size=0.77,shuffle=True,random_state=436
)

# print(x)
# print(y)
print(datasets.feature_names)
# print(datasets.DESCR)
print(x.shape)
print(y.shape)

# 2. 모델구성
model = Sequential()
model.add(Dense(10, input_dim=10))
model.add(Dense(50, activation='relu'))
model.add(Dense(20, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1))

# 3. 훈련, 평가
model.compile(loss='mse', optimizer='adam')
start_time = time.time()
model.fit(x_train,y_train,epochs=220,batch_size=14)
end_time=time.time() - start_time

print('걸린시간 : ', end_time)
 
# 4. 평가, 예측
loss = model.evaluate(x_test,y_test)

y_predict = model.predict(x_test)

r2 = r2_score(y_test,y_predict)
print('re score', r2)

 

 

 

 

 

 


기타

  • 독립변수 x 를 원인변수, 예측변수라고도 부른다.
  • 종속변수 y 를 결과변수, 반응변수라고도 부른다.