我正在尝试使用deeplearning4j训练RNN进行数字(音频)信号处理.我们的想法是拥有2个.wav文件:一个是录音,第二个是相同的录音但是经过处理(例如使用低通滤波器).RNN的输入是第一个(未处理的)音频记录,输出是第二个(已处理的)音频记录.
我已经使用了dl4j示例中的GravesLSTMCharModellingExample,并且大部分都使用了CharacterIterator类来接受音频数据而不是文本.
我使用dl4j处理音频的第一个项目基本上与GravesLSTMCharModellingExample做同样的事情,但生成音频而不是文本,使用11025Hz 8位单声道音频,这是有效的(对于一些非常有趣的结果).因此,在这种情况下使用音频的基础知识似乎有效.
因此,第2步是将其用于音频处理而不是音频生成.
不幸的是,我没有取得多大成功.它似乎能够做的最好的是输出一个非常嘈杂的输入版本.
作为"健全性检查",我已经测试了输入和输出使用相同的音频文件,我希望它能够快速收敛到模型,只需复制输入.但事实并非如此.再次,经过长时间的训练,它似乎能够做的就是产生一个噪音更大的输入版本.
我猜的最相关的代码是DataSetIterator.next()方法(改编自示例的CharacterIterator类),现在看起来像这样:
public DataSet next(int num) {
if (exampleStartOffsets.size() == 0)
throw new NoSuchElementException();
int currMinibatchSize = Math.min(num, exampleStartOffsets.size());
// Allocate space:
// Note the order here:
// dimension 0 = number of examples in minibatch
// dimension 1 = size of each vector (i.e., number of characters)
// dimension 2 = length of each time series/example
// Why 'f' order here? See http://deeplearning4j.org/usingrnns.html#data
// section "Alternative: Implementing a custom …
Run Code Online (Sandbox Code Playgroud) 使用Gensim提供的Word2vec和Doc2vec方法,他们有一个使用BLAS,ATLAS等加速的分布式版本(详情请参见此处).但是,它支持GPU模式吗?如果使用Gensim,是否可以让GPU工作?
我不知道它对我有什么要求.我在用
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-core</artifactId>
<version>${deeplearning4j.version}</version>
</dependency>
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-nlp</artifactId>
<version>${deeplearning4j.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
哪里
<deeplearning4j.version>0.4-rc3.8</deeplearning4j.version>
Run Code Online (Sandbox Code Playgroud)
但我得到了
Caused by: org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException: null
at org.nd4j.linalg.factory.Nd4jBackend.load(Nd4jBackend.java:148) ~[nd4j-api-0.4-rc3.7.jar:na]
at org.nd4j.linalg.factory.Nd4j.initContext(Nd4j.java:4498) ~[nd4j-api-0.4-rc3.7.jar:na]
... 53 common frames omitted
Run Code Online (Sandbox Code Playgroud)
如果我尝试加载Google字矢量模型:
@RequestMapping("/loadModel")
public Boolean loadModel(@RequestParam(value="model") String model) {
Resource resource = appContext.getResource("WEB-INF/word-vector-models/" + model);
try {
File modelFile = resource.getFile();
System.err.println(modelFile.getAbsolutePath());
WordVectors googleModel = WordVectorSerializer.loadGoogleModel(modelFile, true);
this.wordVectorsMap.put(model, googleModel);
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud) 我想在java中实现递归神经张量网络(RNTN).
我已经将Deeplearning4j用于word2vec管道来矢量化单词语料库.
对于NLP管道,我使用过Opennlp.(用于标记化,POStaging和解析)
现在,我发现我需要一个RNTN用于我的目的,我没有找到太多的支持,任何参考都会有所帮助.许多库都是用R或python编写的,甚至是用Scala编写的,而大多数人使用的NLP管道都是stanfordnlp.但是我想用Opennlp和java来做这件事.
之后,我想将单词向量与神经网络结合起来,然后完成我想做的事情,比如情绪分析.
我该怎么办?任何输入都会有所帮助.
谢谢.
我正在尝试编写我的第一个神经网络来玩游戏连接四。我使用 Java 和 deeplearning4j。我试图实现一个遗传算法,但是当我训练网络一段时间时,网络的输出跳到 NaN,我无法说出我在哪里搞砸了如此严重的事情。我将发布所有 3 个类下面,其中 Game 是游戏逻辑和规则,VGFrame 是 UI,Main 是所有 nn 的东西。
我有一个由 35 个神经网络组成的池,每次迭代我都会让最好的 5 个存活并繁殖,并稍微随机化新创建的神经网络。为了评估网络,我让他们互相争斗,然后给胜者加分,之后输给分数。由于我将一块石头放入已经满的列中,我希望神经网络至少能够在一段时间后按照规则玩游戏,但他们不能这样做。我用谷歌搜索了 NaN 问题,它似乎是一个梯度梯度问题,但据我所知,这不应该发生在遗传算法中?我可以在哪里查找错误或我的实现通常有什么问题的任何想法?
主要的
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Random;
import org.deeplearning4j.nn.api.OptimizationAlgorithm;
import org.deeplearning4j.nn.conf.MultiLayerConfiguration;
import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
import org.deeplearning4j.nn.conf.layers.DenseLayer;
import org.deeplearning4j.nn.conf.layers.OutputLayer;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.deeplearning4j.nn.weights.WeightInit;
import org.nd4j.linalg.activations.Activation;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.lossfunctions.LossFunctions.LossFunction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.learning.config.Nesterovs;
public class Main {
final int numRows = 7;
final int numColums = 6;
final int randSeed = 123;
MultiLayerNetwork[] models;
static …
Run Code Online (Sandbox Code Playgroud) 我尝试在DL4J上执行以下示例(加载预先训练的矢量文件):
File gModel = new File("./GoogleNews-vectors-negative300.bin.gz");
Word2Vec vec = WordVectorSerializer.loadGoogleModel(gModel, true);
InputStreamReader r = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(r);
for (; ; ) {
System.out.print("Word: ");
String word = br.readLine();
if ("EXIT".equals(word)) break;
Collection<String> lst = vec.wordsNearest(word, 20);
System.out.println(word + " -> " + lst);
}
Run Code Online (Sandbox Code Playgroud)
但它超级慢(计算最近的单词需要大约10分钟,尽管它们是正确的).
有足够的内存(-Xms20g -Xmx20g
).
当我从https://code.google.com/p/word2vec/运行相同的Word2Vec示例时
它非常快地给出最近的单词.
DL4J使用的ND4J声称速度是Numpy的两倍:http://nd4j.org/benchmarking
我的代码有什么问题吗?
更新:它基于https://github.com/deeplearning4j/dl4j-0.4-examples.git(我没有触及任何依赖项,只是试图阅读谷歌预先训练的矢量文件).Word2VecRawTextExample工作正常(但数据大小相对较小).
我是 deeplearning4j 的新手,我想使用词向量作为分类器的输入来制作句子分类器。我之前使用 python,其中使用 gensim 生成矢量模型,我想将该模型用于这个新分类器。是否可以在 deeplearning4j.word2vec 中使用 gensim 的 word2vec 模型,我该怎么做?
R-CNN,快速R-CNN,快速R-CNN和YOLO在以下方面有什么区别:(1)同一图像集的精度(2)给定相同的图像大小,运行时间(3)支持android移植
考虑这三个标准,哪个是最佳对象定位技术?
我正在尝试使用 spark 和 deepLearning4J 执行一个用 sbt-assembly 构建的胖罐子,不幸的是在执行过程中我遇到了线程“main”java.lang.NoClassDefFoundError 中的异常:许多罐子的错误。我尝试使用 spark-submit 中的 --jars 选项添加 jar,但是当我添加 jar 时,我遇到了来自另一个依赖项的另一个类的相同错误。
如果我理解得很好,sbt-assembly 生成的 FatJar 应该可以防止这种问题,因为它包含所有需要的 jar。
我的 Scala 文件在myproject/src/main/scala/xxx/spark/yyy/
也许是由于合并策略?
如果有帮助,我加入我的 build.sbt 文件!
先感谢您。
name := "myproject"
version := "1.0"
scalaVersion := "2.10.4"
val sparkVersion = "1.6.2"
mainClass in assembly := Some("xxx.spark.yyy.Main")
resolvers += Resolver.sojava.lang.NoClassDefFoundErrornatypeRepo("releases")
resolvers += "Spark Packages Repo" at "https://dl.bintray.com/spark-packages/maven"
resolvers += "Akka Snapshot Repository" at "http://repo.akka.io/snapshots/"
resolvers += "Artifactory" at "http://artifacts.kameleoon.net:8081/artifactory/sbt/"
resolvers += "Sbt plugins" at "https://dl.bintray.com/sbt/sbt-plugin-releases"
resolvers …
Run Code Online (Sandbox Code Playgroud) 我正在使用 ND4j(目前版本 1.0.0-beta5)开发一个严重依赖 Java 数组操作的科学应用程序。在整个管道中,我需要动态选择 [2,195102] 矩阵的不连续子集(更精确地说是几十/数百列)。知道如何在这个框架中实现这一目标吗?
简而言之,我正在尝试实现这个 python/numpy 操作:
import numpy as np
arrayData = np.array([[1, 5, 0, 6, 2, 0, 9, 0, 5, 2],
[3, 6, 1, 0, 4, 3, 1, 4, 8, 1]])
arrayIndex = np.array((1,5,6))
res = arrayData[:, arrayIndex]
# res value is
# array([[5, 0, 9],
# [6, 3, 1]])
Run Code Online (Sandbox Code Playgroud)
到目前为止,我设法使用NDArray.getColumns函数(以及 indexArray 中的 NDArray.data().asInt() 来提供索引值)选择所需的列。问题在于,文档明确指出,关于计算过程中的信息检索,“请注意,这不应该用于速度”(请参阅 NDArray.ToIntMatrix()的文档以查看完整消息 - 不同的方法,相同的操作)。
我查看了NDArray.get()的不同原型,但似乎没有一个符合要求。我认为NDArray.getWhere()可能会起作用 - 如果它像我假设的那样只返回满足条件的元素 - 但到目前为止,使用它并不成功。在解释所需的参数/用法时,文档相对较少。
感谢大家的时间和帮助:)
编辑(04/11/2019):关于我所尝试的一些精确性。我尝试了 NDArray.get() 并使用了索引: …
deeplearning4j ×10
java ×6
word2vec ×3
gensim ×2
nd4j ×2
apache-spark ×1
arrays ×1
gpu ×1
nan ×1
opennlp ×1
optimization ×1
sbt ×1
sbt-assembly ×1