반응형
이번에는 tensorflow keras model 라이브러리를 사용하여 특정 LSTM을 들고와 간단한 모델을 구성해 보겠습니다.
이론은 다른 블로그에서 정리를 아주 잘해두셔서 생략하겠습니다. pandas라이브러리로 csv파일을 불러와 데이터로 사용 하였습니다. 거두절미하고 예제 보시죠
데이터 로드
import pandas as pd
def load_data(filename, label=True): # 필요에 따라 레이블을 사용할수도 안할수도 있음
df = pd.read_csv(filename)
X = df.loc[:, ["GR", "ILD_log10", "DeltaPHI", "PHIND", "NM_M", "RELPOS"]].values
if label:
y = df.loc[:, "Facies"].values - 1 # 레이블 값을 지난번과 다르게 0~8까지로 사용하도록 변경
return X, y
else:
return X
입력데이터는 유명한 Facies classification 예제입니다. 6개의 입력데이터와 8개의 레이블값을 가지는 트레이닝 데이터 셋으로 로드 합니다.
LSTM 모델구성
model = Sequential()
model.add(LSTM(512,input_shape=(6, 1),return_sequences=True)) #input_shape은 x의 라벨값 6개 시퀀스 출력은 True 512차원 출력
model.add(Dropout(0.3)) #과적합 방지를 위한 드랍아웃 비율은 0.3
model.add(LSTM(256, return_sequences=True)) #LSTM 층 256차원출력
model.add(Dropout(0.3)) #드랍아웃 층
model.add(LSTM(128)) #LSTM층 128차원 출력
model.add(Dense(128)) #은닉층
model.add(Dropout(0.3)) #드랍아웃 층
model.add(Dense(9)) #은닉층
model.add(Dense(9, activation='softmax')) #활성화 함수 소프트맥스 사용 출력은 0~8 사이인 9개의 차원출력
model.compile(loss='categorical_crossentropy', optimizer='rmsprop' ,metrics=['accuracy'])
model.summary()
keras 레이어 라이브러리를 이용하면 간단하게 LSTM모델을 구성 할 수 있습니다. 은닉층과 dropout을 섞어 모델을 구성했습니다. 활성화함수는 softmax를 사용했습니다.
LSTM 예제 전체코드
id_name = "12월 05일"
import numpy as np
import pandas as pd
from tensorflow.keras.models import Sequential
from keras.layers import Dense, LSTM
def load_data(filename, label=True): # 필요에 따라 레이블을 사용할수도 안할수도 있음
df = pd.read_csv(filename)
X = df.loc[:, ["GR", "ILD_log10", "DeltaPHI", "PHIND", "NM_M", "RELPOS"]].values
if label:
y = df.loc[:, "Facies"].values - 1 # 레이블 값을 지난번과 다르게 0~8까지로 사용하도록 변경
return X, y
else:
return X
X, y = load_data("training_data.csv") # 지난번과 같은 데이터
y.min(), y.max()
import tensorflow as tf # 텐서플로우를 이용해서 마음대로 네트워크 구성
from sklearn.preprocessing import LabelEncoder
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.layers import Dropout, Dense
from tensorflow import keras
model = Sequential()
#print(X.shape,y.shape)
X = X.reshape(X.shape[0], X.shape[1], 1) #LSTM 모델 이용을위한 3차원배열 reshape
model = Sequential()
model.add(LSTM(512,input_shape=(6, 1),return_sequences=True)) #input_shape은 x의 라벨값 6개 시퀀스 출력은 True 512차원 출력
model.add(Dropout(0.3)) #과적합 방지를 위한 드랍아웃 비율은 0.3
model.add(LSTM(256, return_sequences=True)) #LSTM 층 256차원출력
model.add(Dropout(0.3)) #드랍아웃 층
model.add(LSTM(128)) #LSTM층 128차원 출력
model.add(Dense(128)) #은닉층
model.add(Dropout(0.3)) #드랍아웃 층
model.add(Dense(9)) #은닉층
model.add(Dense(9, activation='softmax')) #활성화 함수 소프트맥스 사용 출력은 0~8 사이인 9개의 차원출력
model.compile(loss='categorical_crossentropy', optimizer='rmsprop' ,metrics=['accuracy'])
model.summary()
model.fit(X, y, epochs=200,
batch_size=8, verbose=1)
X_test = load_data("test_data_no_label.csv", label=False) # 레이블이 없는 테스트파일을 이용해서 예측했던 클래스를 csv로 저장
X_test= X_test.reshape(X_test.shape[0], X_test.shape[1], 1) # LSTM층 에 맞게 형변환
y_score = model.predict(X_test)
y_pred = np.argmax(y_score, axis=1)
print(y_pred)
pd.Series(y_pred, name='Facies').to_csv(id_name + ".csv")
전체코드입니다. 구성은 데이터 로드 모델링 모델성능평가 순입니다.
반응형
'개발' 카테고리의 다른 글
(ETL) TALEND OPEN STUDIO를 설치해보자. (0) | 2022.05.12 |
---|---|
파이썬 머신러닝 Ensemble voting 기법 예제(KNeigborsClassifier,DecisionTree,KFold,SVM) (0) | 2022.05.11 |
파이썬 DB연결 (pymssql - insert select update 예제) (0) | 2022.05.10 |
파이썬 TCP 통신 UDP 통신 예제 (소켓 프로그래밍) (0) | 2022.04.19 |
파이썬 영상저장 (opencv를 이용한 ip카메라 영상저장) (0) | 2022.03.02 |
댓글