发行说明
Eclipse Deeplearning4j的每个版本都有新的变化。
内容
1.0.0-beta5 发行亮点
添加了模型服务器-使用JSON或(可选)二进制序列化对SameDiff和DL4J模型进行远程推理
服务器: 查看 JsonModelServer
客户端: 查看 JsonRemoteInference
增加了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: 功能和增强
添加了FastText-推理和训练,包括OOV(词汇表外)支持(链接)
Scala 2.12 支持添加, Scala 2.10支持删除 (链接)
添加模型服务器(DL4J 与 SameDiff 模型, JSON 与二进制通信) - JsonModelServer, JsonRemoteInference, 链接,链接
添加了保存的模型格式验证实用程序 - DL4JModelValidator, DL4JKerasModelValidator (链接)
添加LabelLastTimeStepPreProcessor (链接)
BertIterator: 添加了将令牌前置到输出的选项(例如某些模型所期望的[cls])(链接)
在多层网络和计算图中添加跟踪级日志记录有助于调试某些问题(链接)
Upsampling3D: 添加 NDHWC 支持 (链接)
MergeVertex 现在支持广播 (链接)
LSTM 与 Dropout现在将依赖于内置实现,如果从cuDNN中遇到异常 (与 Subsampling/ConvolutionLayer一样 ) (链接)
Deeplearning4J: Bugs修复和优化
更新的deeplearning4j-ui界面主题(Link)
修复了MergeVertex和CNN3D激活的问题 (Link)
修复Yolo2OutputLayer builder/configuration 方法名中排版错误 (Link)
改进计算图构建器输入类型验证(Link)
移除dl4j-spark-ml模块,直到它可以被适当的维护 (Link)
修复了BertWordPieceTokenizerFactory和错误字符编码的问题 (Link)
修复了从环境变量设置SharedTrainingMaster控制器地址时出现的问题 (Link)
修复了在某些情况下SameDiffOutputLayer初始化的问题 (Link)
修复了上采样层内存报告可能产生OOM异常的问题 (Link)
改进了RecordReaderDataSetIterator的UX/验证 (Link)
修正了EmbeddingSequenceLayer不检查掩码数组数据类型的问题 (Link)
使用非rank-2(shape[1,numParams])数组初始化网络时的验证改进 (Link)
修正了BertIterator的数据类型问题 (Link)
修正了Word2Vec模型向后兼容(beta3和早期的模型现在可以再次加载)Link
修复了某些Keras导入模型可能会失败的问题
Could not read abnormally long HDF5 attribute
(Link)为RnnOutputLayer特征/标签数组长度添加了验证 (Link)
修复了SameDiffOutputLayer不支持变量minibatch大小的问题 (Link)
修复了DL4J SameDiff 层掩码支持 (Link)
DL4J UI: 修复了一个罕见的UI线程问题 (Link)
修复了JSON格式更改时的Keras导入问题 (Link)
修复了Keras导入问题,其中更新程序学习速率调度可能被错误导入(Link)
对DL4J SameDiff层的修复和优化 (Link)
如果在工作区关闭期间发生第二个异常,多层网络/计算图现在将记录原始异常,而不是将其吞入(推理/拟合操作try/finally块) (Link)
更新依赖: 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, 并遮挡以避免依赖关系冲突) (Link)
现在可以为DL4J UI配置日志框架(由于Play framework依赖项升级) (Link)
MnistDataFetcher产生的垃圾量减少(影响MNIST和EMNIST DataSetIterators) (Link)
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,然后重新保存模型(链接)。没有自定义层的模型仍然可以加载回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 已知的问题
由于添加了同步,某些层(如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: 功能和增强
添加新数据类型: BFLOAT16, UINT16, UINT32, UINT64 (Link)
添加了模型服务器(DL4J和SameDiff模型、JSON和二进制通信)- JsonModelServer, JsonRemoteInference, Link, Link
添加了对形状为零的空数组的支持,以与TensorFlow导入兼容 (Link)
CUDA:现在,除了设备(GPU)缓冲区外,主机(RAM)缓冲区只在需要时分配(以前:总是分配主机缓冲区)
改进的SameDiff训练API-添加了“在线”测试集评估、返回带有损失曲线的历史对象等 (Link)
添加了保存的模型格式验证实用程序 - Nd4jValidator, Nd4jCommonValidator (Link)
添加SameDiff.convertDataTypes 方法,用于变量dtype转换 (Link)
添加crop 与 resize 操作 (Link)
DL4J AsyncDataSetIterator 与 AsyncMultiDataSetIterator 迁移到 ND4J Link
添加 basic/MVP SameDiff UI listener (Link)
添加 SameDiff名称作用域 (Link)
SameDiff: 更新器 状态和训练配置现在写入FlatBuffers格式 (Link)
添加了可从Java调用的c++基准测试套件
Nd4j.getExecutioner().runLightBenchmarkSuit()
与Nd4j.getExecutioner().runFullBenchmarkSuit()
(Link)为评估实例的添加轴配置 (Evaluation, RegressionEvaluation, ROC, etc - getAxis 与 setAxis 方法) 来允许不同的数据格式 (NCHW vs. 用于CNNs的NHWC, 例如 ) (Link)
SameDiff: 添加了将常量转换为占位符的支持, 通过 SDVariable.convertToConstant() 方法 (Link)
SameDiff: 为 SameDiff添加了GradCheckUtil.checkActivationGradients方法来检查激活梯度(不仅仅是在现有的梯度检查方法中的参数梯度) (Link)
添加CheckNumerics 操作 (Link)
添加 FakeQuantWithMinMaxArgs 与 FakeQuantWithMinMaxVars 操作 (Link)
添加了带“keep dimensions”选项的INDArray缩减方法-例如,
INDArray.mean(boloean, int... dimension)
(Link)添加了INDArray.toString(NDArrayStrings options)、toStringFull()和toString方法重载,以便更轻松地控制数组打印(Link)
添加 HashCode 操作, INDArray.hashCode() (Link)
SameDiff: 为 loops/conditional 操作添加 whileLoop,ifCond方法 (Link)
deeplearning4j-nlp: 重命名 AggregatingSentencePreProcessor 为 sentencePreProcessor method (Link)
升级 Protobuf 版本 - 3.5.1 到 3.8.0 (Link)
为 libnd4j 本地操作切换c=style错误处理(Link)
ND4J/SameDiff: Bug 修复与优化
更新到JavaCPP/JavaCV 1.5.1-1 (Link)
SameDiff: 现在只有在需要计算请求的变量时,才必须提供占位符(Link)
SameDiff: 修正了重复变量名验证的问题 (Link)
SameDiff: 修复了标量的SDVariable.getArr问题 (Link)
向DeviceLocalNDArray添加了延迟模式(需要时才复制到设备) (Link)
ND4J: 修复了以numpy.npy格式写入0d(标量)NDArrays的问题(Link)
修复了一些固定情况下Pad操作的问题 (Link)
SameDiff: 修复了某些使用ND4J默认数据类型的操作的DataType推理问题(Link)
INDArray.castTo(DataType) 当数组已经是正确的类型时,现在是no-op (Link)
SameDiff: 修复了训练混合精度网络的问题(Link)
修复了Evaluation类错误地报告二进制情况下macro-averaged精度的问题 (Link)
从 SameDiff TrainingConfig (不再需要)移除 trainableParams config/field (Link)
修复当[1,N] 与 [N,1]时INDArray.isMatrix() 不被认为是矩阵的问题 (Link)
修复INDArray.median(int... dimension) 的问题(Link)
修复当执行收集操作backprop 可能发生无指针异常(Link)
修复 LogSumExp操作Java/C++映射的问题 (Link)
在读取Numpy.npy文件时添加了头验证,以确保文件有效 (Link)
修复了在CUDA上读取Numpy.npy文件时可能出现的问题(Link)
修复了读取Numpy.npy布尔文件时出现的问题(Link)
TensorFlow导入的各种问题修复 (Link)
修复了少数Nd4j.create方法不创建与java原始类型对应的数组的问题 (Link)
一些Nd4j.create方法的形状验证改进 (Link)
清理了未维护的Nd4j.createSparse方法 (Link)
修复了带有CC 3.0的CUDA GPU的CUDA问题 (Link)
修复了c++代码中一些可能的整数溢出(Link)
修正了一些jvm可能由于SameDiff依赖关系(现在已删除)而警告“非法反射访问”的问题(Link)
SDVariable现在不再扩展DifferentialFunction(Link)
将数个操作calculateOutputShape的实例从Java迁移到C++ (Link)
修复了maxpool2d_bp在存在NaN值时引发异常的问题(Link)
修复了空形状(带零)连接的问题 (Link)
删除 INDArray.javaTensorAlongDimension (Link)
LayerNorm 操作现在支持axis参数, NCHW 格式数据 (Link)
libnd4j:由于cuBLAS的限制,cuBLAS hgemm(FP16 gemm)仅对计算能力大于等于5.3的设备调用(Link)
Nd4j.readNumpy 优化 (Link)
在c语言的ELU和lrelu-bp操作中添加了可配置的alpha参数++ (Link)
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
- 查看此链接SBT1.3.0可能失败,Illegal character in path;SBT1.2.8可以。这是SBT问题,不是ND4J问题。有关详细信息,请参阅此链接
DataVec: 功能和增强
DataVec: Bug修复和优化
RL4J: 功能和增强
RL4J: Bug修复和优化
修复了HistoryProcessor的压缩问题 (Link)
Bug修复和优化
Arbiter: 已知问题
Jackson版本的升级需要更改通用对象序列化的执行方式;存储在1.0.0-beta4或更早格式中的Arbiter JSON数据在1.0.0-beta5中可能不可读取。(链接)
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: 功能和增强
添加点积attention 层 : AttentionVertex, LearnedSelfAttentionLayer, RecurrentAttentionLayer 与 SelfAttentionLayer
NeuralNetConfiguration.Builder(Link)上的dataType(dataType)方法为新网络设置新模型的参数/激活数据类型
EmbeddingLayer 与 EmbeddingSequenceLayer builders 现在有
.weightInit(INDArray)
和.weightInit(Word2Vec)
方法用于从预训练的词向量(链接)初始化参数PerformanceListener 现在可以配置为报告垃圾收集信息(数量/持续时间)链接
评估类现在将检查预测输出中的NaN,并抛出异常,而不是将argMax(NaNs)视为具有值0(Link)
为ParallelInference添加了ModelAdapter,以方便使用和YOLO等用例(通过避免分离(不在工作区内)数组提高性能)
增加了GELU激活函数(链接)
添加BertIterator(BERT训练的MultiDataSetIterator-有监督和无监督)链接
添加
ComputationGraph.output(List<String> layers, boolean train, INDArray[] features, INDArray[] featureMasks)
方法仅获取特定层/顶点集的激活(无多余计算)(链接)增加了胶囊网络层(在下一版本发布之前没有GPU加速)- CapsuleLayer, CapsuleStrengthLayer 与 PrimaryCapsules (Link)
Layer/NeuralNetConfiguration builder现在也有getter/setter方法,以便更好地支持Kotlin (Link)
UI的大多数JavaScript依赖项和字体已经迁移到WebJars (Link)
CheckpointListener 现在有静态的availableCheckpoints(File), loadCheckpointMLN(File, int) 与 lostLastCheckpointMLN(File) 等方法 (Link)
MultiLayerNetwork/ComputationGraph 现在,在某些不兼容的RNN配置中验证并抛出异常,如通过时间的截断反向传播与LastTimeStepLayer/Vertex 相结合(Link)
添加 BERT WordPiece 分词器 (Link)
Deeplearning4j UI现在支持多用户/多会话 - 用
UIServer.getInstance(boolean multiSession, Function<String,StatsStorage>)
在多会话模式下启动UI (Link)Layer/NeuralNetworkConfiguration builder 方法验证标准化和改进(Link)
WordVectorSerializer 现在支持读取和导出文本格式向量,通过 WordVectorSerializer.writeLookupTable 与 readLookupTable方法 (Link]
更新JavaCPP, JavaCPP presets, 与 JavaCV 到 1.5版本 (Link)
增加了EvaluationBinary报警失败率计算(Link)
ComputationGraph GraphBuilder有一个 appendLayer 方法可用于添加层连接到上次添加的层/顶点 (Link)
添加 Wasserstein损失函数 (Link)
Keras导入:改进了lambda层导入的错误/异常 (Link)
Apache Lucene/Solr从7.5.0升级到7.7.1 (Link)
KMeans聚类策略现在是可配置的 (Link)
Deeplearning4J: Bug修复和优化
DL4J Spark 训练:修复共享集群(多个同时训练作业)-现在随机生成的Aeron流ID(链接)
如果抛出内存不足异常(Link),cuDNN帮助程序将不再试图依靠内置层实现
批量归一化全局方差重新参数化,以避免在分布式训练期间出现下溢和零/负方差(Link)
修正了tensorAlongDimension可能导致边界情况的数组顺序不正确,从而导致LSTMs(Link)中出现异常的问题(Link)
修复了ComputationGraph.getParam(String)的边界情况问题,其中层名称包含下划线(Link)
Keras导入:为权重初始化添加别名(链接)
修复了在克隆网络配置时无法正确克隆dropout实例的问题(链接)
修复了具有单个输入的ElementwiseVertex的工作区问题(链接)
修复了用户界面中分离StatsStorage可能会尝试两次删除存储的问题,从而导致异常(链接)
修复了从保存的格式(链接)还原网络时DepthwiseConv2D权重可能形状错误的问题
修复了BaseDatasetIterator.next()在设置预处理器(链接)时不应用预处理器的问题
改进了CenterLossOutputLayer(链接)的默认配置
修复了UNet非预训练配置(Link)的问题
修复了Word2Vec VocabConstructor在某些情况下可能死锁的问题(链接)
SkipGram和CBOW(在Word2Vec中使用)被设置为本地操作以获得更好的性能(Link)
修复了在使用InMemoryStatsListener(链接)时保留对分离的StatsListener实例的引用可能导致内存问题的问题
优化:工作区已添加到SequenceVectors和Word2Vec(链接)
为RecordReaderDataSetIterator改进校验 (Link)
改进的WordVectors实现中的未知词处理(Link)
Yolo2OutputLayer: 添加了对错误标签形状的验证。(链接)
LastTimeStepLayer 当输入掩码全部为0时,现在将引发异常(没有数据-没有最后一个时间步)(链接)
修复了MultiLayerNetwork/ComputationGraph.setLearningRate方法在某些罕见情况下可能导致更新器状态无效的问题(Link)
修正了Conv1D 层在MultiLayerNetwork.summary()中计算输出长度的问题(Link)
异步迭代器现在用于EarlyStoppingTrained中,以提高数据加载性能(Link)
EmbeddingLayer 与 EmbeddingSequenceLayer在CUDA上的性能已经被提升 (Link)
修复L2NormalizeVertex equals/hashcode方法中的问题(链接)
修复了ConvolutionalListener中的工作区问题(Link)
修复了 EvaluationBinary falsePositiveRate 计算 (Link)
为MultiLayerNetwork.output(DataSetIterator)方法添加了验证和有用的异常(Link)
修复了在尚未调用init()的情况下ComputationGraph.summary()将引发NullPointerException的小问题 (Link)
修正了一个计算图问题,在训练过程中,输入到一个单层/顶点重复多次可能会失败 (Link)
改进KMeans实现的性能 (Link)
修复了“wrapper”层(如FrozenLayer)中RNNs的rnnGetPreviousState问题 (Link)
Keras导入:修复了导入某些Keras分词器时出现的单词顺序问题(链接)
Keras导入:修复了KerasTokenizer类中可能存在UnsupportedOperationException异常的问题(Link)
Keras导入:修复了一个导入问题,模型结合了嵌入、变形和卷积层 (Link)
Keras导入:修复了一些RNN模型的输入类型推理的导入问题 (Link)
修复在 LocallyConnected1D/2D 层中的一些填充问题 (Link)
ND4J/SameDiff: 功能和增强
删除了对处理工作区外(分离的)INDArrays内存管理的定期垃圾收集调用的依赖 (Link)
添加了INDArray.close()方法,允许用户立即手动释放堆外内存 (Link)
SameDiff: 添加了TensorFlowImportValidator工具以确定是否可以将TensorFlow图导入SameDiff。报告使用的操作以及SameDiff中是否支持这些操作 (Link)
添加了Nd4j.createFromNpzFile方法以加载Numpy npz文件 (Link)
Added basic ("technology preview") of SameDiff UI. Should be considered early WIP with breaking API changes expected in future releases. Supports plotting of SameDiff graphs as well as various metrics (line charts, histograms, etc)添加了SameDiff UI的基本(“技术预览”)。应被视为早期WIP,并在未来版本中打破预期的API更改。支持绘制SameDiff图以及各种度量(折线图、直方图等)
当前嵌入在DL4J UI中 - 调用
UIServer.getInstance()
然后访问localhost:9000/samediff
。
添加 DotProductAttention 与 MultiHeadDotProductAttention 操作 (Link)
添加 Nd4j.exec(Op) 与 Nd4j.exec(CustomOp) 方便的方法 (Link)
ND4J/SameDiff -新操作被添加:
SameDiff: 缩减操作现在支持轴参数的“动态”(非常量)输入。 (Link)
ROCBinary 现在有.getROC(int outputNum) 方法 (Link)
SameDiff: 添加 SDVariable.convertToVariable() 与 convertToConstant() - 以改变 SDVariable 类型 (Link)
为空数组上的缩减添加了检查和有用的异常(Link)
SameDiff“op creator”方法(SameDiff.tanh()、SameDiff.conv2d(…)等)已移动到子类-通过SameDiff.math()/random()/nn()/cnn()/rnn()/loss()方法或SameDiff.math/random/nn/cnn/rnn/loss字段访问creator (Link)
Libnd4j (c++) 增加基准测试框架 (Link)
添加了OpExecutioner.inspectArray(INDArray)方法以获取用于分析/调试的摘要统计信息(链接)
为Kotlin添加了SDVariable方法重载(plus, minus, times, 等) (Link)
增加了dot, reshape, permute的SDVariable便利方法 (Link)
添加SameDiff SDIndex.point(long, boolean keepDim)方法(将输出数组中的点索引保持为大小1轴) (Link)
添加了SameDiff ProtoBufToFlatBufConversion命令行工具,用于将TensorFlow冻结模型(protobuf)转换为SameDiff FlatBuffers (Link)
改进了SameDiff操作的数据类型验证 (Link)
ND4J/SameDiff: API 改变 (迁移指南): 1.0.0-beta3 到 1.0.0-beta4
ND4J数据类型-重大更改,请参阅本节顶部的突出显示
nd4j-base64 模块 (在 beta3中弃用) 已经被移除 . Nd4jBase64 类已被移到 nd4j-api (Link)
在指定执行沿维度操作(例如,缩减)的参数时,现在在操作构造函数中指定了缩减轴,而不是在OpExecutioner调用中单独指定。 (Link)
移除旧的基于Java循环的BooleanIndexing方法。应该使用等效的本地操作。 (Link)
移除 Nd4j.ENFORCE_NUMERICAL_STABILITY, Nd4j.copyOnOps, 等 (Link)
SameDiff“op creator”方法(SameDiff.tanh()、SameDiff.conv2d(…)等)已移动到子类-通过SameDiff.math()/random()/nn()/cnn()/rnn()/loss()方法或SameDiff.math/random/nn/cnn/rnn/loss字段访问creator (Link)
Nd4j.emptyLike(INDArray) 已被移除。使用 Nd4j.like(INDArray) 代替 (Link)
org.nd4jutil.StringUtils 被移除; 建议使用Apache commons lang3 StringUtils 代替 (Link)
nd4j-instrumentation 模块由于缺乏使用/维护而被移除 (Link)
ND4J/SameDiff: Bug修复与优化
修复了带有InvertMatrix.invert()和[1,1]形状矩阵的错误 (Link)
修复了长度为1的状态数组的更新器实例的边界情况缺陷 (Link)
修复了带有空文档的FileDocumentIterator的边界情况缺陷 (Link)
修复了1d矩阵上Nd4j.vstack返回1d输出而不是二维叠加输出的问题 (Link)
修复了Numpy格式导出的问题 -
Nd4j.toNpyByteArray(INDArray)
(Link)当SameDiff在外部工作区中使用时的修复 (Link)
修复了一个问题,即空NDarray可能被报告为具有标量形状信息,长度为1 (Link)
优化: libnd4j (c++) 操作的索引将在需要和可能的情况下使用uint进行更快的偏移计算。 (Link)
修复了INDArray.repeat在某些视图数组上的问题 (Link)
在视图阵列上执行某些操作的性能得到改进 (Link)
改进了non-EWS降维操作的性能 (Link)
改进转换操作的性能 (Link)
优化: 空数组只创建一次并缓存(因为它们是不可变的) (Link)
改进“reduce 3”缩减操作的性能 (Link)
改进了在多线程环境中对CUDA上下文的处理 (Link)
修复了Evaluation.reset()无法正确清除字符串类标签的问题 (Link)
SameDiff: 改进的梯度计算性能/效率;现在不再为非浮点变量定义“梯度”,也不再为不需要计算损失或参数梯度的变量定义“梯度” (Link)
IEvaluation实例的行为现在不再依赖于全局(默认)数据类型设置 (Link)
INDArray.get(point(x), y) 或 .get(y, point(x)) 现在,当对rank 2数组执行时,返回rank 1数组(Link)
为更好的性能和可靠性改写ND4J索引(INDArray.get)实现(Link)
本地响应归一化反向传播操作的修复 (Link)
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的问题。见7637号问题。解决方法:通过ND4J_MKL_FALLBACK(见前面)禁用用于conv2d_bp操作的MKL-DNN,或对Skylake cpu全局禁用MKL-DNN。
DataVec: 功能与增强
LineRecordReader (和子类型)现在可以选择定义字符集 (Link)
添加 TokenizerBagOfWordsTermSequenceIndexTransform (TFIDF 转换), GazeteerTransform (单词表示的二进制向量) 与 MultiNlpTransform 转换; 添加 BagOfWordsTransform 接口 (Link)
DataVec: 优化与缺陷修复
修复了 ImageLoader.scalingIfNeeded 的问题(Link)
Arbiter: 增强
Arbiter 现在支持遗传算法搜索 (Link)
Arbiter: 修复
修复了Arbiter中使用的提前停止将导致序列化异常的问题 (Link)
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: 新功能
使用用户指定的工作区添加了ComputationGraph/MultiLayerNetwork rnnTimeStep重载。 Link
添加 Cnn3DLossLayer Link
ParallelInference:实例现在可以实时更新模型(无需重新初始化) Link
ParallelInferenc: 添加 ParallelInference 的原地模式 Link
增加了对不兼容损失/激活函数组合的验证(如softmax+nOut=1, 或 sigmoid+mcxent)。可以使用outputValidation(false)禁用验证 Link
Spark 训练: 改进了梯度共享阈值自适应算法;使自定义阈值设置成为可能,并且使默认值对初始阈值配置更加健壮,在某些情况下提高了收敛速度。 Link
Spark 训练: 为大消息实现分块消息传递以减少内存需求(以及缓冲区长度不足问题) Link
Spark 训练: 添加 MeshBuildMode 配置用于提高了大型集群的可扩展性 Link
Spark 网络数据管道: 为“小文件”(图像等)分布式训练用例添加了FileBatch、FileBatchRecordReader等 Link
为容错/调试目的添加了FailureTestingListener Link
将Apache Lucene/Solr升级到7.5.0版(从7.4.0版) Link
MultiLayerNetwork/ComputationGraph.clearLayerStates 方法修改为 public (以前是 protected) Link
AbstactLayer.layerConf()
方法现在是 public LinkParallelWrapper模块现在不再有artifact id的Scala版本后缀; 新 artifact id 是
deeplearning4j-parallel-wrapper
Link在Yolo2OutputLayer中改进了无效输入/标签的验证和错误消息 Link
Spark 训练: 添加 SharedTrainingMaster.Builder.workerTogglePeriodicGC 和 .workerPeriodicGCFrequency 在worker上轻松配置ND4J垃圾回收配置。在worker上将默认GC设置为5秒 Link
Spark 训练: 添加了阈值编码调试模式(在训练 期间记录每个worker的当前阈值和编码统计信息)。使用
SharedTrainingConfiguration.builder.encodingDebugMode(true)
启用。注意这个操作有计算开销。 Link
Deeplearning4J: Bug 修复与优化
修复了L1/L2和更新器(Adam、Nesterov等)在用小批量划分梯度以获得平均梯度之前被应用的问题。保持旧的行为,使用
NeuralNetConfiguration.Builder.legacyBatchScaledL2(true)
Link.请注意,对于某些更新器(如Adam)来说,学习率可能需要降低,以解释与早期版本相比的这一变化。其他一些更新器(如SGD、NoOp等)应该不受影响。
请注意,保存在1.0.0-beta2或更早版本中的反序列化(加载)配置/网络将默认为旧行为,以实现向后兼容性。所有新网络(在1.0.0-beta3中创建)将默认为新行为。
修复了EarlyStoppingScoreCalculator不能正确处理“最大分数”的情况而不是最小化的问题。 Link
修复VGG16ImagePreProcessor通道偏移值的顺序(BGR与RGB) Link
基于权值噪声的变分自编码缺陷修复 Link
修复BaseDataSetIterator 不遵循 'maximum examples' 配置的问题 Link
优化: 工作区现在用于计算图/多层网络评估方法(避免在计算期间分配必须由垃圾收集器清理的堆外内存) Link
修复了一个问题,即混洗与MnistDataSetIterator的子集组合在一起时,在重置之间不会保持相同的子集 Link
修复StackVertex.getOutputType的问题 Link
修复CNN到/从RNN预处理器处理掩码数组的问题 Link
修复了模型动物园中VGG16非预训练配置的问题 Link
修复 了TransferLearning nOutReplace中一行中多个层被修改的问题 Link
修复了CuDNN工作区在标准fit调用之外执行反向传播的问题 Link
修复了在计算图中的输出层上过早清除丢弃掩码的问题 Link
RecordReaderMultiDataSetIterator 现在支持5D数组 (用于 3D CNNs) Link
修复了TBPTT结合掩码和不同数量输入输出数组的多输入输出计算图中的缺陷 Link
改进了批归一化层的输入验证/异常 Link
修复了TransferLearning GraphBuilder nOutReplace与子采样层结合时的错误 Link
SimpleRnnParamInitializer 现在正确地遵循偏差初始化配置 Link
修复SqueezeNet动物园模型非预处理配置 Link
修复Xception动物园模型非预训练配置 Link
修正了多输出计算图的一些评估签名问题 Link
改进的大型网络多层网络/计算图汇总格式Link
修正了一个问题,如果一个层中的所有参数的梯度都恰好为0.0,那么梯度归一化可能导致NaNs Link
修复了MultiLayerNetwork/ComputationGraph.setLearningRate可能引发SGD和NoOp更新器异常的问题 Link
修复了StackVertex加掩码在某些罕见情况下的问题 Link
修复了1.0.0-alpha之前格式的冻结层的JSON反序列化问题 Link
修复了GraphBuilder.removeVertex在某些有限情况下可能失败的问题 Link
修复 CacheableExtractableDataSetFetcher中的缺陷 Link
DL4J Spark 训练:修复了多GPU训练+评估的线程/设备关联性问题 Link
DL4J Spark 训练: 使所有Aeron线程后台程序线程在所有其他线程完成时阻止Aeron停止JVM关闭 Link
为批归一化层添加了cudnnAllowFallback配置(如果CuDNN意外失败,则回滚到内置实现) Link
修复了BatchNormalization层的问题,该问题阻止在每个worker上正确同步平均值/方差估计值以进行GradientSharing训练,从而导致收敛问题Link
在ArchiveUtils中添加了检测ZipSlip CVE尝试的检查 Link
DL4J Spark 训练与评估:方法现在使用Spark上下文中的Hadoop配置来确保运行时集配置在Spark函数中可用,这些函数直接从远程存储(HDFS等)读取 Link
为Nd4j.readTxt添加了数据验证-现在对无效输入抛出异常,而不是返回不正确的值 Link
修复了KNN实现中使用无效距离函数(返回小于0的“距离”)时可能出现死锁的问题 Link
在加载Keras导入模型时添加了同步,以避免用于加载的底层HDFS库中出现线程安全问题 Link
修复了具有大预取值的Async(Multi)DataSetIterator的罕见问题 Link
Deeplearning4J: API 修改 (迁移指南): 1.0.0-beta2 到 1.0.0-beta3
DL4J中的IEvaluation类已被弃用并移到ND4J,以便它们可用于SameDiff训练。功能和api不变
MultiLayerConfiguration/ComputationGraphConfiguration
pretrain(boolean)
与backprop(boolean)
已被弃用并不再使用。使用 fit 和 pretrain/pretrainLayer 方法来替代 。 LinkParallelWrapper 模块现在不再有artifact id的Scala版本后缀; 新 artifact id 为
deeplearning4j-parallel-wrapper
应用用来替代 Linkdeeplearning4j-nlp-korean 模块现在有Scala版本后缀,由于scala依赖项; 新artifact ID 是
deeplearning4j-nlp-korean_2.10
与deeplearning4j-nlp-korean_2.11
Link
Deeplearning4J: 已知问题: 1.0.0-beta3
在一个物理节点上同时运行多个Spark训练作业(即,来自一个或多个Spark作业的多个jvm)可能会导致网络通信问题。解决方法是在VoidConfiguration中手动设置唯一的流ID。对不同的作业使用唯一(或随机)整数值。 Link
修复了由于Keras 2.2.3+的Keras JSON格式更改而导致的导入问题 Link
为时间序列预处理添加了Keras导入 Link
Elephas Link
修复了在嵌入层之后使用导入模型变形的问题 Link
增加了对keras掩码层的支持 Link
修复了某些层/预处理器(如Permute)的JSON反序列化问题 Link
修正了Keras导入Nadam配置的问题 Link
ND4J: 新功能
添加了SameDiff训练和评估:SameDiff实例现在可以直接使用DataSetIterator和MultiDataSetIterator进行训练,并使用IEvaluation实例(已从ND4J移动到DL4J)进行评估 Link
添加了GraphServer实现:带有Java API的SameDiff(和Tensorflow,通过TF导入)的c++推理服务器 Link
为某些操作(Conv2d等)添加了MKL-DNN支持 Link
将ND4J(和DataVec)升级到Arrow 0.11.0 Link,它还修复了 Link
Added Nd4j.where 操作方法 (和 numpy.where同样的语义) Link
Added Nd4j.stack 操作方法 (combine arrays 结合数组 +把数组的rank加到1 ) Link
SameDiff损失函数:清除加正向传播实现 Link
CudaGridExecutioner 现在警告异常堆栈跟踪可能会延迟,以避免在异步执行操作期间调试异常时出现混淆 Link
JavaCPP 与 JavaCPP-presets 已更新到1.4.3版本 Link
改进SDVariable 类的 Javadoc Link
ND4J: Bug修复与优化
android端修复: 删除RawIndexer的使用 Link
Libnd4j 本地操作修复:
SameDiff: 改进的多输出情况下的错误处理 Link
修复了INDArray.permute无法正确抛出无效长度情况异常的问题 Link
DataSet.merge小修改 -现在签名可以接受任何DataSet的子类型 Link
INDArray.transposei 操作不是原地操作 Link
修复 INDArray.mmul 与 MMulTranspose的问题 Link
为ND4J创建方法添加了额外的顺序 验证(create, rand, 等) Link
修复从堆字节缓冲区反序列化时ND4J二进制反序列化(BinarySerde) 的问题 Link
Fixed issue with Nd4j-common ClassPathResource path resolution in some IDEs修复了某些ide中Nd4j-common ClassPathResource路径解析的问题 Link
修复了rank 1数组上的INDArray.get(interval)将返回rank 2数组的问题 Link
INDArray.assign(INDArray) 不再允许指定不同的形状数组(标量/矢量情况除外) Link
NDarrayStrings (and INDArray.toString()) 现在格式化数字时总是使用US语言环境Link
修正了V100 GPU特有的GaussianDistribution问题 Link
修复了V100 GPU特有的位图压缩/编码问题 Link
Transforms.softmax 现在在不支持的形状上抛出错误,而不是简单地不应用操作 Link
VersionCheck 功能: 处理在早期版本的Android上没有SimpleFileVisitor的情况 Link
SameDiff 卷积层配置 (Conv2dConfig/Conv3dConfig/Pooling3dConfig 等)已将参数名对齐 Link
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中的等效类 Link
nd4j jackson模块中的某些类已被弃用;从现在起使用nd4j-api中的等效类 Link
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方法重载 Link
DataVec: Bug 修复与优化
修复JDBCRecordReader对空值的处理 Link
改进了针对无效输入的ObjectDetectionRecordReader的错误/验证(如果图像对象中心位于图像边界之外) Link
修复了使用在早期版本的Android上不可用的方法进行FileSplit的问题Link
修复了JDBCRecordReader处理实数值列结果类型的问题 Link
添加了CSVRecordReader/LineRecordReader在未初始化的情况下使用的验证和有用异常 Link
Arbiter: 修复
修正了一些与dropout层有关的问题 Link
添加了org.nd4j.linalg.primitives.Pair/Triple和Scala元组之间的转换 Link
1.0.0-beta2 发行亮点
ND4J/Deeplearning4j: 增加了对CUDA9.2的支持。放弃对CUDA 9.1的支持。(1.0.0-beta2版本支持CUDA 8.0、9.0和9.2)
Deeplearning4j 资源(数据集、预训练模型)存储目录现在可以通过
DL4JResources.setBaseDirectory
方法或org.deeplearning4j.resources.directory
系统属性ND4J: 现在所有索引都是用long而不是int来完成的,以使数组的维数和长度大于整数(大约 21亿)。
ND4J: 现在将使用Intel MKL-DNN作为默认/捆绑的BLAS实现(替换以前默认的 OpenBLAS)
Deeplearning4j: 添加了内存溢出(OOM)崩溃转储报告功能。在训练 /推理OOM时提供内存使用和配置转储(以帮助调试和调整内存配置)。
Deeplearning4J: 新功能
资源(数据集、预训练模型)存储目录现在可以通过
DL4JResources.setBaseDirectory
方法或org.deeplearning4j.resources.directory
系统属性。请注意,还可以为下载设置不同的基本位置(用于DL4J资源的本地镜像) Link添加了内存溢出(OOM)崩溃转储报告功能。如果训练/推理OOM,则提供内存使用和配置的转储。对于MultiLayerNetwork/ComputationGraph.memoryInfo方法,也提供了相同的信息(没有崩溃)。可以使用系统属性禁用(或输出目录设置) - Link
添加了复合的[Multi]DataSetPreProcessor,以便在单个迭代器中应用多个[Multi]DataSetPreProcessor Link
多输出网络的附加计算图评估方法:
evaluate(DataSetIterator, Map<Integer,IEvaluation[]>)
与evaluate(MultiDataSetIterator, Map<Integer,IEvaluation[]>)
Link添加了JointMultiDataSetIterator-用于从多个DataSetIterator创建多个MultiDataSetIterator的实用迭代器 Link
GraphVertices现在可以直接使用可训练参数(不只是用可训练参数封闭层) Link
添加 MultiLayerNetwork/ComputationGraph getLearningRate 方法 Link
增加了周期性的“1周期”学习率调度等 - Link
Spark训练的RDD重新分区更具可配置性(adds Repartitioner 接口) Link
添加 ComputationGraph.getIterationCount() 与 .getEpochCount() 为了与 MultiLayerNetwork保持一致 Link
Spark 评估: 添加了允许指定评估worker数量(小于Spark线程数)的评估方法重载 Link
CnnSentenceDataSetIterator 现在有一个Format参数,支持RNNs和1D CNNs的输出数据 Link
添加
ComputationGraph/MultiLayerNetwork.pretrain((Multi)DataSetIterator, int epochs)
方法重载 LinkEmbeddingSequenceLayer现在除了支持
[minibatch,seqLength]
格式数据外还支持[minibatch,1,seqLength]
格式序列数据 LinkCuDNN 批归一化实现现在将用于rank 2输入,而不仅仅是rank 4输入 Link
MultiLayerNetwork 与 ComputationGraph output/feedForward/fit 方法现在是线程安全的,通过同步来实现。注意,由于性能的原因,不建议并发使用(相反:使用并行推理);但是现在同步的方法应该避免由于并发修改而导致的模糊错误 Link
BarnesHutTSNE 现在在距离度量未定义的情况下抛出一个有用的异常(例如,所有零加上余弦相似性) Link
Deeplearning4J: Bug 修复与优化
BatchNormalization 层现在正确地断言,如果需要,将设置nOut(而不是以后出现不友好的形状错误) Link
修正了OutputLayer不能正确初始化参数约束的问题 Link
修正了Nesterov更新器在执行CUDA时只使用CPU操作的性能问题 Link
删除了DL4J优化器的TerminationCondition-在实践中未使用,并且有小的开销 Link
修复了启用工作区时EvaluativeListener可能遇到工作区验证异常的问题 Link
修复了计算图未正确调用TrainingListener.onEpochStart/onEpochEnd的问题 Link
修复了TensorFlowCnnToFeedForwardPreProcessor工作区问题 Link
CuDNN批量归一化的性能优化 Link
性能优化:在安全的情况下,Dropout将会被原地应用,避免复制。 Link
增加了Dropout的CuDNN实现 Link
减少CuDNN的内存使用:CuDNN工作内存现在在网络中的层之间共享和重用 Link
CuDNN批处理归一化实现将失败,数据类型为FP16 Link
修复双向LSTM可能错误地使用导致异常的工作区问题 Link
修复早停,分数最大化(准确率,F1等)没有正确触发终止条件的问题 Link
修复了在ComputationGraph.computeGradientAndScore()中标签掩码计数器可能错误递增的问题 Link
ComputationGraph 在训练期间没有设置lastEtlTime 字段 Link
修复了启用工作区时自动编码器层的问题Link
修复了EmbeddingSequenceLayer使用掩码数组的问题 Link
Lombok现在在任何地方都提供了作用域,在使用DL4J时不在用户类路径上 Link
修复了WordVectorSerializer.readParagraphVectors(File)初始化标签源的问题Link
Spark 训练(梯度共享)现在可以正确地处理训练期间遇到的空分区边界情况 Link
对于Spark梯度共享训练,错误传播得更好/更一致 Link
修复了1D CNN层的问题,该层具有遮罩阵列且stride>1(遮罩未正确缩小) Link
DL4J批归一化实现仅在训练期间(CuDNN未受影响),在推理期间未正确添加epsilon值 Link
当最大非填充值小于0时,具有最大池和ConvolutionMode.SAME的CUDNN子采样层可能把填充值(0)作为边界值的最大值。 Link
Spark梯度共享训练现在可以将监听器正确地传递给worker Link
修复了用户界面和FileStatsStorage的罕见(非终端)并发修改问题 Link
CuDNN 卷积层现在支持dilation>2(以前:使用DL4J conv层实现作为回调) Link
Yolo2OutputLayer 现在实现 computeScoreForExamples() Link
SequenceRecordReeaderDataSetIterator 现在正确处理“没有标签”的情况Link
修复了BarnesHutTSNE可能遇到工作区验证异常的问题 Link
在某些情况下,EMNIST迭代器在重置后可能会产生不正确的数据Link
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) Link
CNN2d层的掩码数组必须是可广播的4d格式:
[minibatch,depth or 1, height or 1, width or 1]
- 以前是二维的形状[minibatch,height]
或[minibatch,width]
。 这可以防止以后的情况(池化层)中的模糊性,并允许更复杂的掩码场景(例如在同一个小批量中为不同的图像大小进行掩码 )。 Link一些旧的/不推荐使用的模型和层方法已被删除。(validateInput(), initParams())。因此,可能需要更新某些自定义层 Link
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
Link
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格式Link
ND4j-common ClassPathResource: 添加 ClassPathResource.copyDirectory(File) Link
SameDiff: 现有大量新操作和已存在操作的反向传播实现
添加 Nd4j.randomBernoulli/Binomial/Exponential 便捷方法 Link
添加了禁用/禁止ND4J初始化日志记录的方法 通过
org.nd4j.log.initialization
系统属性 LinkSameDiff 类 - 大多数op/constructor方法现在都有完整/有用的javadoc Link
现在可以全局禁用工作区,忽略工作区配置。这主要用于调试;使用
Nd4j.getWorkspaceManager().setDebugMode(DebugMode.DISABLED)
或Nd4j.getWorkspaceManager().setDebugMode(DebugMode.SPILL_EVERYTHING);
来启用它。 Link [Link]为环境变量处理添加了EnvironmentalAction API Link
ND4J: Bug 修复与优化
SameDiff: 执行和单个操作的大量错误修复
修复了使用真标量的INDArray.toDoubleArray()的问题(rank 0数组)Link
修复了DataSet.sample()不适用于rank 3+功能的问题 Link
IActivation 现在实现对激活和梯度验证/强制执行相同的形状Link
修正了向量为1d的muliColumnVector问题 Link
ImagePreProcessingScaler现在支持通过NormalizerSerializerStrategy和ModelSerializer进行序列化 Link
DL4J Spark梯度共享分布式训练实现中阈值编码的性能优化 Link
SameDiff: DL4J Spark梯度共享分布式训练实现中阈值编码的性能优化 Link
DataSet.save() 与 MultiDataSet.save() 方法现在出现时保存示例元数据 Link
修正了当数据集不等分为没有余数的包时KFoldIterator的问题 Link
修复了当资源位于带有空格的路径上时版本检查功能无法加载资源的问题 Link
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实现中都是不受支持的,并且在实践中没有用于训练。自定义迭代器也应该删除这些方法 Link
已删除长期不推荐使用的getFeatureMatrix()。改用DataSet.getFeatures()。 Link
已删除未使用且未正确测试/维护的实用程序类BigDecimalMath。如果需要,用户应该为这个功能找到一个候选库。
未正确维护的复数支持类(IComplexNumber,IComplexNDArray)已完全删除 Link
DataVec:新功能
添加了AnalyzeLocal类以镜像AnalyzeSpark的功能(但没有Spark依赖项) Link
添加了JacksonLineSequenceRecordReader:RecordReader用于多示例JSON/XML,其中文件中的每一行都是一个独立的示例Link
添加
RecordConvert.toRecord(Schema, List<Object>)
Link添加缺失的 FloatColumnCondition Link
为“CSV中的每一行是一个序列,序列是单值/单变量”添加了CSVLineSequenceRecordReader Link
为“单个CSV中的多个多值序列”数据添加了CSVMultiSequenceRecordReader Link
DataVec: 优化与Bug修复
修复了Android上NativeImageLoader的问题 Link
已修复ExcelRecordReader的问题 Link
修复了
CSVRecordReader.next(int)
参数错误的问题,可能导致生成不必要的大列表 Link
DataVec: API 变更 (迁移指南): 1.0.0-beta 到 1.0.0-beta2
Arbiter: 新功能
添加了DataSource接口。与旧的DataProvider不同,这不需要JSON序列化(只需要一个无参数构造函数) Link
Arbiter: 修复
DataProvider已被弃用。改用DataSource。
1.0.0-beta 发行亮点
DL4J的性能和内存优化
Deeplearning4J: 新功能
添加 ComputationGraph.output(DataSetIterator) 方法 Link
添加 SparkComputationGraph.feedForwardWithKey 具有特征掩码支持的重载 Link
添加了从配置获取每个层的输入/激活类型的支持:
ComputationGraphConfiguration.getLayerActivationTypes(InputType...)
,ComputationGraphConfiguration.GraphBuilder.getLayerActivationTypes()
,NeuralNetConfiguration.ListBuilder.getLayerActivationTypes()
,MultiLayerConfiguration.getLayerActivationTypes(InputType)
methods LinkEvaluation.stats() 现在以更易于读取的矩阵格式而不是列表格式打印混淆矩阵 Link
添加ModelSerializer.addObjectToFile, .getObjectFromFile and .listObjectsInFile 用于将任意Java对象存储在与保存的网络相同的文件中 Link
添加了SpatialDropout支持(具有Keras导入支持) Link
添加
MultiLayerNetwork/ComputationGraph.fit((Multi)DataSetIterator, int numEpochs)
重载 Link增加了性能(硬件)监听器:
SystemInfoPrintListener
与SystemInfoFilePrintListener
Link
Deeplearning4J: Bug修复与优化
通过优化工作区的内部使用来优化性能和内存 Link
RecordReaderMultiDataSetIterator 将不再尝试将未使用的列转换为数值 Link
新增动物园模型:
(将要做 )
修正了RecordReaderMulitDataSetIterator,其中某些构造函数的输出可能不正确 Link
修复了计算图拓扑排序在所有平台上可能不一致的问题;有时可能中断在PC上训练并部署在Android上的计算图(具有多个有效拓扑排序) Link
修复了CuDNN批归一化的问题,使用
1-decay
替代decay
Linkdeeplearning4j-cuda 如果在将nd4j-native后端设置为更高优先级的类路径上出现异常,则不再引发异常 Link
为CifarDataSetIterator添加了RNG控件 Link
WordVectorSerializer完成后立即删除临时文件 Link
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
LinkExistingDataSetIterator 已弃用;使用
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: 新功能
ImageRecordReader 现在记录推理的标签类的数量(以减少用户在错误配置时丢失问题的风险) Link
为多个列添加了AnalyzeSpark.getUnique重载Link
增加了性能/计时模块 Link
DataVec: 优化与Bug 修复
通过缓冲区重用减少ImageRecordReader垃圾生成 Link
删除了DataVec中使用的反射库 Link
TransformProcessRecordReader批处理支持修复 Link
带过滤器操作的TransformProcessRecordReader修复 Link
修复了ImageRecordReader/ParentPathLabelGenerator错误过滤包含
.
character(s) 的目录LinkShowImageTransform现在延迟初始化帧以避免出现空白窗口 Link
DataVec: API 变更 (迁移指南): 1.0.0-alpha 到 1.0.0-beta
DataVec ClassPathResource 已被弃用; 使用 nd4j-common 版本替代 Link
Arbiter: 新功能
为OCNN(一分类神经网络)添加LayerSpace
Arbiter: 修复
修复了可能导致在UI中不正确呈现第一个模型结果的时间戳问题 Link
在遇到终止条件时返回之前,执行现在等待最后一个模型完成Link
根据DL4J等:反射库的使用已完全从Arbiter中删除 Link
由于Android编译的问题,不再使用Eclipse集合库 Link
对已完成模型的改进清理以减少对训练的最大内存需求Link
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 (新的和增强的)
添加 Yolo2OutputLayer CNN 层用于目标检测 (Link). 同样查看 DataVec的 ObjectDetectionRecordReader
添加通过
hasBias(boolean)
实现对“无偏置”层的支持config (DenseLayer, EmbeddingLayer, OutputLayer, RnnOutputLayer, CenterLossOutputLayer, ConvolutionLayer, Convolution1DLayer). EmbeddingLayer 现在默认为无偏置 (Link)
增加了对空洞卷积(也称为“膨胀”卷积)的支持- ConvolutionLayer, SubsamplingLayer, 和 1D 版本 。 (Link)
ElementWiseVertex 现在(另外) 支持
Average
和Max
模式,除Add/Subtract/Product 外(Link)添加 SeparableConvolution2D 层 (Link)
添加 Deconvolution2D 层 (也叫转置卷积,分步卷积层) (Link)
添加ReverseTimeSeriesVertex (Link)
添加 RnnLossLayer - 无参数版本的RnnOutputLayer,或相当于RNN的LossLayer (Link)
添加了CnnLossLayer-没有参数CNN输出层,用于分割、去噪等用例。 (Link)
Added Bidirectional layer wrapper (converts any uni-directional RNN to a bidirectional RNN) 添加了双向层包装器(将任何单向RNN转换为双向RNN)(Link)
添加SimpleRnn层(也叫 "香草" RNN 层) (Link)
添加了LastTimeStep包装层(包装一个RNN层以获取上一个时间步,如果存在则考虑掩码)(Link)
添加了MaskLayer实用程序层,当存在一个掩码数组时,该实用程序层仅在正向传递时将激活归零 (Link)
添加了alpha版本(还不稳定)SameDiff层对DL4J的支持(注意:向前传递,目前仅限于CPU)(Link)
添加Cropping2D 层 (Link)
添加了参数约束API(LayerConstraint接口), 和 MaxNormConstraint, MinMaxNormConstraint, NonNegativeConstraint, UnitNormConstraint 实现 (Link)
学习率调度的显著重构 (Link)
添加了ISchedule接口;添加了Exponential、Inverse、Map、Poly、Sigmoid和Step调度实现(Link)
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类型的支持 (Link)通过ISchedule接口增加了对辍学调度的支持 (Link)
增加了权重/参数噪声API(IWeightNoise接口);增加了DropConnect和WeightNoise(加法/乘法高斯噪声)实现(Link);DropConnect和dropout现在可以同时使用
添加层配置别名
.units(int)
相当于.nOut(int)
(Link)添加 ComputationGraphConfiguration GraphBuilder
.layer(String, Layer, String...)
的别名.addLayer(String, Layer, String...)
不再需要层索引 MultiLayerConfiguration ListBuilder (i.e.,
.list().layer(<layer>)
现在可以用于配置) (Link)添加
MultiLayerNetwork.summary(InputType)
和ComputationGraph.summary(InputType...)
方法(显示层和激活大小信息) (Link)MultiLayerNetwork, ComputationGraph 分层可训练层现在可以跟踪轮数量 (Link)
添加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)
) (Link)WeightInit.NORMAL (用于自归一化神经网络) (Link)
Ones, Identity 权重初始化 (Link)
添加新分布(LogNormalDistribution, TruncatedNormalDistribution, OrthogonalDistribution, ConstantDistribution) 可用于权重初始化 (Link)
RNNs: 增加了将循环网络权重的权重初始化分别指定为“输入”权重的功能(Link)
添加的层别名: Convolution2D (ConvolutionLayer), Pooling1D (Subsampling1DLayer), Pooling2D (SubsamplingLayer) (Link)
增加了Spark IteratorUtils-包装了一个用于Spark网络训练的RecordReaderMultiDataSetIterator (Link)
CuDNN支持层(卷积层等)现在警告用户如果使用没有CuDNN的CUDA (Link)
二进制交叉熵(LossBinaryXENT)现在实现了裁剪(默认情况下为1e-5到(1-1e-5))以避免数值下溢/NaNs (Link)
SequenceRecordReaderDataSetIterator 现在支持多标签回归(Link)
TransferLearning FineTuneConfiguration 现在有了设置训练/推理工作区模式的方法 (Link)
IterationListener iterationDone 方法现在同时报告当前迭代和epoch计数;删除了不必要的调用/被调用方法 (Link)
添加 MultiLayerNetwork.layerSize(int), ComputationGraph.layerSize(int)/layerSize(String) 轻松确定层的大小 (Link)
添加 MultiLayerNetwork.toComputationGraph() 方法 (Link)
添加 NetworkUtils 易于更改已初始化网络的学习速率的方便方法 (Link)
添加 MultiLayerNetwork.save(File)/.load(File) 和 ComputationGraph.save(File)/.load(File) 方便方法 (Link)
添加 CheckpointListener 在训练期间定期保存模型副本(每N个iter/epoch,每T个时间单位) (Link)
添加带掩码数组的ComputationGraph输出方法重载 (Link)
一种新的LossMultiLabel损失函数 (Link)
增加了用于早停的额外评分功能(ROC指标、全套评估/回归指标等) (Link)
为多层网络和计算图添加额外的ROC和ROCMultiClass评估重载 (Link)
阐明Evaluation.stats()输出以引用“预测”而不是“示例”(前者更适合于RNN) (Link)
EarlyStoppingConfiguration 现在支持
Supplier<ScoreCalculator>
用于非序列化分数计算器 (Link)改进的通过错误方法加载模型时的ModelSerializer异常 (例如 尝试通过restoreMultiLayerNetwork加载计算图) (Link)
添加了SparkDataValidation实用程序方法来验证HDFS或本地上保存的DataSet和MultiDataSet (Link)
ModelSerializer: 添加 restoreMultiLayerNetworkAndNormalizer and restoreComputationGraphAndNormalizer 方法(Link)
ParallelInference 现在有了支持输入掩码数组的输出重载 (Link)
Deeplearning4J: Bug 修复与优化
Lombok不再作为传递依赖项包含 (Link)
具有大量历史记录的J7FileStatsStorage的性能改进 (Link)
修复变分自动编码器层的用户界面层大小 (Link)
UI Play servers 切换到生产(PROD)模式(Link)
与以上相关:用户现在可以设置
play.crypto.secret
系统属性手动设置播放应用程序密钥;默认情况下是随机生成的 (Link).SequenceRecordReaderDataSetIterator 会应用预处理器两次 (Link)
Evaluation 在Spark上使用时,无参构造函数可能导致NaN评估度量
CollectScoresIterationListener可能以无休止地重复 (Link)
Async(Multi)DataSetIterator 调用 reset() 在某些情况下,底层迭代器可能会导致问题(Link)