githubEdit

发行说明

Eclipse Deeplearning4j的每个版本都有新的变化。

内容

1.0.0-beta5 发行亮点

  • 添加了模型服务器-使用JSON或(可选)二进制序列化对SameDiff和DL4J模型进行远程推理

  • 增加了Scala 2.12支持,删除了Scala2.10支持。具有Scala依赖关系的模块现在随Scala 2.11和2.12版本一起发布。

  • Apache Spark 1.x 支持删除 (现在只支持 Spark 2.x ). Note注意: Spark 删除了版本后缀 用于升级: 1.0.0-beta4_spark2 -> 1.0.0-beta5

  • 添加FastText 支持到 deeplearning4j-nlp

  • CUDA支持所有ND4J/SameDiff操作

    • 在1.0.0-beta4中,有些操作仅限于CPU。现在,所有的操作都有完整的CUDA支持

  • 在ND4J(和DL4J/SameDiff)中添加了对新数据类型的支持:BFLOAT16、UINT16、UINT32、UINT64

  • ND4J: 隐式广播支持添加到 INDArray (已经出现在SameDiff - 例如形状 [3,1]+[3,2]=[3,2])

  • CUDA 9.2, 10.0 与 10.1-Update2 仍然支持

    • 注意: 对于 CUDA 10.1, CUDA 10.1 update 2是推荐的。 CUDA 10.1 与 10.1 Update 1仍将运行,但在某些系统上的多线程代码中可能会遇到罕见的内部cuBLAS问题

  • 依赖项升级: Jackson (2.5.1 to 2.9.9/2.9.9.3), Commons Compress (1.16.1 to 1.18), Play Framework (2.4.8 to 2.7.3), Guava: (20.0 to 28.0-jre, 并遮挡以避免依赖关系冲突)

  • CUDA: 现在,除了设备(GPU)缓冲区之外,主机(RAM)缓冲区只在需要时分配(以前:主机缓冲区总是被分配的)

Deeplearning4J: 功能和增强

Deeplearning4J: Bugs修复和优化

Deeplearning4j: 迁移指南, 1.0.0-beta4 到 1.0.0-beta5

  • DL4J AsyncDataSetIterator 和 AsyncMultiDataSetIterator移到了 ND4J, 使用 org.nd4j.linalg.dataset.Async(Multi)DataSetIterator 替换原来的

  • 无法再加载从1.0.0-alpha及以前版本中保存的具有自定义图层的模型。解决方法:加载1.0.0-beta4,然后重新保存模型(链接arrow-up-right)。没有自定义层的模型仍然可以加载回0.5.0

  • Apache Spark 1.x 支持被删除( 现在只有 Spark 2.x 被支持). 注意:Spark版本后缀已删除:对于升级,请按如下方式更改版本: 1.0.0-beta4_spark2 -> 1.0.0-beta5

  • Scala 2.10 被删除, Scala 2.12 被添加 (对于具有Scala依赖项的模块)

Deeplearning4j: 1.0.0-beta5 已知的问题

  • dl4j-spark_2.11和_2.12依赖项错误地拉入datavec-spark_2.11/2.12版本1.0.0-SNAPSHOT。解决方法:根据此处arrow-up-right此处arrow-up-right使用依赖关系管理的控件版本

  • 由于添加了同步,某些层(如LSTM)在不使用cuDNN时在CUDA的1.0.0-beta5上可能比1.0.0-beta4上运行得慢。此同步将在1.0.0-beta5之后的下一个版本中删除

  • CUDA 10.1:在运行cuda10.1 update 1(可能还有10.1)时,在某些系统上的多线程代码中可能会遇到罕见的内部cuBLAS问题。建议使用CUDA 10.1 update2。

ND4J/SameDiff: 功能和增强

ND4J/SameDiff: Bug 修复与优化

ND4J: 迁移指南, 1.0.0-beta4 到 1.0.0-beta5

  • OldAddOp, OldSubOp, 等被删除 : 用 AddOp, SubOp, 等操作

  • Nd4j.trueScalar 与 trueVector 被删除 ; 使用 Nd4j.scalar 和 Nd4j.createFromArray 方法

  • INDArray.javaTensorAlongDimension 被删除 ; 用 INDArray.tensorAlongDimension 代替它

  • INDArray.lengthLong() 被删除 ; 使用 INDArray.length() 代替它

ND4J: 1.0.0-beta5 已知的问题

  • nd4j-native 在一些 OSX 系统上会出现这样的错误 Symbol not found: ___emutls_get_address - 查看此链接arrow-up-right

  • SBT1.3.0可能失败,Illegal character in path;SBT1.2.8可以。这是SBT问题,不是ND4J问题。有关详细信息,请参阅此链接arrow-up-right

DataVec: 功能和增强

DataVec: Bug修复和优化

RL4J: 功能和增强

RL4J: Bug修复和优化

Bug修复和优化

Arbiter: 已知问题

  • Jackson版本的升级需要更改通用对象序列化的执行方式;存储在1.0.0-beta4或更早格式中的Arbiter JSON数据在1.0.0-beta5中可能不可读取。(链接arrow-up-right

ND4S功能和增强

1.0.0-beta4发行亮点

主要亮点:对ND4J和DL4J的完全多数据类型支持。在过去的版本中,ND4J中的所有N维数组都被限制为单个数据类型(float或double),全局设置。现在,所有数据类型的数组都可以同时使用。支持以下数据类型:

  • DOUBLE: 双精度浮点,64位 (8 字节)

  • FLOAT: 单精度浮点,32位 (4 字节)

  • HALF: 半精度浮点,16位(2字节), "FP16"

  • LONG: 长有符号整数,64位(8字节)

  • INT: 有符号整数,32位(4字节)

  • SHORT: 有符号短整数,16位(2字节)

  • UBYTE: 无符号字节,8位(1字节),0到255

  • BYTE: 有符号字节,8位(1字节),-128至127

  • BOOL: 布尔类型,(0/1,真/假)。使用ubyte存储以便于操作并行化

  • UTF8: 字符串数组类型,UTF8格式

ND4J 行为变化:

  • 从Java原生数组创建INDArray时,INDArray数据类型将由原生数组类型确定(除非指定了数据类型)

    • 例如:Nd4j.createFromArray(double[])->double数据类型INDArray

    • 类似地,Nd4j.scalar(1)、Nd4j.scalar(1L)、Nd4j.scalar(1.0)和Nd4j.scalar(1.0f)将分别生成INT、LONG、DOUBLE和FLOAT类型的标量INDArray

  • 某些操作要求操作数具有匹配的数据类型

    • 例如,如果x和y是不同的数据类型,则可能需要强制转换: x.add(y.castTo(x.dataType()))

  • 有些操作有数据类型限制:例如,不支持UTF8数组上的sum,BOOL数组上的variance也不受支持。对于布尔数组(如sum)上的某些操作,首先强制转换为整数或浮点类型可能是有意义的。

DL4J 行为变化:

  • MultiLayerNetwork/ComputationGraph 不再以任何方式依赖于ND4J全局数据类型。

    • 网络的数据类型(用于参数和激活的数据类型)可以在构建期间设置, 使用 NeuralNetConfigutation.Builder().dataType(DataType)方法

    • 网络可以从一种类型转换为另一种类型(双精度到浮点,浮点到半精度等)使用 MultiLayerNetwork/ComputationGraph.convertDataType(DataType) 方法

主要新方法:

  • Nd4j.create(), zeros(), ones(), linspace(), 等带有DataType参数的方法

  • INDArray.castTo(DataType) 方法 - 将INDArrays从一种数据类型转换为另一种数据类型

  • 新 Nd4j.createFromArray(...) 方法

ND4J/DL4J: CUDA - 10.1 支持添加, CUDA 9.0 支持删除

1.0.0-beta4支持的CUDA版本: CUDA 9.2, 10.0, 10.1.

ND4J: Mac/OSX CUDA 支持被删除

不再提供Mac(OSX)CUDA二进制文件。Linux(x86_64,ppc64le)和Windows(x86_64)CUDA支持仍然存在。OSX CPU支持(x86_64)仍然可用。

DL4J/ND4J: MKL-DNN 支持被添加 在CPU/本机后端上运行时,默认情况下,DL4J(和ND4J conv2d等操作)现在支持MKL-DNN。MKL-DNN支持针对以下层类型实现:

  • ConvolutionLayer 与 Convolution1DLayer (与 Conv2D/Conv2DDerivative ND4J 操作)

  • SubsamplingLayer 与 Subsampling1DLayer (与 MaxPooling2D/AvgPooling2D/Pooling2DDerivative ND4J 操作 )

  • BatchNormalization 层 (与 BatchNorm ND4J op)

  • LocalResponseNormalization 层 (与 LocalResponseNormalization ND4J 操作 )

  • Convolution3D 层 (与 Conv3D/Conv3DDerivative ND4J 操作)

MKL-DNN对其他层类型(如LSTM)的支持将在将来的版本中添加。

MKL-DNN 可以使用以下代码全局禁用(ND4J和DL4J)Nd4jCpu.Environment.getInstance().setUseMKLDNN(false);

MKL-DNN 可以全局禁用特定操作通过设置 ND4J_MKL_FALLBACK 环境变量为要禁用MKL-DNN支持的操作的名称。例如:ND4J_MKL_FALLBACK=conv2d,conv2d_bp

ND4J: 内存管理更改提高了性能

以前的ND4J版本使用定期垃圾收集(GC)来释放未在内存工作区中分配的内存。(请注意,默认情况下,DL4J几乎对所有操作都使用工作区,因此在训练 DL4J网络时,经常会禁用定期GC)。但是,对垃圾收集的依赖导致性能开销随着JVM堆中对象的数量而增加。

在1.0.0-beta4中,周期性垃圾收集在默认情况下是禁用的;相反,只有在需要从工作区外分配的数组中回收内存时,才会调用GC。

要重新启用定期GC(根据beta3中的默认设置),并将GC频率设置为每5秒(5000ms),可以使用:

ND4J: 改进了Rank 0/1数组支持

在以前的ND4J版本中,在获取行/列、使用INDArray.get(NDArrayIndex…)获取子数组或从Java数组/标量创建数组时,标量和向量有时是rank 2而不是rank 0/1。现在,这些rank 0/1情况的行为应该更加一致。注意:为了保持getRow和getColumn的旧行为(即分别返回shape[1,x]和[x,1]的rank2数组),可以使用getRow(long,boolean)和getColumn(long,boolean)方法。

DL4J: Attention 层被添加

Deeplearning4J: 功能和增强

Deeplearning4J: Bug修复和优化

  • DL4J Spark 训练:修复共享集群(多个同时训练作业)-现在随机生成的Aeron流ID(链接arrow-up-right

  • 如果抛出内存不足异常(Linkarrow-up-right),cuDNN帮助程序将不再试图依靠内置层实现

  • 批量归一化全局方差重新参数化,以避免在分布式训练期间出现下溢和零/负方差(Linkarrow-up-right

  • 修复了在使用dropout的迁移学习时在层之间错误共享dropout实例的错误(Linkarrow-up-right,Linkarrow-up-right)

  • 修正了tensorAlongDimension可能导致边界情况的数组顺序不正确,从而导致LSTMs(Link)中出现异常的问题(Linkarrow-up-right

  • 修复了ComputationGraph.getParam(String)的边界情况问题,其中层名称包含下划线(Linkarrow-up-right

  • 修复了在CUDA上使用ParallelInference的边界情况,其中(很少)在线程(链接arrow-up-right链接arrow-up-right)之间传输数组之前,输入数组操作(如归一化)可能无法完全完成

  • 修复了当示例总数不是批处理大小(Linkarrow-up-rightLinkarrow-up-right)的倍数时使用KFoldIterator的边界情况

  • 修复了DL4J UI在Java 9/10/11(Linkarrow-up-rightLinkarrow-up-right)上抛出NoClassDefFoundError的问题

  • Keras导入:为权重初始化添加别名(链接arrow-up-right

  • 修复了在克隆网络配置时无法正确克隆dropout实例的问题(链接arrow-up-right

  • 修复了具有单个输入的ElementwiseVertex的工作区问题(链接arrow-up-right

  • 修复了用户界面中分离StatsStorage可能会尝试两次删除存储的问题,从而导致异常(链接arrow-up-right

  • 修复了当小批量中的所有标签都是同一类时,LossMultiLabel将生成nan的问题。现在返回0梯度。(链接arrow-up-right链接arrow-up-right

  • 修复了从保存的格式(链接arrow-up-right)还原网络时DepthwiseConv2D权重可能形状错误的问题

  • 修复了BaseDatasetIterator.next()在设置预处理器(链接arrow-up-right)时不应用预处理器的问题

  • 改进了CenterLossOutputLayer(链接arrow-up-right)的默认配置

  • 修复了UNet非预训练配置(Linkarrow-up-right)的问题

  • 修复了Word2Vec VocabConstructor在某些情况下可能死锁的问题(链接arrow-up-right

  • SkipGram和CBOW(在Word2Vec中使用)被设置为本地操作以获得更好的性能(Linkarrow-up-right

  • 修复了在使用InMemoryStatsListener(链接arrow-up-right)时保留对分离的StatsListener实例的引用可能导致内存问题的问题

  • 优化:工作区已添加到SequenceVectors和Word2Vec(链接arrow-up-right

  • 为RecordReaderDataSetIterator改进校验 (Linkarrow-up-right)

  • 改进的WordVectors实现中的未知词处理(Linkarrow-up-right)

  • Yolo2OutputLayer: 添加了对错误标签形状的验证。(链接arrow-up-right

  • LastTimeStepLayer 当输入掩码全部为0时,现在将引发异常(没有数据-没有最后一个时间步)(链接arrow-up-right

  • 修复了MultiLayerNetwork/ComputationGraph.setLearningRate方法在某些罕见情况下可能导致更新器状态无效的问题(Linkarrow-up-right

  • 修正了Conv1D 层在MultiLayerNetwork.summary()中计算输出长度的问题(Linkarrow-up-right

  • 异步迭代器现在用于EarlyStoppingTrained中,以提高数据加载性能(Linkarrow-up-right

  • EmbeddingLayer 与 EmbeddingSequenceLayer在CUDA上的性能已经被提升 (Linkarrow-up-right)

  • 删除了过时的/遗留的scala工具库(Linkarrow-up-right, Linkarrow-up-right)

  • 修复L2NormalizeVertex equals/hashcode方法中的问题(链接arrow-up-right

  • 修复了ConvolutionalListener中的工作区问题(Linkarrow-up-right

  • 修复了 EvaluationBinary falsePositiveRate 计算 (Linkarrow-up-right)

  • 为MultiLayerNetwork.output(DataSetIterator)方法添加了验证和有用的异常(Linkarrow-up-right)

  • 修复了在尚未调用init()的情况下ComputationGraph.summary()将引发NullPointerException的小问题 (Linkarrow-up-right)

  • 修正了一个计算图问题,在训练过程中,输入到一个单层/顶点重复多次可能会失败 (Linkarrow-up-right)

  • 改进KMeans实现的性能 (Linkarrow-up-right)

  • 修复了“wrapper”层(如FrozenLayer)中RNNs的rnnGetPreviousState问题 (Linkarrow-up-right)

  • Keras导入:修复了导入某些Keras分词器时出现的单词顺序问题(链接arrow-up-right

  • Keras导入:修复了KerasTokenizer类中可能存在UnsupportedOperationException异常的问题(Linkarrow-up-right)

  • Keras导入:修复了一个导入问题,模型结合了嵌入、变形和卷积层 (Linkarrow-up-right)

  • Keras导入:修复了一些RNN模型的输入类型推理的导入问题 (Linkarrow-up-right)

  • 修复在 LocallyConnected1D/2D 层中的一些填充问题 (Linkarrow-up-right)

ND4J/SameDiff: 功能和增强

ND4J/SameDiff: API 改变 (迁移指南): 1.0.0-beta3 到 1.0.0-beta4

  • ND4J数据类型-重大更改,请参阅本节顶部的突出显示

  • nd4j-base64 模块 (在 beta3中弃用) 已经被移除 . Nd4jBase64 类已被移到 nd4j-api (Linkarrow-up-right)

  • 在指定执行沿维度操作(例如,缩减)的参数时,现在在操作构造函数中指定了缩减轴,而不是在OpExecutioner调用中单独指定。 (Linkarrow-up-right)

  • 移除旧的基于Java循环的BooleanIndexing方法。应该使用等效的本地操作。 (Linkarrow-up-right)

  • 移除 Nd4j.ENFORCE_NUMERICAL_STABILITY, Nd4j.copyOnOps, 等 (Linkarrow-up-right)

  • SameDiff“op creator”方法(SameDiff.tanh()、SameDiff.conv2d(…)等)已移动到子类-通过SameDiff.math()/random()/nn()/cnn()/rnn()/loss()方法或SameDiff.math/random/nn/cnn/rnn/loss字段访问creator (Linkarrow-up-right)

  • Nd4j.emptyLike(INDArray) 已被移除。使用 Nd4j.like(INDArray) 代替 (Linkarrow-up-right)

  • org.nd4jutil.StringUtils 被移除; 建议使用Apache commons lang3 StringUtils 代替 (Linkarrow-up-right)

  • ND4J Jackson RowVector(De)Serializer由于数据类型更改,已弃用 ; NDArrayText(De)Serializer 应该用来代替它 (Linkarrow-up-right, Linkarrow-up-right)

  • nd4j-instrumentation 模块由于缺乏使用/维护而被移除 (Linkarrow-up-right)

ND4J/SameDiff: Bug修复与优化

ND4J: 已知问题

  • 大多数CustomOperation操作(如SameDiff中使用的操作)在下一版本之前都是CPU。未能及时完成1.0.0-beta4版本的GPU支持。

  • 一些使用Intel Skylake CPU的用户报告说,当OMP_NUM_THREADS设置为8或更高时,MKL-DNN卷积2d反向传播操作(DL4J卷积层反向传播,ND4J“conv2d_bp”操作)出现死锁。调查表明,这可能是MKL-DNN的问题,而不是DL4J/ND4J的问题。见7637arrow-up-right号问题。解决方法:通过ND4J_MKL_FALLBACK(见前面)禁用用于conv2d_bp操作的MKL-DNN,或对Skylake cpu全局禁用MKL-DNN。

DataVec: 功能与增强

DataVec: 优化与缺陷修复

Arbiter: 增强

Arbiter: 修复

  • 修复了Arbiter中使用的提前停止将导致序列化异常的问题 (Linkarrow-up-right)

1.0.0-beta3 发行亮点

  • ND4J/Deeplearning4j: 增加了对CUDA 10.0的支持。放弃了对CUDA 8.0的支持。(1.0.0-beta3版本支持CUDA 9.0、9.2和10.0)

  • SameDiff现在支持从DataSetIterator和MultiDataSetIterator进行训练和评估。 评估类已经被迁移到ND4J.

  • DL4J Spark 训练(梯度共享)现在是完全容错的,并且对阈值自适应(可能更稳健的收敛)有改进。现在可以在master/worker上轻松地独立配置端口。

Deeplearning4J: 新功能

  • Added 添加OutputAdapter 接口和 MultiLayerNetwork/ComputationGraph.output 方法,使用OutputAdapter重载 (GC以免分配需要通过GC清理的堆外内存) Linkarrow-up-right, Link,arrow-up-right Linkarrow-up-right

  • 使用用户指定的工作区添加了ComputationGraph/MultiLayerNetwork rnnTimeStep重载。 Linkarrow-up-right

  • 添加 Cnn3DLossLayer Linkarrow-up-right

  • ParallelInference:实例现在可以实时更新模型(无需重新初始化) Linkarrow-up-right

  • ParallelInferenc: 添加 ParallelInference 的原地模式 Linkarrow-up-right

  • 增加了对不兼容损失/激活函数组合的验证(如softmax+nOut=1, 或 sigmoid+mcxent)。可以使用outputValidation(false)禁用验证 Linkarrow-up-right

  • Spark 训练: 为梯度共享实现增加了完全容错(健壮的故障恢复) Linkarrow-up-right Linkarrow-up-right

  • Spark 训练现在支持更灵活地配置端口(不同的worker有不同的配置),使用 PortSupplier Linkarrow-up-right Linkarrow-up-right

  • Spark 训练: 改进了梯度共享阈值自适应算法;使自定义阈值设置成为可能,并且使默认值对初始阈值配置更加健壮,在某些情况下提高了收敛速度。 Linkarrow-up-right

  • Spark 训练: 为大消息实现分块消息传递以减少内存需求(以及缓冲区长度不足问题) Linkarrow-up-right

  • Spark 训练: 添加 MeshBuildMode 配置用于提高了大型集群的可扩展性 Linkarrow-up-right

  • Spark 网络数据管道: 为“小文件”(图像等)分布式训练用例添加了FileBatch、FileBatchRecordReader等 Linkarrow-up-right

  • 为容错/调试目的添加了FailureTestingListener Linkarrow-up-right

  • 将Apache Lucene/Solr升级到7.5.0版(从7.4.0版) Linkarrow-up-right

  • 添加系统属性 (org.deeplearning4j.tempdirorg.nd4j.tempdir) 允许重写ND4J和DL4J使用的临时目录 Linkarrow-up-right Linkarrow-up-right

  • MultiLayerNetwork/ComputationGraph.clearLayerStates 方法修改为 public (以前是 protected) Linkarrow-up-right

  • AbstactLayer.layerConf() 方法现在是 public Linkarrow-up-right

  • ParallelWrapper模块现在不再有artifact id的Scala版本后缀; 新 artifact id 是 deeplearning4j-parallel-wrapper Linkarrow-up-right

  • 在Yolo2OutputLayer中改进了无效输入/标签的验证和错误消息 Linkarrow-up-right

  • Spark 训练: 添加 SharedTrainingMaster.Builder.workerTogglePeriodicGC 和 .workerPeriodicGCFrequency 在worker上轻松配置ND4J垃圾回收配置。在worker上将默认GC设置为5秒 Linkarrow-up-right

  • Spark 训练: 添加了阈值编码调试模式(在训练 期间记录每个worker的当前阈值和编码统计信息)。使用 SharedTrainingConfiguration.builder.encodingDebugMode(true)启用。注意这个操作有计算开销。 Linkarrow-up-right

Deeplearning4J: Bug 修复与优化

  • 修复了L1/L2和更新器(Adam、Nesterov等)在用小批量划分梯度以获得平均梯度之前被应用的问题。保持旧的行为,使用NeuralNetConfiguration.Builder.legacyBatchScaledL2(true) Linkarrow-up-right.

    • 请注意,对于某些更新器(如Adam)来说,学习率可能需要降低,以解释与早期版本相比的这一变化。其他一些更新器(如SGD、NoOp等)应该不受影响。

    • 请注意,保存在1.0.0-beta2或更早版本中的反序列化(加载)配置/网络将默认为旧行为,以实现向后兼容性。所有新网络(在1.0.0-beta3中创建)将默认为新行为。

  • 修复了EarlyStoppingScoreCalculator不能正确处理“最大分数”的情况而不是最小化的问题。 Linkarrow-up-right

  • 修复VGG16ImagePreProcessor通道偏移值的顺序(BGR与RGB) Linkarrow-up-right

  • 基于权值噪声的变分自编码缺陷修复 Linkarrow-up-right

  • 修复BaseDataSetIterator 不遵循 'maximum examples' 配置的问题 Linkarrow-up-right

  • 优化: 工作区现在用于计算图/多层网络评估方法(避免在计算期间分配必须由垃圾收集器清理的堆外内存) Linkarrow-up-right

  • 修复了一个问题,即混洗与MnistDataSetIterator的子集组合在一起时,在重置之间不会保持相同的子集 Linkarrow-up-right

  • 修复StackVertex.getOutputType的问题 Linkarrow-up-right

  • 修复CNN到/从RNN预处理器处理掩码数组的问题 Linkarrow-up-right

  • 修复了模型动物园中VGG16非预训练配置的问题 Linkarrow-up-right

  • 修复 了TransferLearning nOutReplace中一行中多个层被修改的问题 Linkarrow-up-right

  • 修复了CuDNN工作区在标准fit调用之外执行反向传播的问题 Linkarrow-up-right

  • 修复了在计算图中的输出层上过早清除丢弃掩码的问题 Linkarrow-up-right

  • RecordReaderMultiDataSetIterator 现在支持5D数组 (用于 3D CNNs) Linkarrow-up-right

  • 修复了TBPTT结合掩码和不同数量输入输出数组的多输入输出计算图中的缺陷 Linkarrow-up-right

  • 改进了批归一化层的输入验证/异常 Linkarrow-up-right

  • 修复了TransferLearning GraphBuilder nOutReplace与子采样层结合时的错误 Linkarrow-up-right

  • SimpleRnnParamInitializer 现在正确地遵循偏差初始化配置 Linkarrow-up-right

  • 修复SqueezeNet动物园模型非预处理配置 Linkarrow-up-right

  • 修复Xception动物园模型非预训练配置 Linkarrow-up-right

  • 修正了多输出计算图的一些评估签名问题 Linkarrow-up-right

  • 改进的大型网络多层网络/计算图汇总格式Linkarrow-up-right

  • 修正了一个问题,如果一个层中的所有参数的梯度都恰好为0.0,那么梯度归一化可能导致NaNs Linkarrow-up-right

  • 修复了MultiLayerNetwork/ComputationGraph.setLearningRate可能引发SGD和NoOp更新器异常的问题 Linkarrow-up-right

  • 修复了StackVertex加掩码在某些罕见情况下的问题 Linkarrow-up-right

  • 修复了1.0.0-alpha之前格式的冻结层的JSON反序列化问题 Linkarrow-up-right

  • 修复了GraphBuilder.removeVertex在某些有限情况下可能失败的问题 Linkarrow-up-right

  • 修复 CacheableExtractableDataSetFetcher中的缺陷 Linkarrow-up-right

  • DL4J Spark 训练:修复了多GPU训练+评估的线程/设备关联性问题 Linkarrow-up-right

  • DL4J Spark 训练: 使所有Aeron线程后台程序线程在所有其他线程完成时阻止Aeron停止JVM关闭 Linkarrow-up-right

  • 为批归一化层添加了cudnnAllowFallback配置(如果CuDNN意外失败,则回滚到内置实现) Linkarrow-up-right

  • 修正了Spark训练中多worker(多GPU)节点的一些罕见并发问题Linkarrow-up-right Linkarrow-up-right

  • 修复了BatchNormalization层的问题,该问题阻止在每个worker上正确同步平均值/方差估计值以进行GradientSharing训练,从而导致收敛问题Linkarrow-up-right

  • 在ArchiveUtils中添加了检测ZipSlip CVE尝试的检查 Linkarrow-up-right

  • DL4J Spark 训练与评估:方法现在使用Spark上下文中的Hadoop配置来确保运行时集配置在Spark函数中可用,这些函数直接从远程存储(HDFS等)读取 Linkarrow-up-right

  • MultiLayerNetwork 与 ComputationGraph 现在支持超过 Integer.MAX_VALUE 个参数 Linkarrow-up-right Linkarrow-up-right

  • 为Nd4j.readTxt添加了数据验证-现在对无效输入抛出异常,而不是返回不正确的值 Linkarrow-up-right

  • 修复了KNN实现中使用无效距离函数(返回小于0的“距离”)时可能出现死锁的问题 Linkarrow-up-right

  • 在加载Keras导入模型时添加了同步,以避免用于加载的底层HDFS库中出现线程安全问题 Linkarrow-up-right

  • 修复了具有大预取值的Async(Multi)DataSetIterator的罕见问题 Linkarrow-up-right

Deeplearning4J: API 修改 (迁移指南): 1.0.0-beta2 到 1.0.0-beta3

  • DL4J中的IEvaluation类已被弃用并移到ND4J,以便它们可用于SameDiff训练。功能和api不变

  • MultiLayerConfiguration/ComputationGraphConfiguration pretrain(boolean)backprop(boolean) 已被弃用并不再使用。使用 fit 和 pretrain/pretrainLayer 方法来替代 。 Linkarrow-up-right

  • ParallelWrapper 模块现在不再有artifact id的Scala版本后缀; 新 artifact id 为 deeplearning4j-parallel-wrapper 应用用来替代 Linkarrow-up-right

  • deeplearning4j-nlp-korean 模块现在有Scala版本后缀,由于scala依赖项; 新artifact ID 是 deeplearning4j-nlp-korean_2.10deeplearning4j-nlp-korean_2.11 Linkarrow-up-right

Deeplearning4J: 已知问题: 1.0.0-beta3

  • 在一个物理节点上同时运行多个Spark训练作业(即,来自一个或多个Spark作业的多个jvm)可能会导致网络通信问题。解决方法是在VoidConfiguration中手动设置唯一的流ID。对不同的作业使用唯一(或随机)整数值。 Linkarrow-up-right

ND4J: 新功能

ND4J: Bug修复与优化

ND4J: API 变更 (迁移指南): 1.0.0-beta2 到 1.0.0-beta3

  • CUDA 8.0支持已被删除。CUDA 9.0、9.2和10.0支持在1.0.0-beta3中提供

  • nd4j-base64模块内容已被弃用;从现在起使用nd4j-api中的等效类 Linkarrow-up-right

  • nd4j jackson模块中的某些类已被弃用;从现在起使用nd4j-api中的等效类 Linkarrow-up-right

ND4J: 已知问题: 1.0.0-beta3

  • Android 可能需要手动排除掉模块 nd4j-base64(现在已弃用)。这是由于org.nd4j.serde.base64.Nd4jBase64 类在 nd4j-api 和 nd4j-base64 模块中都出现了。两个版本都有相同的内容。使用 exclude group: 'org.nd4j', module: 'nd4j-base64' 来排除。

DataVec: 新功能

  • 为org.opencv.core.Mat和字符串文件名添加了NativeImageLoader方法重载 Linkarrow-up-right

DataVec: Bug 修复与优化

  • 修复JDBCRecordReader对空值的处理 Linkarrow-up-right

  • 改进了针对无效输入的ObjectDetectionRecordReader的错误/验证(如果图像对象中心位于图像边界之外) Linkarrow-up-right

  • 修复了使用在早期版本的Android上不可用的方法进行FileSplit的问题Linkarrow-up-right

  • 为Spark函数中需要Hadoop配置的情况添加了SerializableHadoopConfiguration和BroadcastHadoopConfigHolder Linkarrow-up-right Linkarrow-up-right

  • 修复了JDBCRecordReader处理实数值列结果类型的问题 Linkarrow-up-right

  • 添加了CSVRecordReader/LineRecordReader在未初始化的情况下使用的验证和有用异常 Linkarrow-up-right

Arbiter: 修复

  • 添加了org.nd4j.linalg.primitives.Pair/Triple和Scala元组之间的转换 Linkarrow-up-right

1.0.0-beta2 发行亮点

  • ND4J/Deeplearning4j: 增加了对CUDA9.2的支持。放弃对CUDA 9.1的支持。(1.0.0-beta2版本支持CUDA 8.0、9.0和9.2)

  • Deeplearning4j: 带训练支持的新SameDiff层 - Linkarrow-up-right Linkarrow-up-right

  • Deeplearning4j 资源(数据集、预训练模型)存储目录现在可以通过 DL4JResources.setBaseDirectory 方法或 org.deeplearning4j.resources.directory 系统属性

  • ND4J: 现在所有索引都是用long而不是int来完成的,以使数组的维数和长度大于整数(大约 21亿)。

  • ND4J: 现在将使用Intel MKL-DNN作为默认/捆绑的BLAS实现(替换以前默认的 OpenBLAS)

  • Deeplearning4j: 添加了内存溢出(OOM)崩溃转储报告功能。在训练 /推理OOM时提供内存使用和配置转储(以帮助调试和调整内存配置)。

  • Deeplearning4j -新层:局部连接1d Linkarrow-up-right, 局部连接2D Linkarrow-up-right

Deeplearning4J: 新功能

  • 添加了新的SameDiff层(自动区分-仅限单个类,需要前向传播定义)到DL4J,并提供了完整的训练支持-SameDiffLayer、SameDiffVertex、SameDiffOutputLayer、SameDiffLambdaLayer、SameDiffLambdaVertex-请注意,这些层目前仅限CPU执行 Linkarrow-up-right Linkarrow-up-right Linkarrow-up-right

  • 资源(数据集、预训练模型)存储目录现在可以通过 DL4JResources.setBaseDirectory 方法或 org.deeplearning4j.resources.directory 系统属性。请注意,还可以为下载设置不同的基本位置(用于DL4J资源的本地镜像) Linkarrow-up-right

  • 添加了内存溢出(OOM)崩溃转储报告功能。如果训练/推理OOM,则提供内存使用和配置的转储。对于MultiLayerNetwork/ComputationGraph.memoryInfo方法,也提供了相同的信息(没有崩溃)。可以使用系统属性禁用(或输出目录设置) - Linkarrow-up-right

  • 添加了复合的[Multi]DataSetPreProcessor,以便在单个迭代器中应用多个[Multi]DataSetPreProcessor Linkarrow-up-right

  • 多输出网络的附加计算图评估方法: evaluate(DataSetIterator, Map<Integer,IEvaluation[]>)evaluate(MultiDataSetIterator, Map<Integer,IEvaluation[]>) Linkarrow-up-right

  • 添加了JointMultiDataSetIterator-用于从多个DataSetIterator创建多个MultiDataSetIterator的实用迭代器 Linkarrow-up-right

  • GraphVertices现在可以直接使用可训练参数(不只是用可训练参数封闭层) Linkarrow-up-right

  • 添加 MultiLayerNetwork/ComputationGraph getLearningRate 方法 Linkarrow-up-right

  • 添加 RandomDataSetIterator 与 RandomMultiDataSetIterator (主要用于测试/调试) Linkarrow-up-right Linkarrow-up-right

  • 增加了周期性的“1周期”学习率调度等 - Linkarrow-up-right

  • Spark训练的RDD重新分区更具可配置性(adds Repartitioner 接口) Linkarrow-up-right

  • 添加 ComputationGraph.getIterationCount() 与 .getEpochCount() 为了与 MultiLayerNetwork保持一致 Linkarrow-up-right

  • 添加了局部连接的1d层 Linkarrow-up-right Linkarrow-up-right

  • Spark "data loader" API (主要用于Spark) Linkarrow-up-right Linkarrow-up-right Linkarrow-up-right

  • Spark 评估: 添加了允许指定评估worker数量(小于Spark线程数)的评估方法重载 Linkarrow-up-right

  • CnnSentenceDataSetIterator 现在有一个Format参数,支持RNNs和1D CNNs的输出数据 Linkarrow-up-right

  • 添加 ComputationGraph/MultiLayerNetwork.pretrain((Multi)DataSetIterator, int epochs) 方法重载 Linkarrow-up-right

  • 多层网络和计算图现在有output方法重载,网络输出可以放在用户指定的工作区中,而不是分离 链接arrow-up-right 链接arrow-up-right。这可以用来避免在释放本机内存之前创建需要垃圾收集的INDarray。

  • EmbeddingSequenceLayer现在除了支持 [minibatch,seqLength] 格式数据外还支持 [minibatch,1,seqLength] 格式序列数据 Linkarrow-up-right

  • CuDNN 批归一化实现现在将用于rank 2输入,而不仅仅是rank 4输入 Linkarrow-up-right

  • DL4J的环境变量和系统属性已集中到DL4JResources和DL4JEnvironmentVars类中,并有适当的描述 Linkarrow-up-right Linkarrow-up-right

  • MultiLayerNetwork 与 ComputationGraph output/feedForward/fit 方法现在是线程安全的,通过同步来实现。注意,由于性能的原因,不建议并发使用(相反:使用并行推理);但是现在同步的方法应该避免由于并发修改而导致的模糊错误 Linkarrow-up-right

  • BarnesHutTSNE 现在在距离度量未定义的情况下抛出一个有用的异常(例如,所有零加上余弦相似性) Linkarrow-up-right

Deeplearning4J: Bug 修复与优化

  • 如果监听器已存在,则ComputationGraph.addListeners无法正常工作 Linkarrow-up-right, Linkarrow-up-right

  • TinyImageNetDataSetIterator 未验证/正确使用输入形状配置 Linkarrow-up-right, Linkarrow-up-right

  • BatchNormalization 层现在正确地断言,如果需要,将设置nOut(而不是以后出现不友好的形状错误) Linkarrow-up-right

  • 修正了OutputLayer不能正确初始化参数约束的问题 Linkarrow-up-right

  • 修正了Nesterov更新器在执行CUDA时只使用CPU操作的性能问题 Linkarrow-up-right

  • 删除了DL4J优化器的TerminationCondition-在实践中未使用,并且有小的开销 Linkarrow-up-right

  • 修复了启用工作区时EvaluativeListener可能遇到工作区验证异常的问题 Linkarrow-up-right

  • 修复了计算图未正确调用TrainingListener.onEpochStart/onEpochEnd的问题 Linkarrow-up-right

  • 修复了TensorFlowCnnToFeedForwardPreProcessor工作区问题 Linkarrow-up-right

  • CuDNN批量归一化的性能优化 Linkarrow-up-right

  • 性能优化:在安全的情况下,Dropout将会被原地应用,避免复制。 Linkarrow-up-right

  • 增加了Dropout的CuDNN实现 Linkarrow-up-right

  • 减少CuDNN的内存使用:CuDNN工作内存现在在网络中的层之间共享和重用 Linkarrow-up-right

  • CuDNN批处理归一化实现将失败,数据类型为FP16 Linkarrow-up-right

  • 修复双向LSTM可能错误地使用导致异常的工作区问题 Linkarrow-up-right

  • 修复早停,分数最大化(准确率,F1等)没有正确触发终止条件的问题 Linkarrow-up-right

  • 修复了在ComputationGraph.computeGradientAndScore()中标签掩码计数器可能错误递增的问题 Linkarrow-up-right

  • ComputationGraph 在训练期间没有设置lastEtlTime 字段 Linkarrow-up-right

  • 修复了启用工作区时自动编码器层的问题Linkarrow-up-right

  • 修复了EmbeddingSequenceLayer使用掩码数组的问题 Linkarrow-up-right

  • Lombok现在在任何地方都提供了作用域,在使用DL4J时不在用户类路径上 Linkarrow-up-right

  • 修复了WordVectorSerializer.readParagraphVectors(File)初始化标签源的问题Linkarrow-up-right

  • Spark 训练(梯度共享)现在可以正确地处理训练期间遇到的空分区边界情况 Linkarrow-up-right

  • 对于Spark梯度共享训练,错误传播得更好/更一致 Linkarrow-up-right

  • 修复了1D CNN层的问题,该层具有遮罩阵列且stride>1(遮罩未正确缩小) Linkarrow-up-right

  • DL4J批归一化实现仅在训练期间(CuDNN未受影响),在推理期间未正确添加epsilon值 Linkarrow-up-right

  • 当最大非填充值小于0时,具有最大池和ConvolutionMode.SAME的CUDNN子采样层可能把填充值(0)作为边界值的最大值。 Linkarrow-up-right

  • Spark梯度共享训练现在可以将监听器正确地传递给worker Linkarrow-up-right

  • 修复了用户界面和FileStatsStorage的罕见(非终端)并发修改问题 Linkarrow-up-right

  • CuDNN 卷积层现在支持dilation>2(以前:使用DL4J conv层实现作为回调) Linkarrow-up-right

  • Yolo2OutputLayer 现在实现 computeScoreForExamples() Linkarrow-up-right

  • SequenceRecordReeaderDataSetIterator 现在正确处理“没有标签”的情况Linkarrow-up-right

  • 修复了BarnesHutTSNE可能遇到工作区验证异常的问题 Linkarrow-up-right

  • 在某些情况下,EMNIST迭代器在重置后可能会产生不正确的数据Linkarrow-up-right

Deeplearning4J: API 变更 (迁移指南): 1.0.0-beta 到 1.0.0-beta2

  • 由于缺少CuDNN支持,Graves LSTM已被弃用,取而代之的是LSTM,但其精度与实际情况类似。改用LSTM类。

  • deeplearning4j-modelexport-solr: 现在使用Lucene/Solr版本7.4.0(以前是7.3.0) Linkarrow-up-right

  • CNN2d层的掩码数组必须是可广播的4d格式: [minibatch,depth or 1, height or 1, width or 1] - 以前是二维的形状 [minibatch,height][minibatch,width]。 这可以防止以后的情况(池化层)中的模糊性,并允许更复杂的掩码场景(例如在同一个小批量中为不同的图像大小进行掩码 )。 Linkarrow-up-right

  • 一些旧的/不推荐使用的模型和层方法已被删除。(validateInput(), initParams())。因此,可能需要更新某些自定义层 Linkarrow-up-right

Deelpearning4J: 1.0.0-beta2 已知问题

  • Windows用户无法加载SvhnLabelProvider(在HouseNumberDetection示例中使用)中使用的HDF5文件。Linux/Mac用户不受影响。windows用户的解决方法是添加sonatype快照依赖项org.bytedeco.javacpp-presets:hdf5-platform:jar:1.10.2-1.4.3-SNAPSHOT Linkarrow-up-right

  • Keras 模型导入现在导入每个Keras应用程序

  • 支持GlobalPooling3D图层导入

  • 支持RepeatVector层导入

  • 支持LocallyConnected1D和LocallyConnected2D层

  • 现在可以通过注册自定义SameDiff层导入Keras Lambda层

  • 现在支持所有Keras优化器

  • 现在可以导入所有高级激活功能。

  • 许多小错误已经被修复,包括对所有的BatchNormalization配置进行适当的权重设置,改进SeparableConvolution2D的形状,以及完全支持双向层。

ND4J: 新功能

  • ND4J: all indexing is now done with longs instead of ints to allow for arrays with dimensions and lengths greater than Integer.MAX_VALUE (approx. 2.1 billion)现在所有索引都是用long而不是int来完成的,以使数组的维数和长度大于整数(大约为 21亿)。

  • 添加了使用Nd4j.writesNumpy(INDArray,File)编写Numpy.npy格式的功能,并使用Nd4j.convertToNumpy(INDArray)将INDArray转换为内存中严格的Numpy格式Linkarrow-up-right

  • ND4j-common ClassPathResource: 添加 ClassPathResource.copyDirectory(File) Linkarrow-up-right

  • SameDiff: 现有大量新操作和已存在操作的反向传播实现

  • 添加 Nd4j.randomBernoulli/Binomial/Exponential 便捷方法 Linkarrow-up-right

  • 添加了禁用/禁止ND4J初始化日志记录的方法 通过 org.nd4j.log.initialization 系统属性 Linkarrow-up-right

  • SameDiff 类 - 大多数op/constructor方法现在都有完整/有用的javadoc Linkarrow-up-right

  • 现在可以全局禁用工作区,忽略工作区配置。这主要用于调试;使用 Nd4j.getWorkspaceManager().setDebugMode(DebugMode.DISABLED)Nd4j.getWorkspaceManager().setDebugMode(DebugMode.SPILL_EVERYTHING); 来启用它。 Linkarrow-up-right [Link]

  • 为环境变量处理添加了EnvironmentalAction API Linkarrow-up-right

  • ND4J 环境变量和系统属性集中在ND4jEnvironmentVars 与 ND4jSystemProperties 类 Linkarrow-up-rightLinkarrow-up-right

ND4J: Bug 修复与优化

  • SameDiff: 执行和单个操作的大量错误修复

  • 修复了使用真标量的INDArray.toDoubleArray()的问题(rank 0数组)Linkarrow-up-right

  • 修复了DataSet.sample()不适用于rank 3+功能的问题 Linkarrow-up-right

  • IActivation 现在实现对激活和梯度验证/强制执行相同的形状Linkarrow-up-right

  • 修正了向量为1d的muliColumnVector问题 Linkarrow-up-right

  • ImagePreProcessingScaler现在支持通过NormalizerSerializerStrategy和ModelSerializer进行序列化 Linkarrow-up-right

  • DL4J Spark梯度共享分布式训练实现中阈值编码的性能优化 Linkarrow-up-right

  • SameDiff: DL4J Spark梯度共享分布式训练实现中阈值编码的性能优化 Linkarrow-up-right

  • DataSet.save() 与 MultiDataSet.save() 方法现在出现时保存示例元数据 Linkarrow-up-right

  • 修正了当数据集不等分为没有余数的包时KFoldIterator的问题 Linkarrow-up-right

  • 修复了当资源位于带有空格的路径上时版本检查功能无法加载资源的问题 Linkarrow-up-right

ND4J: 已知问题

ND4J: API 变更 (迁移指南): 1.0.0-beta 到 1.0.0-beta2

  • CUDA 9.1支持已被移除。提供CUDA 8.0、9.0和9.2支持

  • 由于长索引的变化,在某些地方应该使用 long/long[]代替int/int[]。(如 INDArray.size(int), INDArray.shape())

  • 简化DataSetIterator API: totalExamples(), cursor() 与 numExamples() - 这些在大多数DataSetIterator实现中都是不受支持的,并且在实践中没有用于训练。自定义迭代器也应该删除这些方法 Linkarrow-up-right

  • 已删除长期不推荐使用的getFeatureMatrix()。改用DataSet.getFeatures()。 Linkarrow-up-right

  • 已删除未使用且未正确测试/维护的实用程序类BigDecimalMath。如果需要,用户应该为这个功能找到一个候选库。

  • 未正确维护的复数支持类(IComplexNumber,IComplexNDArray)已完全删除 Linkarrow-up-right

DataVec:新功能

  • 添加了AnalyzeLocal类以镜像AnalyzeSpark的功能(但没有Spark依赖项) Linkarrow-up-right

  • 添加了JacksonLineSequenceRecordReader:RecordReader用于多示例JSON/XML,其中文件中的每一行都是一个独立的示例Linkarrow-up-right

  • 添加 RecordConvert.toRecord(Schema, List<Object>) Linkarrow-up-right

  • 添加缺失的 FloatColumnCondition Linkarrow-up-right

  • 为“CSV中的每一行是一个序列,序列是单值/单变量”添加了CSVLineSequenceRecordReader Linkarrow-up-right

  • 为“单个CSV中的多个多值序列”数据添加了CSVMultiSequenceRecordReader Linkarrow-up-right

DataVec: 优化与Bug修复

DataVec: API 变更 (迁移指南): 1.0.0-beta 到 1.0.0-beta2

Arbiter: 新功能

Arbiter: 修复

  • DataProvider已被弃用。改用DataSource。

1.0.0-beta 发行亮点

  • DL4J的性能和内存优化

Deeplearning4J: 新功能

  • 新层或增强层:

  • 添加 ComputationGraph.output(DataSetIterator) 方法 Linkarrow-up-right

  • 添加 MultiLayerNetwork/ComputationGraph.layerInputSize 方法 Linkarrow-up-right Linkarrow-up-right

  • 添加 SparkComputationGraph.feedForwardWithKey 具有特征掩码支持的重载 Linkarrow-up-right

  • 添加 MultiLayerNetwork.calculateGradients 方法(便于获取参数和输入梯度,例如一些模型可解释性方法) Linkarrow-up-right Linkarrow-up-right

  • 添加了从配置获取每个层的输入/激活类型的支持:ComputationGraphConfiguration.getLayerActivationTypes(InputType...), ComputationGraphConfiguration.GraphBuilder.getLayerActivationTypes(), NeuralNetConfiguration.ListBuilder.getLayerActivationTypes(), MultiLayerConfiguration.getLayerActivationTypes(InputType) methods Linkarrow-up-right

  • Evaluation.stats() 现在以更易于读取的矩阵格式而不是列表格式打印混淆矩阵 Linkarrow-up-right

  • 添加ModelSerializer.addObjectToFile, .getObjectFromFile and .listObjectsInFile 用于将任意Java对象存储在与保存的网络相同的文件中 Linkarrow-up-right

  • 添加了SpatialDropout支持(具有Keras导入支持) Linkarrow-up-right

  • 添加MultiLayerNetwork/ComputationGraph.fit((Multi)DataSetIterator, int numEpochs) 重载 Linkarrow-up-right

  • 增加了性能(硬件)监听器: SystemInfoPrintListenerSystemInfoFilePrintListener Linkarrow-up-right

Deeplearning4J: Bug修复与优化

  • 通过优化工作区的内部使用来优化性能和内存 Linkarrow-up-right

  • 反射库已完全从DL4J中删除,不再需要自定义层序列化/反序列化 Linkarrow-up-right, Linkarrow-up-right

    • 修复了Android上自定义和一些Keras导入层的问题

  • RecordReaderMultiDataSetIterator 将不再尝试将未使用的列转换为数值 Linkarrow-up-right

  • 新增动物园模型:

    • (将要做 )

  • Android编译修复(删除重复类、对齐版本、删除一些依赖项) Linkarrow-up-right Linkarrow-up-right Linkarrow-up-right

  • 修正了RecordReaderMulitDataSetIterator,其中某些构造函数的输出可能不正确 Linkarrow-up-right

  • 在返向传播期间,冻结层之前的非冻结层将不再被跳过(对于GANs和类似的架构很有用) Linkarrow-up-right Linkarrow-up-right

  • 修复了计算图拓扑排序在所有平台上可能不一致的问题;有时可能中断在PC上训练并部署在Android上的计算图(具有多个有效拓扑排序) Linkarrow-up-right

  • 修复了CuDNN批归一化的问题,使用 1-decay 替代 decay Linkarrow-up-right

  • deeplearning4j-cuda 如果在将nd4j-native后端设置为更高优先级的类路径上出现异常,则不再引发异常 Linkarrow-up-right

  • 为CifarDataSetIterator添加了RNG控件 Linkarrow-up-right

  • WordVectorSerializer完成后立即删除临时文件 Linkarrow-up-right

Deeplearning4J: API 更新(迁移指南): 1.0.0-alpha 到 1.0.0-beta

  • WorkspaceMode.SINGLE 与 SEPARATE 已经被弃用; 使用 WorkspaceMode.ENABLED 代替

  • 内部层API更改:自定义层将需要更新为新的层API-请参阅内置层或自定义层示例

  • 由于JSON格式更改,需要先注册1.0.0-beta JSON(ModelSerializer)之前格式的自定义层等,然后才能对其进行反序列化。保存在1.0.0-beta或更高版本中的内置层和模型不需要这样做. 使用 NeuralNetConfiguration.registerLegacyCustomClassesForJSON(Class) 来实现这个目的

  • IterationListener已被弃用,取而代之的是TrainingListener。对于现有自定义侦听器, 从 implements TrainingListener 切换到 extends BaseTrainingListener Linkarrow-up-right

  • ExistingDataSetIterator 已弃用;使用 fit(DataSetIterator, int numEpochs) method instead方法代替

Deelpearning4J: 1.0.0-beta 已知问题

  • ComputationGraph TrainingListener onEpochStart 与 onEpochEnd 未正确调用方法

  • DL4J Zoo Model FaceNetNN4Small2 未正确调用方法

  • 早停计分计算器的值THAR应最大化(准确性,F1等)不正常工作(值被最小化,而不是最大化)。解决方法:重写ScoreCalculator.calculateScore(...) 并返回 1.0 - super.calculateScore(...).

Deeplearning4J: Keras 导入 - API 变更 (迁移指南): 1.0.0-alpha 到 1.0.0-beta

ND4J: 新功能

ND4J:已知问题

  • 并非所有的操作梯度都实现了自动微分

  • 在1.0.0-beta版本中添加的绝大多数新操作尚未使用GPU。

ND4J: API 变更 (迁移指南): 1.0.0-alpha 到 1.0.0-beta

DataVec: 新功能

DataVec: 优化与Bug 修复

DataVec: API 变更 (迁移指南): 1.0.0-alpha 到 1.0.0-beta

  • DataVec ClassPathResource 已被弃用; 使用 nd4j-common 版本替代 Linkarrow-up-right

Arbiter: 新功能

  • 为OCNN(一分类神经网络)添加LayerSpace

Arbiter: 修复

1.0.0-alpha发行亮点

  • ND4J:添加了SameDiff-Java自动微分库(alpha版本)和Tensorflow导入(技术预览)以及数百个新操作

  • ND4J: 增加了CUDA 9.0和9.1支持(使用cuDNN),放弃了对CUDA 7.5的支持,继续支持CUDA 8.0

  • ND4J: 本机二进制文件(Maven Central上的nd4j-native)现在支持AVX/AVX2/AVX-512(Windows/Linux)

  • DL4J: 大量新层和API改进

  • DL4J: Keras 2.0 导入支持

Deeplearning4J: 新功能

  • Layers (新的和增强的)

  • 添加了参数约束API(LayerConstraint接口), 和 MaxNormConstraint, MinMaxNormConstraint, NonNegativeConstraint, UnitNormConstraint 实现 (Linkarrow-up-right)

  • 学习率调度的显著重构 (Linkarrow-up-right)

    • 添加了ISchedule接口;添加了Exponential、Inverse、Map、Poly、Sigmoid和Step调度实现(Linkarrow-up-right)

    • Added support for both iteration-based and epoch-based schedules via ISchedule. Also added support for custom (user defined) schedules通过ISchedule增加了对基于迭代和基于轮数的计划的支持。还添加了对自定义(用户定义)计划的支持

    • 在更新程序上配置学习率调度, 通过 .updater(IUpdater) 方法

  • 添加了dropout API(IDropout-以前的dropout是可用的,但不是类);添加了Dropout、AlphaDropout(用于自归一化网络)、GaussianDropout(乘法)、GaussianNoise(加法)。添加对自定义dropout类型的支持 (Linkarrow-up-right)

  • 通过ISchedule接口增加了对辍学调度的支持 (Linkarrow-up-right)

  • 增加了权重/参数噪声API(IWeightNoise接口);增加了DropConnect和WeightNoise(加法/乘法高斯噪声)实现(Linkarrow-up-right);DropConnect和dropout现在可以同时使用

  • 添加层配置别名 .units(int) 相当于 .nOut(int) (Linkarrow-up-right)

  • 添加 ComputationGraphConfiguration GraphBuilder .layer(String, Layer, String...) 的别名 .addLayer(String, Layer, String...)

  • 不再需要层索引 MultiLayerConfiguration ListBuilder (i.e., .list().layer(<layer>) 现在可以用于配置) (Linkarrow-up-right)

  • 添加 MultiLayerNetwork.summary(InputType)ComputationGraph.summary(InputType...) 方法(显示层和激活大小信息) (Linkarrow-up-right)

  • MultiLayerNetwork, ComputationGraph 分层可训练层现在可以跟踪轮数量 (Linkarrow-up-right)

  • 添加deeplearning4j-ui-standalone 模块: uber-jar 方便用户界面服务器的启动 (使用: java -jar deeplearning4j-ui-standalone-1.0.0-alpha.jar -p 9124 -r true -f c:/UIStorage.bin)

  • 权重初始化:

    • 添加 .weightInit(Distribution) 方便/重载(之前:必需.weightInit(WeightInit.DISTRIBUTION).dist(Distribution)) (Linkarrow-up-right)

    • WeightInit.NORMAL (用于自归一化神经网络) (Linkarrow-up-right)

    • Ones, Identity 权重初始化 (Linkarrow-up-right)

    • 添加新分布(LogNormalDistribution, TruncatedNormalDistribution, OrthogonalDistribution, ConstantDistribution) 可用于权重初始化 (Linkarrow-up-right)

    • RNNs: 增加了将循环网络权重的权重初始化分别指定为“输入”权重的功能(Linkarrow-up-right)

  • 添加的层别名: Convolution2D (ConvolutionLayer), Pooling1D (Subsampling1DLayer), Pooling2D (SubsamplingLayer) (Linkarrow-up-right)

  • 增加了Spark IteratorUtils-包装了一个用于Spark网络训练的RecordReaderMultiDataSetIterator (Linkarrow-up-right)

  • CuDNN支持层(卷积层等)现在警告用户如果使用没有CuDNN的CUDA (Linkarrow-up-right)

  • 二进制交叉熵(LossBinaryXENT)现在实现了裁剪(默认情况下为1e-5到(1-1e-5))以避免数值下溢/NaNs (Linkarrow-up-right)

  • SequenceRecordReaderDataSetIterator 现在支持多标签回归(Linkarrow-up-right)

  • TransferLearning FineTuneConfiguration 现在有了设置训练/推理工作区模式的方法 (Linkarrow-up-right)

  • IterationListener iterationDone 方法现在同时报告当前迭代和epoch计数;删除了不必要的调用/被调用方法 (Linkarrow-up-right)

  • 添加 MultiLayerNetwork.layerSize(int), ComputationGraph.layerSize(int)/layerSize(String) 轻松确定层的大小 (Linkarrow-up-right)

  • 添加 MultiLayerNetwork.toComputationGraph() 方法 (Linkarrow-up-right)

  • 添加 NetworkUtils 易于更改已初始化网络的学习速率的方便方法 (Linkarrow-up-right)

  • 添加 MultiLayerNetwork.save(File)/.load(File) 和 ComputationGraph.save(File)/.load(File) 方便方法 (Linkarrow-up-right)

  • 添加 CheckpointListener 在训练期间定期保存模型副本(每N个iter/epoch,每T个时间单位) (Linkarrow-up-right)

  • 添加带掩码数组的ComputationGraph输出方法重载 (Linkarrow-up-right)

  • 一种新的LossMultiLabel损失函数 (Linkarrow-up-right)

  • 新增动物园模型:

  • 新的迭代器和迭代器改进:

  • 增加了用于早停的额外评分功能(ROC指标、全套评估/回归指标等) (Linkarrow-up-right)

  • 为多层网络和计算图添加额外的ROC和ROCMultiClass评估重载 (Linkarrow-up-right)

  • 阐明Evaluation.stats()输出以引用“预测”而不是“示例”(前者更适合于RNN) (Linkarrow-up-right)

  • EarlyStoppingConfiguration 现在支持 Supplier<ScoreCalculator> 用于非序列化分数计算器 (Linkarrow-up-right)

  • 改进的通过错误方法加载模型时的ModelSerializer异常 (例如 尝试通过restoreMultiLayerNetwork加载计算图) (Linkarrow-up-right)

  • 添加了SparkDataValidation实用程序方法来验证HDFS或本地上保存的DataSet和MultiDataSet (Linkarrow-up-right)

  • ModelSerializer: 添加 restoreMultiLayerNetworkAndNormalizer and restoreComputationGraphAndNormalizer 方法(Linkarrow-up-right)

  • ParallelInference 现在有了支持输入掩码数组的输出重载 (Linkarrow-up-right)

Deeplearning4J: Bug 修复与优化

Deeplearning4J: API 变更 (迁移指南): 0.9.1 到 1.0.0-alpha

  • 对于多层网络和计算图,缺省训练工作空间模式已从NONE切换到SEPARATE。 (Link)

  • 行为变更: fit(DataSetIterator)类似的方法不再进行分层预训练,然后进行反向传播。用于预训练,使用 pretrain(DataSetIterator)pretrain(MultiDataSetIterator) 方法 (Linkarrow-up-right)

  • 以前不推荐的更新器配置方法 (.learningRate(double), .momentum(double) etc) 全被删除

    • 配置学习率: 使用 .updater(new Adam(lr)) 代替.updater(Updater.ADAM).learningRate(lr)

    • 配置偏置学习率: 使用 .biasUpdater(IUpdater) 方法

    • 配置学习率调度: 使用 use .updater(new Adam(ISchedule))

  • 通过枚举更新器配置(i.e., .updater(Updater)) 已弃用;使用 .updater(IUpdater)

  • .regularization(boolean) 已删除配置;功能现在总是等同于.regularization(true)

  • .useDropConnect(boolean) 移除;使用 .weightNoise(new DropConnect(double)) 代替

  • .iterations(int) 方法已被删除(很少使用,用户感到困惑)

  • 多个实用程序类 (在 org.deeplearning4j.util) 已弃用和/或移至 nd4j-common. 在nd4j common中使用相同的类名org.nd4j.util 代替。

  • DL4J中的DataSetIterators已从deeplearning4j nn模块移动到新的deeplearning4j-datasets, deeplearning4j-datavec-iterators 和 deeplearning4j-utility-iterators。包/导入保持不变;deeplearning4j-core将它们作为可传递的依赖项引入,因此在大多数情况下不需要用户更改。 (Linkarrow-up-right)

  • 以前已弃用 .activation(String) 已被移除;使用 .activation(Activation).activation(IActivation) 代替

  • 层API更改:自定义层可能需要实现applyConstraints(int iteration, int epoch) 方法

  • 参数初始值设定项API更改:自定义参数初始值设定项可能需要实现isWeightParam(String)isBiasParam(String) 方法

  • RBM (受限制的玻尔兹曼机器)层已完全移除。考虑使用VariationalAutoencoder作为替换 (Linkarrow-up-right)

  • GravesBidirectionalLSTM 已被弃用;使用 new Bidirectional(Bidirectional.Mode.ADD, new GravesLSTM.Builder()....build())) 代替

  • 以前不推荐的WordVectorSerializer方法现在已被删除 (Linkarrow-up-right)

  • 删除 deeplearning4j-ui-remote-iterationlisteners 模块并废弃 RemoteConvolutionalIterationListener (Linkarrow-up-right)

Deeplearning4J: 1.0.0-alpha 已知问题

  • 与0.9.1(配置了工作区)相比,CUDA上某些网络类型的性能可能会降低。这将在下一个版本中解决

  • 在对CUDA的FP16支持下发现了一些问题 (Linkarrow-up-right)

  • Keras 2支持,保持Keras 1的向后兼容性

  • Keras 2和1导入使用完全相同的API,由DL4J推断

  • Keras单元测试覆盖率增加了10倍,更多的真实集成测试

  • 用于导入和检查层权重的单元测试

  • Leaky ReLU, ELU, SELU 支持模型导入

  • 所有Keras层都可以用可选的偏置项导入

  • 删除旧的deeplearning4j keras模块,删除旧的“模型”API

  • 所有Keras初始化 (Lecun normal, Lecun uniform, ones, zeros, Orthogonal, VarianceScaling, Constant) 被支持

  • DL4J和Keras模型导入支持的1D卷积和池化

  • Keras模型导入支持的一维和二维空洞卷积层

  • 支持1D 零填充层

  • DL4J和模型导入完全支持Keras约束模块

  • DL4J和Keras模型导入中的1D和2D层上采样(包括测试中的GAN示例)

  • Keras模型导入支持的大多数合并模式,支持Keras 2合并层API

  • DL4J与Keras模型导入支持可分离卷积二维层

  • DL4J和Keras模型导入支持二维反卷积

  • 导入时完全支持Keras噪声层(Alpha dropout、Gaussian dropout和noise)

  • 在Keras模型导入中支持SimpleRNN层

  • 支持双向层wrapper keras模型导入

  • 在DL4J中添加LastTimestepVertex以支持Keras RNN层的return_sequences=False。

  • DL4J支持循环权重初始化和Keras导入集成。

  • SpaceToBatch和BatchToSpace层在DL4J中提供更好的YOLO支持,加上端到端的YOLO Keras导入测试。

  • DL4J和Keras模型导入中的Cropping2D支持

Deeplearning4J: Keras 导入 - API 变更 (迁移指南): 0.9.1 到 1.0.0-alpha

  • 在0.9.1中已弃用 ModelModelConfiguration 已被永久删除。使用 KerasModelImportarrow-up-right 代替, 它现在是Keras模型导入的唯一入口点。

Deeplearning4J: Keras 导入 - 已知问题

  • Embedding layer: 在DL4J中,嵌入层的输出默认为2D,除非指定了预处理器。在Keras中,输出总是3D的,但是根据指定的参数可以解释为2D。这通常会导致在导入嵌入层时出现困难。许多情况已得到处理,问题已得到解决,但仍有不一致之处。

  • Batchnormalization layer: DL4J的批归一化层比Keras的版本要严格得多(一种好的方式)。例如,DL4J仅允许对4D卷积输入的空间维度进行归一化,而在Keras中,任何轴都可以用于归一化。根据维度顺序(NCHW对比NHWC)和Keras用户使用的特定配置,这可能会导致预期的(!) 以及意外的导入错误。

  • 在DL4J中导入用于训练 目的的Keras模型的支持仍然非常有限(enforceTrainingConfig == true),将在下一版本中正确处理。

  • Keras Merge layers:Keras functional API似乎很好用,但是在Sequential模型中使用时会出现问题。

  • Reshape layers: 在导入时可能有点不可靠。DL4J很少需要在标准输入预处理器之外显式地重塑输入。在路缘石中,经常使用重塑层。在边缘情况下,映射这两种范式可能很困难。

ND4J:新功能

  • 新增数百项新操作

  • 具有自动微分功能的新DifferentialFunctionapi(参见SameDiff一节) Linkarrow-up-right

  • 新增tensorflow导入技术预览(支持1.4.0及以上版本)

  • 增加了Apache Arrow序列化,支持新的tensor API Linkarrow-up-right

  • 增加对AVX/AVX2和AVX-512指令集的支持,适用于Windows/Linux的nd4j-native Linkarrow-up-right

  • Nvidia CUDA 8/9.0/9.1 现在被支持

  • 引入了工作区改进以确保安全:默认情况下启用SCOPE_PANIC profiling模式

  • INDArray serde的FlatBuffers支持

  • 添加了对自动广播操作的支持

  • libnd4j, underlying c++ library, 功能增强,现在提供: NDArray 类, Graph 类, 并可以用作独立库或可执行文件。

  • 卷积相关操作现在除了支持NCHW数据格式外,还支持NHWC。

  • 累积操作现在可以选择保持缩小的维度。

ND4J: 已知问题

  • 并非所有的操作梯度都实现了自动微分

  • 在1.0.0-alpha中添加的绝大多数新操作尚未使用GPU。

ND4J: API 变更 (迁移指南): 0.9.1 到 1.0.0-alpha

用于ND4J的SameDiffarrow-up-right自动微分引擎的Alpha发布。

功能

  • 有两种可用的执行模式:Java驱动的执行和序列化图的本机执行。

  • SameDiff图可以使用FlatBuffers序列化

  • 从SameDiff操作生成并运行计算图。

  • 图可以对输入数据运行正向传播,并计算反向传播的梯度。

  • 已经支持许多高级层,如密集连层、卷积(1D-3D)反卷积、可分离卷积、池和上采样、批处理归一化、局部响应归一化、LSTM和GRU。

  • 总共有大约350个SameDiff操作可用,包括许多用于构建复杂图的基本操作。

  • 支持TensorFlowarrow-up-right和ONNX图的基本导入以进行推理。

  • TFOpTestsarrow-up-right 是用于为TensorFlow导入创建测试资源的专用项目。

已知问题和限制

  • 在1.0.0-alpha中添加的绝大多数新操作尚未使用GPU。

  • 虽然许多在实践中广泛使用的基本操作和高级层都得到了支持,但是操作的覆盖范围仍然有限。目标是实现与TensorFlow的特征等价,并完全支持TF图的导入。

  • 一些现有的操作没有实现反向传播。 (在SameDiff中叫作 doDiff ).

DataVec: 新功能

DataVec: 修复

DataVec: API 变更 (迁移指南): 0.9.1 迁移到 1.0.0-alpha

  • 许多util类 (主要在 org.datavec.api.util 包) 已弃用或删除;在nd4j-common模块中使用等效名称的util类 (Linkarrow-up-right)

  • RecordReader.next(int) 方法现在返回 List<List<Writable>> 用于批量, 不是 List<Writable>。同样查看 NDArrayRecordBatcharrow-up-right

  • RecordWriter 和 SequenceRecordWriter APIs 已使用多个新方法更新

Arbiter: 新功能

Arbiter: 修复

Arbiter: API 变更 (迁移指南): 0.9.1 到 1.0.0-alpha

  • 根据DL4J更新器API的更改:旧的更新器配置(learningRate、momentum等)方法已被删除。使用 .updater(IUpdater).updater(ParameterSpace<IUpdater>) 方法代替

  • 为A3C增加对LSTM层的支持

  • 修复A3C,使其使用新的 ActorCriticLoss 正确使用随机性

  • 修复QLearning失败的情况(非平面输入、不完整序列化、不正确的归一化)

  • 用异步算法修HistoryProcessor的逻辑和图像预处理失败

  • 整理并更正统计数据的输出,还允许使用IterationListener

  • 修复妨碍CUDA高效执行的问题

  • 使用NeuralNet.getNeuralNetworks(), Policy.getNeuralNet()和方便的Policy构造函数提供对更多内部结构的访问

  • Add MDPs for ALE (Arcade Learning Environment) and MALMO to support Atari games and Minecraft为ALE(街机学习环境)和MALMO添加mdp以支持Atari游戏和Minecraft

  • 为Doom更新MDP以允许使用最新版本的VizDoom

  • First release of ScalNet Scala APIarrow-up-right, which closely resembles Keras' API.

  • 可以用sbt和maven构建。

  • 支持与DL4J的MultiLayerNetwork相对应的Keras启发的 Sequentialarrow-up-right模型和与ComputationGraph相对应的 Modelarrow-up-right

  • 项目结构与DL4J模型导入模块和Keras紧密结合。

  • 支持以下层: Convolution2D, Dense, EmbeddingLayer, AvgPooling2D, MaxPooling2D, GravesLSTM, LSTM, 双向层包装器, Flatten, Reshape。此外, DL4J OutputLayers 被支持。

  • Scala 2.12 支持

Deeplearning4J

  • 修复了0.9.0中版本依赖项不正确的问题

  • 添加 EmnistDataSetIterator Linkarrow-up-right

  • 使用softmax对LossMCXENT / LossNegativeLogLikelihood的数值稳定性改进(应使用非常大的激活减少NaNs)

ND4J

已知问题

  • Deeplearning4j:使用Evaluation类无参构造函数(即new Evaluation())可能导致accuracy/stats报告为0.0。其他评估类构造函数和ComputationGraph/MultiLayerNetwork.evaluate(DataSetIterator)方法按预期工作。

    • 这也会影响Spark(分布式)评估:解决方法是sparkNet.evaluate(testData);sparkNet.doEvaluation(testData, 64, new Evaluation(10))[0];, 其中10是要使用的类数,64是要使用的评估小批量大小。

  • SequenceRecordReaderDataSetIterator对每个数据集应用两次预处理器(例如归一化)(可能的解决方法:使用RecordReaderMultiDataSetIterator + MultiDataSetWrapperIterator)

  • 迁移学习:计算图可能错误地将l1/l2正则化(在FinetuneConfiguration中定义)应用于冻结层。解决方法:在FineTuneConfiguration上设置0.0 l1/l2,在新的/非冻结层上直接设置所需的l1/l2。请注意,使用迁移学习的多层网络似乎不受影响。

Deeplearning4J

  • 添加了工作区功能(更快的训练性能+更少的内存) Linkarrow-up-right

  • 为Spark网络训练添加了SharedTrainingMaster(提高了性能) Link 1, Link 2arrow-up-right

  • ParallelInference被添加-使用内部批处理和队列请求的服务器推理包装器 Linkarrow-up-right

  • 除了现有的参数平均模式之外,ParallelWrapper现在还可以与梯度共享一起工作 Linkarrow-up-right

  • VPTree 性能显著提高

  • 增加了CacheMode网络配置选项-以牺牲额外的内存使用为代价提高了CNN和LSTM的性能 Linkarrow-up-right

  • 添加LSTM层,用CUDNN支持链接arrow-up-right(注意到现有的GraveLSTM实现不支持CUDNN)

  • 带有预训练ImageNet、MNIST和VGG-Face权重的新型本地模型动物园 Linkarrow-up-right

  • 卷积性能改进,包括激活缓存

  • 现在支持自定义/用户定义的更新器 Linkarrow-up-right

  • 评估改进

    • EvaluationBinary, ROCBinary 类被添加 : 二进制多类网络的评估(sigmoid + xent 输出层 ) Linkarrow-up-right

    • Evaluation和其他工具现在有G-Measure和Matthews相关系数支持;还有对Evaluation类度量的宏+微观平均支持 Linkarrow-up-right

    • ComputationGraph 与 SparkComputationGraph 增加评估便利方法 (evaluateROC, etc)

    • ROC和ROCMultiClass支持精确计算(以前:使用阈值计算) Linkarrow-up-right

    • ROC类现在支持precision recall曲线计算下的区域;在指定的阈值处获取precision/recall/confusion矩阵(通过PrecisionRecallCurve类)Linkarrow-up-right

    • RegressionEvaluation、ROCBinary等现在支持每个输出掩码(除了每个示例/每个时间步掩码)

    • 增加评估校准(残差图、可靠性图、概率直方图) Link 1arrow-up-right Link 2arrow-up-right

    • Evaluation 和 EvaluationBinary: 现在支持自定义分类阈值或成本数组 Linkarrow-up-right

  • 优化:更新器,偏置计算

  • 增加了网络内存估计功能。可以从配置中估计内存需求,而无需实例化网络 Link 1arrow-up-right Link 2arrow-up-right

  • 新损失函数:

ND4J

  • 添加了工作区功能 Linkarrow-up-right

  • 添加了原生并行排序

  • 新操作被添加: SELU/SELUDerivative, TAD-based comparisons, percentile/median, Reverse, Tan/TanDerivative, SinH, CosH, Entropy, ShannonEntropy, LogEntropy, AbsoluteMin/AbsoluteMax/AbsoluteSum, Atan2

  • 添加了新的距离函数: CosineDistance, HammingDistance, JaccardDistance

DataVec

  • 添加 MapFileRecordReader 和 MapFileSequenceRecordReader Link 1arrow-up-right Link 2arrow-up-right

  • Spark:将JavaRDD<List<Writable>>JavaRDD<List<List<Writable>>数据保存和加载到Hadoop MapFile和SequenceFile格式的实用程序 Linkarrow-up-right

  • TransformProcess和Transforms现在支持NDArrayWritables和NDArrayWritable列

  • 多个新转换类

Arbiter

  • Arbiter UI: Linkarrow-up-right

    • UI现在使用Play 框架,与DL4J UI(取代Dropwizard后端)集成。已修复依赖关系问题/冲突版本。

    • 支持DL4J StatsStorage和StatsStorageRouter机制(FileStatsStorage、通过RemoveUIStatsStorageRouter实现的远程用户界面)

    • 常规UI改进(附加信息、格式修复)

0.8.0 -> 0.9.0 迁称说明

Deeplearning4j

  • 更新器配置方法,如 .momentum(double) 和 .epsilon(double) 已弃用。替换: 使用 .updater(new Nesterovs(0.9)).updater(Adam.builder().beta1(0.9).beta2(0.999).build()) 等来配置

DataVec

  • CsvRecordReader构造函数:现在使用字符作为分隔符,而不是字符串(即,','而不是“,”)

Arbiter

  • Arbiter UI现在是一个单独的模块,带有Scala版本后缀: arbiter-ui_2.10 and arbiter-ui_2.11

  • 添加迁移学习API Linkarrow-up-right

  • Spark 2.0支持(DL4J和DataVec;请参阅下面的迁移说明)

  • 新层

  • 新 ComputationGraph 顶点

    • L2距离顶点

    • L2归一化顶点

  • 现在大多数损失函数都支持每输出掩码(对于每输出掩码,使用与标签数组大小/形状相等的掩码数组;以前的掩码功能是针对RNN的每个示例)

  • L1和L2正则化现在可以针对偏置配置(通过l1Bias和l2Bias配置选项)

  • 评估改进:

    • DL4J现在有一个IEvaluation类(Evaluation、RegressionEvaluation等都实现了。也允许对Spark进行自定义评估) Linkarrow-up-right

    • 添加了多个类(一对所有) ROC: ROCMultiClass Linkarrow-up-right

    • 对于MultiLayerNetwork和SparkDl4jMultiLayer:添加了evaluateRegression、evaluateROC、evaluateROCMultiClass便利方法

    • 为ROC图表添加了HTML导出功能 Linkarrow-up-right

    • TSNE重新添加到新UI

    • 训练用户界面:现在可以在没有internet连接的情况下使用(不再依赖外部托管的字体)

    • UI: “无数据”条件下错误处理的改进

  • Epsilon配置现在用于Adam和RMSProp更新器

  • 修复双向LSTM+可变长度时间序列(使用掩码)

  • 添加了CnnSentenceDataSetIterator(用于“CNN句子分类”结构) Linkarrow-up-right Link2arrow-up-right

  • Spark+Kryo:现在测试序列化,如果配置错误则抛出异常(而不是记录可以忽略的错误)

  • MultiLayerNetwork 现在,如果未指定名称,则添加默认图层名

  • DataVec:

    • JSON/YAML支持数据分析、自定义转换等

    • 对ImageRecordReader进行了重构,以减少垃圾收集负载(从而使大型训练集提高性能)

    • 更快的质量分析。

  • Arbiter: 添加新的层类型以匹配DL4J

    • Word2Vec/ParagraphVectors分词与训练的性能改进。

  • 段落向量的批量推理

  • Nd4j 改进

    • 可用于ND4j的新本地操作: firstIndex, lastIndex, remainder, fmod, or, and, xor.

    • OpProfiler NAN_PANIC & INF_PANIC 现在还要检查BLAS调用的结果。

    • Nd4.getMemoryManager() 现在提供了调整GC行为的方法。

  • Spark引入了Word2Vec/ParagraphVectors参数服务器的Alpha版本。请注意:目前还不推荐用于生产。

  • CNN推理的性能改进

0.7.2 -> 0.8.0 迁移说明

  • Spark版本控制方案:随着Spark 2支持的增加,Deeplearning4j和DataVec Spark模块的版本已经改变

    • 对于 Spark 1: 用 <version>0.8.0_spark_1</version>

    • 对于 Spark 2: 用 <version>0.8.0_spark_2</version>

    • 另请注意:支持Spark 2的模块仅支持Scala 2.11。Spark 1模块同时支持Scala 2.10和2.11

0.8.0 已知问题(发布时)

  • UI/CUDA/Linux 问题: Linkarrow-up-right

  • JVM退出时的脏关闭可能是CUDA的后端引起的: Linkarrow-up-right

  • RBM实现问题 Linkarrow-up-right

  • Keras 1D卷积层和池化层还不能导入。将在即将发布的版本中得到支持。

  • 无法导入Keras v2模型配置。将在即将发布的版本中得到支持。

  • 增加变分自动编码器 Linkarrow-up-right

  • 激活函数重构

    • 激活函数现在是一个接口 Linkarrow-up-right

    • 现在通过枚举进行配置,而不是通过 String (查看例子 - Linkarrow-up-right)

    • 现在支持自定义激活函数 Linkarrow-up-right

    • 新增激活函数: hard sigmoid, randomized leaky rectified linear units (RReLU)

  • Keras模型导入的多个修复/改进

  • 为CNN添加了P-norm池化(作为子采样层配置的一部分)

  • 迭代计数持久化:在模型配置中正确存储/持久化 + Spark网络训练的学习率调度修正

  • LSTM:现在可以配置门激活函数(以前:硬编码为sigmoid)

  • UI:

    • 增加中文翻译

    • 修复UI+预训练层

    • 添加了与Java 7兼容的stats集合兼容性 Linkarrow-up-right

    • 前端处理NAN的改进

    • 添加 UIServer.stop() 方法

    • 修复分数与迭代移动平均线(带子采样)

  • 用基于Spring Boot的应用程序解决了Jaxb/Jackson问题

  • RecordReaderDataSetIterator现在支持对标签使用NDArrayWritable(设置 regression==true;用于多标签分类+图像等)

0.7.1 -> 0.7.2 迁移说明

  • 激活函数(内置):现在使用激活枚举指定,而不是字符串(不推荐使用基于字符串的配置)

  • RBM 与 AutoEncoder 键修复:

    • 确保在训练前更新和应用视觉偏置。

    • RBM HiddenUnit是该层的激活函数;因此,根据各自的HiddenUnit建立了反向传播的导数计算。

  • 已修复CUDA后端的RNG性能问题

  • 已修复macOS、powerpc和linux的OpenBLAS问题。

  • DataVec现在回到了Java 7。

  • 为ND4J/DL4J修复了多个小错误

  • UI检修:新的训练UI有更多的信息,支持持久性(保存信息并稍后加载),日/韩/俄文支持。用Play框架替换了Dropwizard。 Linkarrow-up-right

  • 使用Kerasarrow-up-right配置和训练的模型的导入

  • 为CNN添加更多“Same”填充(ConvolutionMode网络配置选项) Linkarrow-up-right

  • 权重损失函数:损失函数现在支持每个输出权重数组(行向量)

  • 为二进制分类器添加ROC和AUC Linkarrow-up-right

  • 改进了关于无效配置或数据的错误消息;改进了对两者的验证

  • 新增元数据功能:从数据导入到评估跟踪数据源(文件、行号等)。现在支持从该元数据加载示例/数据的子集。Linkarrow-up-right

  • 删除了Jackson作为核心依赖项(遮挡);用户现在可以使用Jackson的任何版本

  • 添加了LossLayer:仅应用损失函数的OutputLayer版本(与OutputLayer不同:它没有权重/偏置)

  • 构建三元组嵌入模型所需的功能 (L2 vertex, LossLayer, Stack/Unstack vertices 等)

  • 减少了DL4J和ND4J的“冷启动”初始化/启动时间

  • Pretrain 默认更改为false,backprop 默认更改为true。在设置网络配置时不再需要设置这些,除非需要更改默认值。

  • 添加了TrainingListener接口(扩展了IterationListener)。提供网络训练时对更多信息/状态的访问 Linkarrow-up-right

  • 在DL4J和ND4J上修复了许多缺陷

  • nd4j-native 和 nd4j-cuda 后端的性能改进

  • 独立Word2Vec/ParagraphVectors检修:

    • 性能改进

    • 对PV-DM和PV-DBOW都可用ParaVec推理

    • 添加了并行分词支持,以解决计算量大的分词器。

  • 为在多线程执行环境中更好的重现性引入了本地RNG。

  • 添加了其他RNG调用:Nd4j.choice(),和BernoulliDistribution 操作。

  • 引入了非gpu存储,以将大的东西保存在主机内存中,比如Word2Vec模型。可通过WordVectorSerializer.loadStaticModel()获得

  • nd4j-native后端性能优化的两个新选项:setTADThreshold(int) & setElementThreshold(int)

0.6.0 -> 0.7.0 迁移说明

升级基于0.6.0到0.7.0的代码库的显著变化:

  • UI: 新的UI包名称是deeplearning4j-ui_2.10或deeplearning4j-ui_2.11(以前是deeplearning4j UI)。Scala版本后缀是必需的,因为现在正在使用Play 框架(用Scala编写)。

  • 已弃用直方图和流迭代监听器。它们仍然可以工作,但建议使用新的UI Linkarrow-up-right

  • DataVec ImageRecordReader:标签现在默认按字母顺序排序,然后根据文件迭代顺序为每个标签分配整数类索引(以前为0.6.0和更早版本)。如果需要,使用.setLabels(List)手动指定顺序。

  • CNNs: 配置验证现在不那么严格了。使用新的ConvolutionMode选项,0.6.0等同于“Strict”模式,但新的默认值是“Truncate”

  • CNN和LSTM的Xavier权重初始化更改:Xavier现在可以更好地与原始Glorot论文和其他库对齐。Xavier权重初始化。相当于0.6.0的版本作为XAVIER_LEGACY提供

  • DataVec: 自定义的RecordReader和SequenceRecordReader类需要其他方法才能实现新的元数据功能。参考如何实现这些方法的现有记录读取器实现。

  • Word2Vec/ParagraphVectors:

    • 少量新的builder方法:

      • allowParallelTokenization(boolean)

      • useHierarchicSoftmax(boolean)

    • 行为更改:批大小:现在批大小还用作sg/cbow执行计算批数量的阈值

  • 自定义层支持

  • 支持自定义损失函数

  • 支持压缩的INDArrays,在海量数据上节省内存

  • 适用于布尔值索引的原生支持

  • 对CUDA联合操作的初步支持

  • CPU和CUDA后端的显著性能改进

  • 更好地支持使用CUDA和cuDNN以及多gpu集群的Spark环境

  • 新的UI工具:FlowIterationListener和ConfluctionIterationListener,用于更好地洞察NN中的进程

  • 用于性能跟踪的特殊IterationListener实现:PerformanceListener

  • 为ParagraphVectors添加的推理实现,以及使用现有的Word2Vec模型的选项

  • Deeplearning4J api上的文件大小减小很多

  • nd4j-cuda-8.0 后端现在可用于cuda 8 RC

  • 新增多个内置损失函数

  • 自定义预处理器支持

  • 提高Spark训练实施的性能

  • 使用InputType功能改进网络配置验证

  • FP16对CUDA的支持

  • 为多gpu提供更好的性能

  • 包括可选的P2P内存访问支持

  • 对时间序列和图像的归一化支持

  • 对标签的归一化支持

  • 移除Canova并转移到DataVec: Javadocarrow-up-right, Github Repoarrow-up-right

  • 大量的错误修复

  • Spark 改进

  • 独立和Spark最初的多GPU支持是可行的

  • 显著地重构了Spark API

  • 添加了CuDNN包装器

  • ND4J的性能改进

  • 引入 DataVecarrow-up-right: 许多新的功能,用于转换,预处理,清理数据。(这代替了Canova)

  • 用现有数据馈送神经网络的新DataSetIterators:现有ExistingDataSetIterator,Floats(Double)DataSetIterator, IteratorDataSetIterator

  • Word2Vec和ParagraphVectors的新学习算法:CBOW和PV-DM

  • 新的本地操作以获得更好的性能: DropOut, DropOutInverted, CompareAndSet, ReplaceNaNs

  • 默认情况下为多层网络和计算图启用影异步数据集预取

  • 使用JVM GC和CUDA后端更好地处理内存,从而显著降低内存占用

Last updated

Was this helpful?