58 lines
950 B
Julia
58 lines
950 B
Julia
![]() |
# Simple Perceptron Layer
|
|||
|
|
|||
|
@flux type Simple
|
|||
|
weight
|
|||
|
bias
|
|||
|
x -> σ( weight*x + bias )
|
|||
|
end
|
|||
|
|
|||
|
Simple(nx::Integer, ny::Integer; init = randn) =
|
|||
|
Simple(init(nx, ny), init(ny))
|
|||
|
|
|||
|
# Time Delay Node
|
|||
|
|
|||
|
type Delay
|
|||
|
n::Int
|
|||
|
next
|
|||
|
end
|
|||
|
|
|||
|
# feed(l::Delay, x) = ...
|
|||
|
|
|||
|
# back(l::Delay, y) = ...
|
|||
|
|
|||
|
# Simple Recurrent
|
|||
|
|
|||
|
@flux type RecurrentU
|
|||
|
Wxh; Whh; Bh
|
|||
|
Wxy; Why; By
|
|||
|
|
|||
|
function feed(x, hidden)
|
|||
|
hidden′ = σ( Wxh*x + Whh*hidden + Bh )
|
|||
|
y = σ( Wxy*x + Why*hidden′ + By )
|
|||
|
y, hidden′
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
Recurrent(nx, ny, nh; init = randn) =
|
|||
|
Recurrent(init(nx, nh), init(nh, nh), init(nh),
|
|||
|
init(nx, ny), init(nh, ny), init(ny))
|
|||
|
|
|||
|
@flux type Looped{T}
|
|||
|
delay::Delay
|
|||
|
layer::T
|
|||
|
|
|||
|
function (x)
|
|||
|
y, hidden = layer(x, delay(hidden))
|
|||
|
return y
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
type Recurrent
|
|||
|
layer::Looped{RecurrentU}
|
|||
|
end
|
|||
|
|
|||
|
Recurrent(nx, ny, nh; init = randn, delay = 10) =
|
|||
|
Looped(Delay(delay, init(nh)), RecurrentU(nx, ny, nh))
|
|||
|
|
|||
|
@forward Recurrent.layer feed
|