줄리아 플럭스에서 은닉층 다루는 방법
선형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