코규리
article thumbnail

개인학습 기록용 포스팅입니다

 

 

 

 

#필요한 작업환경

- Anaconda, TensorFlow, keras, VScode

 

#Keras의 Sequential()

(1) 프로그램 흐름

문제를 가정하고 정의 > 데이터 셋을 생성

 

(2) 데이터 셋 생성하기

feat. numpy, pandas  // numpy: 벡터생산/연산, pandas :txt,csv활용

- 모델 생성:  model =Sequential()

- 모델 구성하기 > 학습과정 설정    > 모델 학습시키기 > 모델 평가하기    > 모델 예측하기

- model. add()   > model.compile() > model.fit()         > model.evaluate() > model.predict()

 

 

# VScode에서 keras 라이브러리를 만져보자

(1) 라이브러리 설치, 아래 명령어를 터미널에서 작성하기

pip install tensorflow keras

오래걸린다. 가져올 게 많으시다

 

(2)  import 시키기

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras import optimizers

 

(3) 예시로 작성한 코드

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras import optimizers

# 데이터셋설정: 다리 개수에 따른 속도
NumOfLegs= np.array([1,2,3,4]) #입력,원인
Speed = np.array([50,100,150,200]) #출력,

# 모델 구성, Linear(선형회귀)
model = Sequential()
model.add(Dense(1, input_dim=1, activation='linear'))

#모델 컴파일(중요)
# 최적화를 어떤 버퍼로 할 것인지, 하이퍼파라미터(초매개변수) 등장
sgd =optimizers.SGD(lr=0.01)
#optimizer=최적화 방법, loss:중요한 거임. metrics:평가기준
model.compile(optimizer=sgd, loss='mse', metrics=['accuracy'])

#모델 학습
# batch_size=(데이터셋의 데이터묶음, 행의개수), epochs = 데이터셋 전체에 대한 학습 수, shuffle = 현재 데이터 셋을 섞을지
model.fit(NumOfLegs, Speed, batch_size=1, epochs=100, shuffle=False)

# 예측해보기, 7일때는?
print(model.predict([7]))

어떤 데이터셋을 만들까 생각했는데 "다리개수에 따라 속도가 빨라지는 생명체"에 대한 데이터를 가정했다

괴물인가

추가로 환경 작업할 게 있어서 실행시켜도 원하는 출력값은 vsCode 상에서 나오지 않는다

 

# 작성한 코드에 대해 각 함수를 분석해보자

(1) 모델 계층을 구성하기에서

model.add(Dense(1, input_dim=1, activation='linear'))

- add함수에 Dense를 하나만 사용한다

- 딥러닝에는 여러 계층을 추가해 학습시킬 수 있다

- Dense(1, .... ))  // 출력차원이 하나라는 뜻

- inpurt_dim =1  // 입력차원이 하나라는 뜻

- activation='linear'     // linear, 선형회귀라고 말해주었다

 

* 이런 코드가 존재한다면?

model.add(Dense(2, input_dim=1, activation='linear'))
model.add(Dense(1, activation='linear'))

- 첫줄의 출력차원 2   >  둘째줄의 입력차원

 

 

(2) 모델 컴파일과 설정부분에서

sgd =optimizers.SGD(lr=0.01)
model.complie(optimizer=sgd, loss='mse', metrics=['accuracy'])
model.fit(NumOfLegs, Speed, batch_size=1, epochs=100, shuffle=False)

- lr=0.01 // 하이퍼파라미터(초매개변수) : 사용자가 학습시킬 때 정의하는 부분

안에 내부적으로 업데이트 시키는 매개변수가 있다(w(기울기), b(절편))

기계가 학습시키면서 손실을 줄이려고 하는 매개변수인 것.

- model.fit(...., batch_size=1, epochs=100 ,.....) //정확도에 대한 것을 변경시켜 손실 대응을 위함

 

 

(3) 추가 정리

기능  함수 파라미터
활성화함수 activation linear, sigmoid, softma, relu
손실함수(비용함수)
//실제값과 예측값에 대한 오차(y- y')
loss mse(평균제곱오차), 
binary_crossentropy(이진분류), 
categorical_crossentopy(소프트어쩌구)
최적화 방법
(손실에 대해서 얼마만큼 기울기를 갱신할지)
optimizer  GD(경사하강법)
SGD(확률적 경사하강법)
Momentum 등
기타 lr(학습률), batch, batchsize, epochs, ovefitting(과적합), one_hot_encoding, 정규화,

- 과적합: 내가 할 땐 맞아도 다른 테스트케이스에서 오류발생

- one_hot_encoding : a,b,c가 있으면 a=[1,0,0], b=[0,1,0], c=[0,0,1]  즉 좌표표시. 

 

------------

아 눈물나네 성공했어요

 

 

앞선 데이터에 대하여 학습하였고, 그에 따라서 다리가 6개일 경우엔 속도가 몇일지.