Created
February 10, 2018 19:42
-
-
Save demacdolincoln/b778f74345d1da5822a32c9deb012383 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
addprocs(3) | |
global dim = 2 | |
################################################################################ | |
# preparando a base de dados # | |
################################################################################ | |
lin = 3 # linhas | |
col = 10000 # colunas | |
trein = SharedArray{Float64}(lin, col) | |
info("iniciando amostras de treinamento") | |
@parallel for i = 1:col | |
trein[1,i] = i > col/2 ? rand(-100:0)* rand() : rand(0:100)*rand() | |
trein[2,i] = i > col/2 ? rand(-100:0)* rand() : rand(0:100)*rand() | |
trein[3,i] = i > col/2 ? 1 : 0 | |
end | |
################################################################################ | |
# preparando os pesos # | |
################################################################################ | |
info("iniciando pesos") | |
global pesos = SharedArray{Float64}(2) | |
#pesos[1], pesos[2] = rand(),rand() | |
pesos[1], pesos[2] = 99,88 | |
#### Entrada Ponderada | |
# | |
#f(x) = ∑(entrada × peso) | |
@everywhere pondera(entradas, pesos) = sum(entradas .* pesos) | |
#### Linear Function | |
# | |
#x > 0 ? 1 : 0 | |
@everywhere ativacao(entPond) = entPond > 0 ? 1 : 0 | |
@doc """ | |
### treinamento | |
```ω = ω + η × (e - r) × a``` | |
onde: | |
* ω : peso | |
* η : constante de aprendizado (padrao 0.0001) | |
* e : resultado esperado | |
* r : resultado obtido | |
* a : valor da amostra atual | |
""" -> | |
function treinamento(trein::SharedArray,pesos::SharedArray, η::Float64=0.0001, epoch::Int=1000) | |
dimsTrein = size(trein) | |
@async @parallel for epoca = 1:epoch | |
for i in 1:dimsTrein[2] | |
amostra = trein[:, i] | |
p = pondera(amostra[1:2], pesos) | |
r = ativacao(p) | |
@sync for j = 1:dim | |
pesos[j] = pesos[j] .+ η*(amostra[3]- r) .* amostra[j] | |
end | |
end | |
if epoca % 100 == 0 | |
println("| $epoca | ") | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment