- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在做this对于 NumPy 。 seq
是一个带有索引的列表。 IE。这实现了 1-of-k 编码(也称为 one-hot)。
def 1_of_k(seq, num_classes):
num_frames = len(seq)
m = np.zeros((num_frames, num_classes))
m[np.arange(num_frames), seq] = 1
return m
我如何在 Theano 中做同样的事情? (最有效的解决方案,对 CUDA 也是有效的。)
最佳答案
有一个内置函数可以执行此操作 ( theano.tensor.extra_ops.to_one_hot
),但它仍然比在 numpy 中执行它慢得多。如果您的任务可行,您最好在 Theano 之外计算它并将密集结果作为输入传递,而不是仅传递索引。
这里有一些代码说明了三个 numpy 方法和四个 Theano 方法。这段代码包含Albert(numpy_1_of_k_3
/compile_theano_1_of_k_3
)和eickenberg(numpy_1_of_k_2
/compile_theano_1_of_k_4
)提供的答案,用于对比.
事实证明,内置的 Theano 方法 (compile_theano_1_of_k_2
) 使用的代码与我自己的尝试 (numpy_1_of_k_1
/compile_theano_1_of_k_1
) 大致相同.
import timeit
import numpy as np
import theano
import theano.tensor as tt
import theano.tensor.extra_ops
def numpy_1_of_k_1(seq, num_classes):
num_frames = len(seq)
m = np.zeros((num_frames, num_classes))
m[np.arange(num_frames), seq] = 1
return m
def numpy_1_of_k_2(seq, num_classes):
return seq[:, np.newaxis] == np.arange(num_classes)
def numpy_1_of_k_3(seq, num_classes):
shape = [seq.shape[i] for i in range(seq.ndim)] + [num_classes]
eye = np.eye(num_classes)
return eye[seq].reshape(shape)
def compile_theano_1_of_k_1():
seq = tt.lvector()
num_classes = tt.lscalar()
num_frames = seq.shape[0]
m = tt.zeros((num_frames, num_classes))
m = tt.set_subtensor(m[tt.arange(num_frames), seq], 1)
return theano.function([seq, num_classes], outputs=m)
def compile_theano_1_of_k_2():
seq = tt.lvector()
num_classes = tt.lscalar()
return theano.function([seq, num_classes], outputs=theano.tensor.extra_ops.to_one_hot(seq, num_classes))
def compile_theano_1_of_k_3():
seq = tt.lvector()
num_classes = tt.lscalar()
shape = [seq.shape[i] for i in range(seq.ndim)] + [num_classes]
eye = tt.eye(num_classes)
m = eye[seq].reshape(shape)
return theano.function([seq, num_classes], outputs=m)
def compile_theano_1_of_k_4():
seq = tt.lvector()
num_classes = tt.lscalar()
one_hot = tt.eq(seq.reshape((-1, 1)), tt.arange(num_classes))
return theano.function([seq, num_classes], outputs=one_hot)
def main(iterations):
theano_1_of_k_1 = compile_theano_1_of_k_1()
theano_1_of_k_2 = compile_theano_1_of_k_2()
theano_1_of_k_3 = compile_theano_1_of_k_3()
theano_1_of_k_4 = compile_theano_1_of_k_4()
test_seq = np.array([0, 1, 2, 0, 1, 2])
test_num_classes = 4
test_functions = [numpy_1_of_k_1, numpy_1_of_k_2, numpy_1_of_k_3, theano_1_of_k_1, theano_1_of_k_2, theano_1_of_k_3,
theano_1_of_k_4]
test_results = [test_function(test_seq, test_num_classes) for test_function in test_functions]
for a, b in zip(test_results[:-1], test_results[1:]):
assert np.all(np.equal(a, b)), (a, b)
data = []
for _ in xrange(iterations):
num_classes = np.random.randint(100) + 1
seq = np.random.randint(num_classes, size=(np.random.randint(100) + 1))
data.append((seq, num_classes))
for test_function in test_functions:
start = timeit.default_timer()
total = 0
for seq, num_classes in data:
total += test_function(seq, num_classes).sum()
print timeit.default_timer() - start, total
main(100000)
使用笔记本电脑并在 CPU 上运行 Theano 代码,我在几秒钟内得到以下计时:
numpy_1_of_k_1 1.0645
numpy_1_of_k_2 1.4018
numpy_1_of_k_3 1.6131
theano_1_of_k_1 6.3542
theano_1_of_k_2 6.4628
theano_1_of_k_3 6.5637
theano_1_of_k_4 5.4588
因此在 numpy 中,身份方法比简单广播慢,而简单广播比从零开始的集合慢。然而,在 Theano 中,相对性能顺序不同;这里简单的广播方法是最快的。
这些都是非常小的测试用例,因此相对性能可能会因更大的矩阵或在 GPU 上运行时而有所不同。
关于theano - Theano 中的 1-of-k(one-hot)编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32867030/
我已经使用 flutter_web 有一段时间了,从来没有真正质疑过它在按下“热重载”时总是重新启动整个应用程序,但自从现在 flutter_web 被合并到主要的 flutter channel 我
我正在使用 webpack-dev-server处于开发模式( watch )。每次服务器重新加载时,一些 json 和 js 文件都会挤满我的构建目录,如下所示:'hash'.hot-update.
我正在尝试让 React-hot-loader 3 与 React-hot-loader 3、React-router 4 和 Webpack-hot-middleware(最新版本,2.18.2)一
我正在尝试使用 Handsontable 版本 0.34.4CE/1.14.2 PRO 在 Handsontable (HOT-in-HOT) 中创建 Handsontable。根据此处提供的文档,一
使用one-hot encoding,一旦你有一个包含 1 个值的列,让我们说“color”,pandas get_dummies 将做如下: df = pd.DataFrame({'f1': ['r
鉴于这些是我正在使用的依赖项: "react-hot-loader": "3.0.0-beta.7", "webpack": "2.6.1", "webpack-dev-middleware": "^
我在我的输出目录中建立了一系列热加载器文件 (*.hot-loader.json)。如何确保此输出目录清除不必要的文件? 注意:我也在使用 Webpack。 最佳答案 使用 webpack-middl
我是机器学习和深度学习的新手。我想解决时间序列问题,该问题每秒都有数据。另外,我最近一直在研究word2vector和时间序列数据。有一天,我想到了一个想法,将日期时间等序列数据转换为 one-hot
我正在尝试让 React Hot Reloader 适用于我的 ReactJS 项目,但收到错误错误:找不到相对于目录的预设“react-hot”... 我确实在 .babelrc 中设置了预设“re
基于网络阅读、堆栈溢出,主要是 these articles关于与编码恐怖相关的数据库版本控制,我已经尝试编写一个计划来对一个有 8 年历史的 php mysql 网站的数据库进行版本控制。 Data
我正在尝试想出一种方法来确定某些帖子在论坛中的“热门”程度。你会使用什么标准,为什么?如何将这些结合起来得出热度分数? 我考虑的标准包括: 有多少回复 距离上次回复有多久 平均回复时间 该算法必须解决
我正在尝试复制 reddit's hot algortithm用于整理我的帖子。这是我的功能: def hot(self): s = self.upvotes baseScore =
先给大家展示下效果图,看看是不是在你的意料之中哈。 labelview是在github上一个开源的标签库。其项目主页是:https://github.com/linger1216//label
我的R代码有问题,而缺少值。实际上不知道如何使用简单的Hot Deck方法估算这些值。例如,拥有这些数据。 1 10000123 111 112820 0.24457235 NA
我正在研究有关Node.js的教程,网址为:http://www.johnpapa.net/get-up-and-running-with-node-and-visual-studio/ 我可以让该应
我有一个像这样的 CSV 文件 我想选择最后一列并使每个序列的字符级单热编码矩阵,我使用此代码但它不起作用 data = pd.read_csv('database.csv', usecols=[4]
我有一个包含混合字符串的列,我创建了列来表示字符串中的每个唯一字符。我需要用 [1,0] 对列进行编码如果字符串中的任何字符与这些列之一匹配。 library(data.table) d = data
当 Jetty 上有原生 Java 代码时,您可以执行热部署。 例如,这使您可以更改 servlet 代码,而无需重新启动服务器即可查看应用程序更改。 但是,如果您在 Java 之上运行脚本语言 -
假设我想从 Reddit 子版 block “新闻”流式传输帖子。然而,帖子非常频繁,我们不能说每个帖子都值得。所以我想通过尝试流式传输“热门”列表来过滤好帖子。但我不确定这是否可能,或类似的事情是否
这是我的服务器代码: if (process.env.NODE_ENV === 'development') { // Enable logger (morgan) a
我是一名优秀的程序员,十分优秀!