问题标签 [theano]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1520 浏览

numpy - numpy中具有不同行长的矩阵

有没有办法在 numpy 中定义一个具有不同长度行的矩阵(比如m),但是这样m保持二维(iemndim = 2)?

例如,如果您定义m = numpy.array([[1,2,3], [4,5]]),则m.ndim = 1。我理解为什么会发生这种情况,但如果有的话我很感兴趣任何欺骗 numpy 将m视为 2D 的方法。一个想法是用一个虚拟值填充,以便行变得相同大小,但我有很多这样的矩阵,它会占用太多空间。我真的需要m是 2D 的原因是我正在使用 Theano,并且将被赋予m值的张量期望一个 2D 值。

0 投票
1 回答
1191 浏览

theano - Theano 中的可变长度张量

这个问题是指 Theano 中的最佳实践。这是我正在尝试做的事情:

我正在为 SMT 系统构建神经网络。在这种情况下,我在概念上将句子表示为可变长度的单词列表,并将单词表示为固定长度的整数列表。理想情况下,我想将我的语料库表示为 3D 张量(第一维 = 语料库中的句子,第二维 = 句子中的单词,第三维 = 单词中的整数特征)。困难在于句子的长度是可变的,据我所知,Theano 中的张量有严格的要求,即一维中的所有长度必须相同。

我想到的解决方案包括:

  1. 对虚拟词使用填充,使句子大小相等。但这意味着每当我遍历一个句子时,我都需要包含特殊代码来丢弃填充。
  2. 将语料库表示为矩阵向量。但是,这使得使用某些功能变得困难。例如,如果我想将一个句子中所有单词的表示相加,我不能简单地使用 *corpus.sum(axis=1)*。我必须遍历句子,执行 *sentence.sum(axis=0)*,然后将结果收集到另一个张量中。

我的问题是:这些替代方案中的哪一个是首选,还是有更好的替代方案?

0 投票
1 回答
547 浏览

math - Revisit forcing python math functions to operate on float32

I am aware of howto force python operations to work on float32: How to force python float operation on float32 rather than float64

But there is no Q or A about forcing the built in functions to work on float32. I wanted to ask how about forcing the built-in math or numpy functions such as math.sqrt or numpy.sqrt to work on float32. FYI, I could not comment on the question yet.

In theano, we can easily configure the function, e.g., sqrt to work on float32 or float64 as follows:

and the result is:

Now I tried to force math.sqrt and numpy.sqrt to do the same as follows:

But the result is still seems in float64 (I confirmed it that the result would be the same, i.e., 3.87298334621, if I set theano.config.floatX='float64'):

I am curious to know howto force math.sqrt, numpy.sqrt to work on float32?

0 投票
1 回答
503 浏览

python - Theano:在编译函数 (GPU) 中进行索引

由于 Theano 允许通过简单地定义必须更新的内存区域以及应该如何完成来更新显卡 DRAM 上的内存,我想知道以下是否可行(恕我直言)。

我有一个 2x5 随机初始化的矩阵,第一列将用起始值初始化。我想编写一个依赖于前一列的函数,并根据任意计算更新下一个。

我认为这段代码很好地解释了它:

注意:此代码不起作用,它只是一个说明:

我想要的输出是:

但相反我得到

有人可以在这里帮助我吗?

哇:这个问题是在我已经在谷歌搜索结果的前 4 名中询问“ Theano indexing gpu ”之后的 9 分钟。o_o

0 投票
1 回答
473 浏览

theano - Theano 中的类型化列表

考虑以下机器翻译问题。设s作为源句和t目标句。这两个句子在概念上都表示为索引列表,其中索引对应于相关词典中单词的位置。例子:

请注意,st不一定具有相同的长度。现在让ST成为此类实例的集合。换句话说,它们是一个平行语料库。例子:

请注意,并非所有s's inS都具有相同的长度。也就是说,句子具有可变数量的单词。

我正在 Theano 中实现一个机器翻译系统,第一个设计决策是使用什么样的数据结构ST. 从在 numpy 中具有不同行长度的矩阵上发布的一个答案中,我了解到类型列表是存储可变长度张量的一个很好的解决方案。

但是,我意识到它们使我的代码复杂化了很多。让我举一个例子。假设我们有两个类型化的列表yp_y_given_x并且旨在计算负损失可能性。如果它们是常规张量,像这样的简单语句就足够了:

categorical_crossentropy只能应用于张量,所以在类型列表的情况下,我必须遍历它们并将函数分别应用于每个元素:

除了使我的代码越来越混乱之外,这些问题还会传播。例如,如果我想计算损失的梯度,则以下内容不再起作用:

我不知道为什么它不起作用。我确定它与 的类型有关loss,但我没有兴趣进一步研究如何使其工作。混乱正在呈指数级增长,我想知道我是否以错误的方式使用类型列表,或者是时候放弃它们了,因为它们还没有得到足够好的支持。

0 投票
1 回答
106 浏览

python - 符号表达式/语句的连接/创建

我想以编程方式创建这样的东西:

我们得到了a = (_vec, T.set_subtensor(_vec[0], _init[0]))[1]一个完整的声明。这还没有做任何事情。然后是b = (a, T.set_subtensor( a[1], a[0] * 2))[1]哪个取决于a并且是另一个语句本身。这一直持续到vec_update。我知道它看起来很难看,但它只是更新了一个向量的列,比如返回一个看起来像这样的向量col[n] = col[n-1] * 2col[0] = 1

现在想象一下,我想这样做一千次..因此我想知道我是否可以生成这样的语句,因为它们遵循一个简单的模式。

这些“连接的”语句直到

这是当它们被编译为CUDA-code

确实执行一切。

0 投票
3 回答
1564 浏览

python - 从索引列表到 one-hot 矩阵

Theano 中将索引向量转换为 0 和 1 矩阵的最佳(优雅和有效)方法是什么,其中每一行都是索引的 N 之一表示?

例子:

0 投票
1 回答
260 浏览

python - Theano 中的模糊循环错误

我正在尝试在 Theano 中模拟一个重复循环:

我遇到了以下奇怪的行为。让b成为一个常数。无论何时a是一个常数,一切正常。但是,当a是标量时,我收到与优化相关的错误:

如果有人可以帮助我理解错误,我将不胜感激。我假设 theAttributeError不是指aor b,因为我可以打印它们dtype并看到它们确实有一个。除此之外,我无法理解它。

[编辑] 这不是致命错误。代码正常运行,进程以退出代码 0 结束。看起来 Theano 正在尝试优化图形但未能这样做,这并没有真正影响程序。

0 投票
1 回答
242 浏览

theano - Theano SDE 示例

我正在尝试通过使用此处找到的 Theano 在 GPU 上解决 SDE 的示例

我遇到了 GpuDimShuffle 错误,但我没有看到任何暗淡不匹配......

产量:

TypeError: ('编译节点时出现以下错误', Rebroadcast{0(GpuDimShuffle{x,0}.0), '\n', 'super(type, obj): obj 必须是类型的实例或子类型')

我在 Theano 0.6.0

0 投票
1 回答
621 浏览

theano - Theano 是否支持变量拆分?

在我的 Theano 程序中,我想将张量矩阵分成两部分,每部分对误差函数都有不同的贡献。谁能告诉我自动微分是否支持这一点?

例如,对于一个张量矩阵变量M,我想将其拆分为M1=M[:300,]和M2=M[300:,],那么代价函数定义为0.5* M1 * w + 0.8*M2 *w。是否仍然可以使用 T.grad(cost,w) 获得梯度?

或者更具体地说,我想构建一个具有不同特征的自动编码器,在总成本中具有不同的权重。

感谢任何回答我问题的人。