통계 및 인공지능

1D-CNN & Multi input Multi output Model in R

cj92 2021. 5. 2. 21:19

lstm 모형은 아래 링크를 참고하기 바란다.

 

rcj92.tistory.com/11

 

R tensorflow LSTM 예제 코드(GPU 사용)

lstm 모형 구축을 하기 앞서 딥러닝 코드 구현도 충분히 중요하지만, 이론을 모르는 상황에서 모델을 개선 시킬 수는 없다고 생각한다. 그런 의미에서 아래 링크를 공유한다. ducj.tistory.com/227 순환

rcj92.tistory.com

 

아래는 환경을 구축하는 링크다.

 

rcj92.tistory.com/10

 

R tensorflow-gpu 설정하기

오늘은 R쓰시는 분들이 딥러닝 할 때 GPU세팅을 힘들어해서 R에서 tensorflow를 gpu로 돌리기 위한 세팅을 해보겠다. 지금은 tensorflow라이브러리에서 install_tensorflow()를 활용하면 쉽게 가능하다고 하

rcj92.tistory.com

자, 이제 본격적으로 시계열 예측을 시작해보자.

 

1D CNN은 RNN계열과 더불어 시계열 예측에 자주 활용되는 모형이다. 

 

멀티스탭으로 예제를 제시하여 보았다.

 

data_generate 자료는 timestep을 24로 구성하였으며 12시간 예측을 목적으로 하였으며 12시간 overlay시켰다.

 

library('reticulate')
library('tensorflow')
library('keras')
library(abind)
data('AirPassengers')
ap_ts <- window(AirPassengers, start=1949, end=1955.99)
ap_ts_test <- window(AirPassengers, start=1956)

data_generate=function(data){
  tr=as.vector(data)
  tr_xs=list();tr_ys=list()
  for(i in 1:(length(tr)-36)){
    tr_xs[[i]]=tr[i:(i+23)]
    tr_ys[[i]]=tr[(i+13):(i+36)]
  }
  tr_x=t(data.frame(tr_xs))
  tr_y=t(data.frame(tr_ys))
  rownames(tr_x)=NULL
  rownames(tr_y)=NULL
  tr_x=array(tr_x,c(nrow(tr_x),ncol(tr_x),1))
  tr_y=array(tr_y,c(nrow(tr_y),ncol(tr_y),1))
  return(list(tr_x,tr_y))
}

tr_=data_generate(ap_ts)
tr_x=tr_[[1]];tr_y=tr_[[2]]
te_=data_generate(ap_ts_test)
te_x=te_[[1]];te_y=te_[[2]]

model=
  keras_model_sequential()%>%
  layer_conv_1d(filter=64,kernel_size=3,input_shape=c(24,1),padding = 'valid',activation='relu')%>%
  layer_max_pooling_1d(pool_size = 4)%>%
  layer_flatten()%>%
  layer_dense(24)
model%>%compile(
  loss='mae',
  optimizer='adam',
  metrics=c('mae')
)
dim(tr_x);dim(tr_y[,,1])
model%>%fit(x = tr_x,y=tr_y[,,1],batch_size = 3,epochs = 600)
n=4
ylim_=c(min(c((model%>%predict(te_x))[n,]),te_y[n,,1]),max(c((model%>%predict(te_x))[n,]),te_y[n,,1]))
plot((model%>%predict(te_x))[n,],type='l',ylim=ylim_);lines(te_y[n,,1],col=2)

 

Base 모형만 제시하면 재미가 없으니 복합 모형을 생성해보자.

 

아래와 같이 모델을 Filter size를 달리하여 모델을 생성해보았다. 

 

 

 

library('reticulate')
library('tensorflow')
library('keras')
library(abind)
data('AirPassengers')
ap_ts <- window(AirPassengers, start=1949, end=1955.99)
ap_ts_test <- window(AirPassengers, start=1956)

data_generate=function(data){
  tr=as.vector(data)
  tr_xs=list();tr_ys=list()
  for(i in 1:(length(tr)-36)){
    tr_xs[[i]]=tr[i:(i+23)]
    tr_ys[[i]]=tr[(i+13):(i+36)]
  }
  tr_x=t(data.frame(tr_xs))
  tr_y=t(data.frame(tr_ys))
  rownames(tr_x)=NULL
  rownames(tr_y)=NULL
  tr_x=array(tr_x,c(nrow(tr_x),ncol(tr_x),1))
  tr_y=array(tr_y,c(nrow(tr_y),ncol(tr_y),1))
  return(list(tr_x,tr_y))
}

tr_=data_generate(ap_ts)
tr_x=tr_[[1]];tr_y=tr_[[2]]
te_=data_generate(ap_ts_test)
te_x=te_[[1]];te_y=te_[[2]]

input1=layer_input(shape=c(24,1))
input2=layer_input(shape=c(24,1))
input3=layer_input(shape=c(24,1))
flat1=input1%>%layer_conv_1d(filters=64,kernel_size = 3,activation='relu')%>%layer_max_pooling_1d()%>%layer_flatten()
flat2=input2%>%layer_conv_1d(filters=64,kernel_size = 5,activation='relu')%>%layer_max_pooling_1d()%>%layer_flatten()
flat3=input3%>%layer_conv_1d(filters=64,kernel_size = 11,activation='relu')%>%layer_max_pooling_1d()%>%layer_flatten()
output=layer_concatenate(c(flat1,flat2,flat3))%>%layer_dense(50,activation='relu')%>%layer_dense(24,activation='linear')
model=keras::keras_model(inputs=c(input1,input2,input3),outputs=output)
kerasR::plot_model(model,to_file='/home/ducj/jupyter/R/tensorflow/model.png',show_shapes = T)

model%>%compile(
  loss='mae',
  optimizer='adam',
  metrics=c('mae')
)
dim(tr_x);dim(tr_y[,,1])
model%>%fit(x = list(tr_x,tr_x,tr_x),y=tr_y[,,1],batch_size = 3,epochs = 600)
n=5
ylim_=c(min(c((model%>%predict(list(te_x,te_x,te_x)))[n,]),te_y[n,,1]),max(c((model%>%predict(list(te_x,te_x,te_x)))[n,]),te_y[n,,1]))
plot((model%>%predict(list(te_x,te_x,te_x)))[n,],type='l',ylim=ylim_);lines(te_y[n,,1],col=2)

 

'통계 및 인공지능' 카테고리의 다른 글

[tensorflow]Seq2Seq regression in R  (0) 2021.06.10
WaveNet in R  (0) 2021.05.02
R에서 ELMO 모형 사용하기  (0) 2021.04.26
rTorch LSTM 예제 코드(GPU 사용)  (0) 2021.04.24
R tensorflow LSTM 예제 코드(GPU 사용)  (0) 2021.04.24