getting involved in deep learning with dl4j...getting involved in deep learning with dl4j...
TRANSCRIPT
![Page 1: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/1.jpg)
Getting involved in deep learning with DL4J@EclipseCon Europe 2019 – 22th October 2019 – LudwigsburgRCP Vision
Vincenzo Caselli [email protected] Guidieri [email protected] Paoli [email protected]
![Page 2: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/2.jpg)
2
AI, Machine & Deep Learning
ArtificialIntelligence
MachineLearning
DeepLearning
![Page 3: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/3.jpg)
3
A paradigm shift Algorithmic approach Deep Learning
Goal: make the input-output association “emerge” as a trained neural network(generalize from data)
In essence a Neural Network is an association machine
Goal: apply the algorithm rules to the input
( )Lots of
![Page 4: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/4.jpg)
4
• First steps in the 1940s - McCulloch and Pittshttp://wwwold.ece.utep.edu/research/webfuzzy/docs/kk-thesis/kk-thesis-html/node12.html
“The early model of an artificial neuron is introduced by Warren McCulloch and Walter Pitts in 1943.”
• 1958 - Frank Rosenblatt - The Perceptron
• Youtube “History of Neural Networks” https://www.youtube.com/watch?v=6fXNiJXUheI
Deep Learning Origins
![Page 5: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/5.jpg)
5
Inputs, Weights & ActivationHow a node state depends from its inputs and their weights
Input#1: Active
Input#2: Active
Input#3: Inactive
1
1
0
excitatory connection
inhibitory connection Σ
Activation Function
![Page 6: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/6.jpg)
6
Organizing nodes in layers ...
Multi Layer Perceptron
![Page 7: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/7.jpg)
7
Typical deep learning tasksMNIST
Face recognition
Image is person A?
... true | false
Face classification
Image who is?
... A | B | C
Fraud detection
Data Fraud?
... true | false Automated Driving Systems
Road Images &
sensor inputsbb
Steering wheel angle?
... 0°-10°+23°
Regression tasksClassification tasks
Rain mm forecastsensors rain mm
... ...
![Page 8: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/8.jpg)
8
A very minimal network & its training
I1
I2
I1 I2 O0.12 0.87 0.700.45 0.72 0.95
... ... ...
... ... ...
... ... ...
... ... ...
... ... ...
... ... ...
... ... ...
... ... ...
... ... ...
... ... ...
... ... ...
O
w1
w2
Training Set Network to be trained
![Page 9: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/9.jpg)
9
Global error for a given weights set
I1
I2
O
w1
w2
Target = desired output
Actual = current output
• weights (w1,w2) randomly initialized• item in the Training Set
calc the Actual output calc the distance from the Target output (=error)
• calc the global error at (w1,w2): e.g. Σ ei2 [global=for the entire Training Set]
error
![Page 10: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/10.jpg)
10
Error as a function in the weights domain
w2
w1
Error = Cost = Loss Function
error = f (w1,w2, ... )
![Page 11: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/11.jpg)
11
The goal: finding the minimum cost
http://al-roomi.org/3DPlot/index.html ((x^3+4*y^2)*sqrt(abs(sin(x^2+y^2))))/100
![Page 12: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/12.jpg)
12
The goal: finding the minimum cost
Ideal Goal Practical Goal
• find the global minimum• if it were a mathematical
function we could use the derivative
• the domain is a continuous
• find a good minimum• we can just move around
the weights domain and do samplings for the error
• steps are discrete (may be too small or too large)
![Page 13: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/13.jpg)
13
Adjusting weights for the path to a good minimum
w2
w1
Error (Cost)
where to move from here ??
... and how much to move ??LR = Learning Rate
![Page 14: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/14.jpg)
14
Gradient DescentThe Gradient Descent algorithm allows finding local minima:
1. from a given (random) initial point
2. find the direction with the steepest gradient descent
3. make a little step (w) in this direction (Note: it's a N-dimensional space)
4. go to step 2( like a skier in the fog ... )
![Page 15: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/15.jpg)
15
Backpropagation algorithmBasics dates back in 1960 - Henry J. Kelley / 1961 - Arthur E. Bryson
..."Learning representations by back-propagating errors"
Rumelhart, David E.; Hinton, Geoffrey E.; Williams, Ronald J. (8 October 1986 - Nature. 323)
https://towardsdatascience.com/understanding-backpropagation-algorithm-7bb3aa2f95fdhttps://www.linkedin.com/pulse/gradient-descent-backpropagation-ken-chen
https://www.nature.com/articles/323533a0
e
w
Learning Rate (LR) modulates w
![Page 16: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/16.jpg)
16
Neural Networks numbersA simple neural network for classifying images
• input: images 400x300 pixels =>120.000 input nodes
• hidden layer#1: 50.000 nodes=> 120.000 x 50.000
=> 6.000.000.000 connections (weights) just between input and first hidden layer !
![Page 17: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/17.jpg)
17
Neural Networks ages• bright & dark ages in the Neural Network history
(several “winter” seasons)
• training requires: lots of data great elaboration effort huge amount of time
• why so much success now?• availability of a great amout of data (Big Data)• high elaboration power in modern pc's
![Page 18: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/18.jpg)
18
Why “Deep” learning ?• each hidden layer can learn different features
input h1 h2 ... hn output
+abstraction
![Page 19: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/19.jpg)
19
Why “Deep” learning ?• e.g. in image classification tasks
imagelines,
corners,...
shapes ... complex figures output
+abstraction
![Page 20: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/20.jpg)
20
Many degrees of freedom High number of parameters and topology choices
• how many hidden layers ?
• which Activation Function ?
• Learning Rate value ?
• topology: • Standard Multilayer Neural Network • Convolutional Neural Network (CNN)• Recurrent Neural Network (RNN)• other ...
![Page 21: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/21.jpg)
21
Some priorityInput & Output layer topology & mapping have to be designed first!
![Page 22: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/22.jpg)
22
MNISTThe MNIST dataset can be considered: • a sort of “Hello World” in the Deep Learning domain• a reference example against which to test learning paradigms or techniques• 70,000 28×28 pixels images of handwritten 0-9 digits
![Page 23: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/23.jpg)
23
MNIST: slicing an image for input28
28
28
.
.
.
784 input 0|1 nodes
![Page 24: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/24.jpg)
24
MNIST: output layer28
28
28
.
.
.
784 input nodes
0001000000
10 output nodes(only one on=1)
0123456789
![Page 25: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/25.jpg)
25
MNIST, Training & Test Set
• 60,000 in the Training Set (used to train the network)• 10,000 in the Test Set
(used to measure how the network is really learning)This set, which is excluded from the training, plays the role of a “third party evaluator”.
784 input nodes 10 output nodes
![Page 26: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/26.jpg)
26
MNIST Dataset setup• download & unzip
http://github.com/myleott/mnist_png/raw/master/mnist_png.tar.gz
![Page 27: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/27.jpg)
27
Deeplearning4j website
![Page 28: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/28.jpg)
28
Eclipse New Project• New Maven Project
![Page 29: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/29.jpg)
29
DL4J Maven dependencies<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>it.rcpvision.dl4j</groupId> <artifactId>it.rcpvision.dl4j.workbench</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies>
<dependency><groupId>org.nd4j</groupId><artifactId>nd4j-native-platform</artifactId><version>1.0.0-beta5</version>
</dependency><dependency>
<groupId>org.deeplearning4j</groupId><artifactId>deeplearning4j-core</artifactId><version>1.0.0-beta5</version>
</dependency><dependency>
<groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId><version>1.7.26</version>
</dependency></dependencies>
</project>
![Page 30: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/30.jpg)
30
Constants & helper
//The absolute path of the folder containing MNIST training and testing subfoldersprivate static final String MNIST_DATASET_ROOT_FOLDER = "/home/vincenzo/dl4j/mnist_png/";
//Height and widht in pixel of each imageprivate static final int HEIGHT = 28;private static final int WIDTH = 28;
//The total number of images into the training and testing setprivate static final int N_SAMPLES_TRAINING = 60000;private static final int N_SAMPLES_TESTING = 10000;
//The number of possible outcomes of the network for each input, //correspondent to the 0..9 digit classificationprivate static final int N_OUTCOMES = 10;
private static DataSetIterator getDataSetIterator(String folderPath, int nSamples) throws IOException {
}
![Page 31: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/31.jpg)
31
DataSetIteratorprivate static DataSetIterator getDataSetIterator(String folderPath, int nSamples) throws IOException {
File folder = new File(folderPath);File[] digitFolders = folder.listFiles();
NativeImageLoader nil = new NativeImageLoader(HEIGHT, WIDTH);ImagePreProcessingScaler scaler = new ImagePreProcessingScaler(0, 1);
INDArray input = Nd4j.create(new int[] { nSamples, HEIGHT * WIDTH });INDArray output = Nd4j.create(new int[] { nSamples, N_OUTCOMES });
int n = 0;for (File digitFolder : digitFolders) {
int labelDigit = Integer.parseInt(digitFolder.getName());File[] imageFiles = digitFolder.listFiles();for (File imageFile : imageFiles) {
INDArray img = nil.asRowVector(imageFile);scaler.transform(img);input.putRow(n, img);output.put(n, labelDigit, 1.0);n++;
}}DataSet dataSet = new DataSet(input, output);List<DataSet> listDataSet = dataSet.asList();Collections.shuffle(listDataSet, new Random(System.currentTimeMillis()));DataSetIterator dsi = new ListDataSetIterator<DataSet>(listDataSet, 10); // batchSize=10return dsi;
}
Input & Output initialization,setting& packaging into aDataSet and a DataSetIterator
![Page 32: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/32.jpg)
32
Building the MLP Network//org.deeplearning4j.nn.conf.layers.DenseLayer//org.deeplearning4j.nn.weights.WeightInit//org.deeplearning4j.nn.conf.layers.OutputLayer//org.nd4j.linalg.lossfunctions.LossFunctions.LossFunction;
public static void main(String[] args) throws IOException {DataSetIterator dsi = getDataSetIterator(MNIST_DATASET_ROOT_FOLDER + "training", N_SAMPLES_TRAINING);
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder() .seed(123) //include a random seed for reproducibility // use stochastic gradient descent as an optimization algorithm .updater(new Nesterovs(0.006, 0.9)) .l2(1e-4) .list() .layer(new DenseLayer.Builder() //create the first, input layer with xavier initialization .nIn(HEIGHT*WIDTH) .nOut(1000) .activation(Activation.RELU) .weightInit(WeightInit.XAVIER) .build()) .layer(new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD) //create hidden layer .nIn(1000) .nOut(N_OUTCOMES) .activation(Activation.SOFTMAX) .weightInit(WeightInit.XAVIER) .build()) .build();
Layer#1
Layer#2
A random initialization method
Typical for a 1 on N output
Learning Rate
Momentum
Layer#1
![Page 33: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/33.jpg)
33
Training & testing the NetworkMultiLayerNetwork model = new MultiLayerNetwork(conf);model.init();//print the score with every 500 iterationmodel.setListeners(new ScoreIterationListener(500));model.fit(dsi);
DataSetIterator testDsi = getDataSetIterator( MNIST_DATASET_ROOT_FOLDER + "testing", N_SAMPLES_TESTING );Evaluation eval = model.evaluate(testDsi); //org.nd4j.evaluation.classification.Evaluation;
System.out.println(eval); =======================Evaluation Metrics======================== # of classes: 10 Accuracy: 0.9689 Precision: 0.9686 Recall: 0.9688 F1 Score: 0.9687Precision, recall & F1: macro-averaged (equally weighted avg. of 10 classes)
=========================Confusion Matrix========================= 0 1 2 3 4 5 6 7 8 9--------------------------------------------------- 969 0 1 1 0 2 3 1 3 0 | 0 = 0 0 1117 3 2 0 1 5 0 7 0 | 1 = 1 6 1 1002 1 3 0 3 8 8 0 | 2 = 2 0 0 6 976 0 12 0 5 8 3 | 3 = 3 1 0 5 1 940 0 13 2 2 18 | 4 = 4 4 1 0 4 2 865 9 0 5 2 | 5 = 5 9 2 1 0 3 8 931 1 3 0 | 6 = 6 1 7 12 2 3 1 0 989 3 10 | 7 = 7 4 1 3 5 3 4 6 4 942 2 | 8 = 8 6 7 1 7 11 3 2 5 9 958 | 9 = 9
Confusion matrix format: Actual (rowClass) predicted as (columnClass) N times
==================================================================
TrainingTesting
![Page 34: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/34.jpg)
34
Convolutional Neural NetworksLayers are not fully connected:
• A node receives input only from a group of adjacent nodes in previous layer
• The same set of weights (“filter”) is applied to all nodes between twoconsecutive layers
filter
![Page 35: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/35.jpg)
35
Convolutional Neural Networks• specific for images
E.g. 3x3 (or 5x5) filtersliding over the image,from top-left to bottom-right
![Page 36: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/36.jpg)
36
Convolutional Neural Networks• more filters
• each one detectsdifferent feature details
• after each Convolutional layer we put a Pooling (subsampling) layer in order to reduce subsequent dimensions
![Page 37: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/37.jpg)
37
Building the Convolutional Network//org.nd4j.linalg.lossfunctions.LossFunctions;//org.deeplearning4j.nn.conf.layers.ConvolutionLayer;//org.deeplearning4j.nn.conf.layers.SubsamplingLayer;int channels = 1;MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(123) .l2(0.0005) // ridge regression value .updater(new Nesterovs(0.006, 0.9)) .weightInit(WeightInit.XAVIER) .list() .layer(new ConvolutionLayer.Builder(5, 5) .nIn(channels ) .stride(1, 1) .nOut(20) .activation(Activation.IDENTITY) .build()) .layer(new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX) .kernelSize(2, 2) .stride(2, 2) .build()) .layer(new ConvolutionLayer.Builder(5, 5) .stride(1, 1) // nIn need not specified in later layers .nOut(50) .activation(Activation.IDENTITY) .build()) .layer(new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX) .kernelSize(2, 2) .stride(2, 2) .build())
Layer#1 - Convolutional20 5x5 filters
Layer#2 - Pooling 2x2
Layer#3 - Convolutional50 5x5 filters
Layer#4 - Pooling 2x2
![Page 38: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/38.jpg)
38
Building the Convolutional Network .layer(new DenseLayer.Builder().activation(Activation.RELU) .nOut(500) .build()) .layer(new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD) .nOut(N_OUTCOMES) .activation(Activation.SOFTMAX) .build()) .setInputType(InputType.convolutionalFlat(HEIGHT, WIDTH, channels)) // InputType.convolutional for normal image .build();
========================Evaluation Metrics======================== # of classes: 10 Accuracy: 0.9839 Precision: 0.9840 Recall: 0.9836 F1 Score: 0.9838Precision, recall & F1: macro-averaged (equally weighted avg. of 10 classes)
=========================Confusion Matrix========================= 0 1 2 3 4 5 6 7 8 9--------------------------------------------------- 976 0 0 0 0 0 0 1 2 1 | 0 = 0 0 1123 3 2 0 2 3 2 0 0 | 1 = 1 2 1 1014 2 0 0 0 12 1 0 | 2 = 2 0 0 1 998 1 2 0 5 1 2 | 3 = 3 0 0 3 0 964 0 6 2 0 7 | 4 = 4 2 0 0 10 1 863 5 1 2 8 | 5 = 5 6 2 1 0 1 2 945 0 1 0 | 6 = 6 1 1 5 1 0 0 0 1014 1 5 | 7 = 7 4 0 2 2 4 0 2 5 948 7 | 8 = 8 1 0 0 1 8 1 0 4 0 994 | 9 = 9
Confusion matrix format: Actual (rowClass) predicted as (columnClass) N times==================================================================
Layer#5 - Fully connected layer with 500 nodesLayer#6 - Output
![Page 39: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/39.jpg)
39
A real example taken from Kaggle
![Page 40: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/40.jpg)
40
Kaggle example with a CNNint channels = 3;MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(123) .l2(0.0005) // ridge regression value .updater(new Nesterovs(0.005, 0.9)) .weightInit(WeightInit.XAVIER) .list() .layer(new ConvolutionLayer.Builder(5, 5) .nIn(channels ) .stride(1, 1) .nOut(40) .activation(Activation.RELU) .build()) .layer(new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX) .kernelSize(5, 5) .stride(2, 2) .build()) .layer(new ConvolutionLayer.Builder(5, 5) .stride(1, 1) // nIn need not specified in later layers .nOut(50) .activation(Activation.RELU) .build()) .layer(new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX) .kernelSize(5, 5) .stride(2, 2) .build()) ========================Evaluation Metrics========================
# of classes: 2 Accuracy: 0.9457
![Page 41: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/41.jpg)
41
Resources
Code in this talkhttps://github.com/vincenzocaselli/dl4j-ece2019
Deeplearning4j Websitedeeplearning4j.org
Deeplearning4j GitHubhttps://github.com/eclipse/deeplearning4j
Deep Learning - A Practitioner's ApproachBy Adam Gibson, Josh Patterson
![Page 42: Getting involved in deep learning with DL4J...Getting involved in deep learning with DL4J @EclipseCon Europe 2019 – 22th October 2019 – Ludwigsburg RCP Vision Vincenzo Caselli](https://reader033.vdocuments.site/reader033/viewer/2022042909/5f3dc55588c8092cfd651ca0/html5/thumbnails/42.jpg)