1+ using SimpleChains
2+ using IterTools
3+ using MLDatasets
4+ using Random
5+ dataset = MLDatasets. Iris (). dataframe
6+
7+ data = Array (dataset)
8+ data = data[shuffle (1 : end), :]
9+
10+ function mapstrtoclass (flower)
11+ if string (flower) == " Iris-setosa"
12+ return UInt32 (1 )
13+ elseif string (flower) == " Iris-versicolor"
14+ return UInt32 (2 )
15+ elseif string (flower) == " Iris-virginica"
16+ return UInt32 (3 )
17+ end
18+ end
19+ ytrain = map (mapstrtoclass, data[:, 5 ])
20+ lenet = SimpleChain (
21+ static (4 ),
22+ TurboDense {true} (tanh, 20 ),
23+ TurboDense {true} (identity, 3 ),
24+ )
25+ lenetloss = SimpleChains. add_loss (lenet, LogitCrossEntropyLoss (ytrain))
26+
27+ p = SimpleChains. init_params (lenet);
28+ xtrain = Float32 .(Array (data[:, 1 : 4 ]' ))
29+ G = SimpleChains. alloc_threaded_grad (lenet);
30+
31+ lenetloss (xtrain, p)
32+
33+ report = let mlpdloss = lenetloss, X= xtrain
34+ p -> begin
35+ let train = mlpdloss (X, p)
36+ @info " Loss:" train
37+ end
38+ end
39+ end
40+
41+ for _ in 1 : 3
42+ @time SimpleChains. train_unbatched! (
43+ G, p, lenetloss, xtrain, SimpleChains. ADAM (), 5000
44+ );
45+ report (p)
46+ end
47+
48+ p = SimpleChains. init_params (lenet);
49+
50+ lenetloss (xtrain, p)
51+
52+ using Optimization, PSOGPU
53+
54+ lb = - ones (length (p)) .* 10
55+ ub = ones (length (p)) .* 10
56+ prob = OptimizationProblem ((u,data) -> lenetloss (data, u), p, xtrain; lb = lb, ub = ub)
57+
58+ n_particles = 1000
59+
60+ sol = solve (prob,
61+ ParallelPSOKernel (n_particles; gpu = false , threaded = true ),
62+ maxiters = 1000 )
0 commit comments