logo

줄리아 플럭스에서 은닉층 다루는 방법 📂머신러닝

줄리아 플럭스에서 은닉층 다루는 방법

선형1

플럭스에서 선형층은 Dense()로 구현할 수 있다.

  • Dense(in, out, σ=identity; bias=true, init=glorot_uniform)
  • Dense(W::AbstractMatrix, [bias, σ]

활성화함수에 대한 기본값은 항등함수이다. relu나 tanh, sigmoid 등 잘 알려진 함수를 사용할 수 있다.

julia> Dense(5, 2)
Dense(5, 2)         # 12 parameters

julia> Dense(5, 2, relu)
Dense(5, 2, relu)   # 12 parameters

julia> Dense(5, 2, sigmoid)
Dense(5, 2, σ)  

julia> d1 = Dense(ones(2, 5), false, tanh)  # using provided weight matrix
Dense(5, 2, tanh; bias=false)  # 10 parameters

julia> d1(ones(5))
2-element Vector{Float64}:
 0.9999092042625951
 0.9999092042625951

컨볼루션2

플럭스에서 컨볼루션층은 Conv()로 구현할 수 있다.

Conv(filter, in => out, σ = identity;
    stride = 1, pad = 0, dilation = 1, groups = 1, [bias, weight, init])
  • filter: 커널의 사이즈를 튜플 (m,n)으로 입력한다.
  • in => out: 입력층의 채널 수와 출력층의 채널 수를 입력한다.

컨볼루션층을 사용할 때 주의해야할 점은 입력으로 쓰는 배열이 항상 4차원 배열이어야한다는 것이다. 흑백사진 1장이라해도 (Hight, Width)가 아니라 (Hight, Width, 1, 1)의 사이즈로 입력해야한다는 것이다. RGB 컬러 사진 11장이라면 사이즈가 (Hight, Width, 3, 11)이어야 한다.

julia> A = rand(Float32, 4,4,1,1)
4×4×1×1 Array{Float32, 4}:
[:, :, 1, 1] =
 0.645447  0.459486  0.427283   0.631972
 0.365584  0.821914  0.526104   0.853083
 0.61417   0.813586  0.0317676  0.0636574
 0.151384  0.824513  0.308647   0.260465

julia> c = Conv((2,2), 1 => 3, relu; bias = false)
Conv((2, 2), 1 => 3, relu, bias=false)  # 12 parameters

julia> c(A)
3×3×3×1 Array{Float32, 4}:
[:, :, 1, 1] =
 0.590182  0.166435  0.441105
 0.388874  0.207832  0.466098
 0.736932  0.206818  0.0

[:, :, 2, 1] =
 0.283607  0.12781  0.350034
 0.339908  0.0      0.0
 0.314565  0.0      0.120079

[:, :, 3, 1] =
 0.0       0.36956   0.0787188
 0.196548  0.715786  0.308148
 0.0       0.425667  0.055858

풀링층3

  • maxpool(x, k::NTuple; pad=0, stride=k)
  • meanpool(x, k::NTuple; pad=0, stride=k)

환경

  • OS: Windows10
  • Version: Julia 1.6.2, Flux 0.12.8