TensorFlow中的这种一键编码速度很快吗?还是出于任何原因有缺陷?

rd11

关于使用TensorFlow计算单热嵌入有一些堆栈溢出问题,这是公认的解决方案:

num_labels = 10
sparse_labels = tf.reshape(label_batch, [-1, 1])
derived_size = tf.shape(label_batch)[0]
indices = tf.reshape(tf.range(0, derived_size, 1), [-1, 1])
concated = tf.concat(1, [indices, sparse_labels])
outshape = tf.reshape(tf.concat(0, [derived_size, [num_labels]]), [-1])
labels = tf.sparse_to_dense(concated, outshape, 1.0, 0.0)

这几乎与官方教程中的代码相同:https : //www.tensorflow.org/versions/0.6.0/tutorials/mnist/tf/index.html

在我看来,既然tf.nn.embedding_lookup存在,它可能会更有效率。这是使用此版本的版本,它支持任意形状的输入:

def one_hot(inputs, num_classes):
    with tf.device('/cpu:0'):
        table = tf.constant(np.identity(num_classes, dtype=np.float32))
        embeddings = tf.nn.embedding_lookup(table, inputs)
    return embeddings

您是否希望此实现更快?还有其他原因的缺陷吗?

ry

one_hot()您问题中函数看起来正确。但是,我们不建议以此方式编写代码的原因是它的内存效率非常低为了理解原因,假设您的批处理大小为32,并且具有1,000,000个类。

  • 在本教程建议的版本中,最大张量将是的结果tf.sparse_to_dense(),即32 x 1000000

  • 在所讨论的one_hot()函数中,最大张量将是的结果np.identity(1000000),即4 TB。当然,分配此张量可能不会成功。即使类的数量小得多,它仍然会浪费内存来显式存储所有这些零。TensorFlow不会自动将数据转换为稀疏表示,即使这样做可能会有利可图。

最后,我想提供一个新功能的插件,该插件最近已添加到开源存储库中,并且将在下一个版本中提供。tf.nn.sparse_softmax_cross_entropy_with_logits()允许您指定一个整数向量作为标签,并使您不必构建密集的一键表示。对于大量类的任何一种解决方案,效率都应该更高

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

防止未分配的对象,这是出于不良设计考虑的任何原因吗?

ArrayIndexOutOfBoundsException没有任何原因

奇怪的PHP编码代码。任何原因?

MySQL查询在phpmyadmin中工作但在php代码中没有任何原因?

没有任何原因的PrintStream错误?

IHostedService停止,没有任何原因

是否可以出于任何原因在每个路径中注册两个WatchKey?

是否应出于任何原因避免使用application / x-httpd-php .html?

是否有任何原因使Clojure中的默认十进制文字不是BigDecimal类型?

C中if(function()== TRUE)的任何原因

是否有任何原因在此代码块的List <T>中找不到现有项目?

Java new Thread使用此方法-好的/不好的任何原因吗?

可以因为任何原因而使foreach迭代变量不变吗?

是否有任何原因EnumMap和EnumSet不可导航

是否有任何原因导致`std :: exchange`不是`constexpr`?

Apache Camel在启动后立即关闭,未记录任何原因,没有引发异常

是否有任何原因未触发此事件功能?

React Redux Connect是否有任何原因直接返回函数而不是组件?

为什么不将数据存储在此结构中的任何原因?

我无法连接到 GitLab.com CI 中的 localhost 的任何原因?

在 ASP.Net Core 2.0 中由于任何原因停止 Kestrel 时的预制清理

共享指针和带有自定义删除器的唯一指针之间语法差异的任何原因

同一交易的两个高级 PDF 表单会以不同的方式绘制数据,这是否有任何原因?

Quarkus/CDI ApplicationScoped beans 是否可以出于任何原因从上下文中删除或在运行时收集的垃圾?

是否有任何原因导致File中的某些方法使用布尔值来表示其成功(而不只是抛出异常)?

AsyncTask在概念上确实有缺陷吗?还是我只是缺少一些东西?

如果BT连接由于任何原因断开,我可以使MacOS静音系统音量吗?

如果触发器由于任何原因失败,MYSQL触发器是否有可能返回错误消息?

BitArray的Int64转换值与“ SetAll”有所不同。任何原因?