lstm 모형은 아래 링크를 참고하기 바란다.
R tensorflow LSTM 예제 코드(GPU 사용)
lstm 모형 구축을 하기 앞서 딥러닝 코드 구현도 충분히 중요하지만, 이론을 모르는 상황에서 모델을 개선 시킬 수는 없다고 생각한다. 그런 의미에서 아래 링크를 공유한다. ducj.tistory.com/227 순환
rcj92.tistory.com
아래는 환경을 구축하는 링크다.
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 |