본문 바로가기
3. 딥러닝 (neuralnet 패키지)/2) 정규분포 학습 예제

[R 딥러닝 예제] 표준정규분포함수 만들기 #1. neuralnet 패키지로 신경망 만들기

by makhimh 2019. 12. 13.

#1. neuralnet 패키지로 신경망 만들기


딥러닝을 이용하여 표준정규분포함수를 학습시켜보려고 합니다. 먼저 패키지를 설치해야하는데요. neuralnet 패키지를 사용할겁니다. 아래와 같이 패키지를 설치합니다.


install.packages("neuralnet")


neuralnet 라이브러리를 호출하고 데이터를 생성합니다.


library(neuralnet)

#data 생성
set.seed(1)
input=rnorm(1000)
output=dnorm(input)


rnorm함수는 정규분포의 확률변수를 임의로 추출해주는 함수입니다. 확률분포값을 이용하여 변수를 추출하므로, 확률분포 값이 클 수록 추출될 확률이 높습니다. 디폴트 값이 평균 0, 표준편차 1 이므로, 표준정규분포에서 확률변수가 추출됩니다. 확률변수값이 input data가 됩니다. ouput은 dnorm 함수를 이용하여 반대로 확률변수에 대한 확률분포값을 구해줍니다. 그래프를 그려봅시다. 


plot(input,output,'l')



왜 이렇게 나올까요? input이 크기순으로 정렬되어 있지 않기 때문입니다. order 함수를 이용하여 크기순으로 다시 정렬합시다. 


output=output[order(input)]

input=input[order(input)]

plot(input,output,'l')


1000개의 데이터중 500개는 훈련용 데이터로, 나머지 500개는 테스트용 데이터로 사용하겠습니다. 

#훈련용 데이터를 배정합니다.

input_train=input[1:500]

output_train=output[1:500]


#test데이터를 배정합니다. 

input_test=input[501:1000]

output_test=output[501:1000]


cbind 함수를 이용하여 아래와 같이 두 벡터를 하나의 행렬로 만들어줍니다. 


my_data_train=cbind(input_train,output_train)


neuralnet 함수를 이용하여 train 데이터로 인공신경망을 학습시킵니다. 


my_NN=neuralnet(output_train~input_train, data=my_data_train,

                hidden=c(3,3),

                threshold=0.01)


hidden=c(3,3)은 두개의 은닉층을 갖고, 각 은닉층은 세개의 뉴런을 갖는다는 의미입니다. 아래와 같은 그림입니다. 



만약 세개의 은닉층을 갖고, 각 은닉층이 두개의 뉴런을 갖는다면 hidden=c(2,2,2) 가 됩니다. 



댓글