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

저희들의 저서 「줄리아 프로그래밍」이 2024 세종도서 학술부문에 선정되었습니다!

