Added Keras model import support for tf.keras models Link, Link​
Full inference and training support is available for ops/layers in the tf.keras namespace; inference only for general Tensorflow operations outside of the tf.keras namespace
Note also improvements to Keras import for reshape, permute, etc operations due to NHWC and NWC support in DL4J
DL4J now supports NHWC (channels last) data format for all CNN 2D layers, in addition to NCHW Link​
DL4J now supports NWC (channels last - [minibatch, sequence_length, size]) for all RNN and CNN 1D layers, in addition to NCW Link​
Keras import: added ReLU, ELU and Softmax advanced activation layers Link and Swish activation function Link​
Added DL4J SameDiffLoss class (for easily-defined DL4J ILossFunction's via SameDiff) Link​
Useful exceptions are now thrown when attempting to perform unsupported operations on FastText Link​
Added MultiLayerNetwork.evaluate(MultiDataSetIterator) and .evaluateRegression(MultiDataSetIterator) methods Link, Link​
Bug Fixes and Optimizations
Updaters (Adam, AdaGrad, etc) optimized via C++ operations (significant training performance boost) for DL4J and SameDiff Link, Link​
Some packages relocated to avoid split packages (that can be a problem for OSGi and Java 9 modules) Link​
Note: this is a breaking change for some class packages/imports. See this link for details on exact package changes
Deeplearning4j UI: Webjars versions locked down using dependency management to avoid check on each build Link​
Added MKLDNN (DNNL/OneDNN) support for depthwise_conv2d operation for DL4J and SameDiff Link​
Refactored/merged modules dl4j-perf and dl4j-util into deeplearning4j-core Link​
Fixed an issue with BertWordPieceTokenizer - potential StackOverflowError with certain inputs Link​
Fixed an issue with GlobalPooling layer with masks of different datatype to the activations datatype Link​
Fixed an issue with DL4JModelValidator for ComputationGraph Link​
Fixed an issue where SameDiff layers in DL4J could throw an exception when used with transfer learning Link​
Weight initialization for EmbeddingLayer and EmbeddingSequenceLayer now no longer depend on the vocabulary size (only the vector size) Link​
Fixed an issue with Keras import with bidirectional layers + preprocessors Link​
DL4J UI: added redirect from /train to /train/overview Link​
Fixed an issue where RecordReaderDataSetIterator builder collectMetaData configuration was not being applied Link​
Fixed an issue where MultiLayerNetwork evaluation was not passing metadata to the IEvaluation instances during evaluation Link, Link​
Fixed an issue with Spark training SharedTrainingMaster when training with a ComputationGraph and MultiDataSets Link​
Assorted fixes for edge cases for DL4J Keras import Link​
deelpearning4j-nlp-korean will no longer be released for Scala 2.12 due to required dependency only having Scala 2.11 version avairable Link​
Fix for ConvolutionalIterationListener for ComputationGraph Link​
Fixed an issue where dataset and model zoo downloads could get stuck if the server fails to send any data (now: timeout + retry) Link​
DL4J ModelSerializer no longer writes temporary files when restoring models from InputStream Link​
Fixes issues with UIServer multi session mode, and potential shutdown race condition Link​
Fixed an issue where TfidfVectorizer.vectorize() could throw a NPE when fit from LabelAwareIterator Link​
ND4J/SameDiff:
Features and Enhancements
SameDiff multi-threaded inference enhanced (and fixed) - a single SameDiff instance can now be used for inference safely and efficiently from multiple threads LinkLink​
cuDNN support added to SameDiff (automatically enabled for nd4j-cuda-10.x backend) Link​
libnd4j (c++ codebase underlying DL4J, ND4J and SameDiff) refactored to be more easily embeddable in other C++ projects Link​
ImagePreProcessingScaler now supports preprocessing of labels (for segmentation) Link​
Additional datatypes now supported for nd4j-tensorflow TensorflowConversion Link​
SameDiff operation namespaces (sd.math, sd.image, etc) are now code generated to ensure SameDiff and ND4J namespaces are identical (all operations included, same API) Link​