首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow或Keras中的离散权重和激活

Tensorflow或Keras中的离散权重和激活
EN

Stack Overflow用户
提问于 2016-05-20 16:03:50
回答 2查看 1.4K关注 0票数 5

您是否知道将tensorflowkeras约束为一组离散权重并使用离散/刚性激活函数(例如signhard-tanh)的方法?

API似乎只有平滑的激活功能。

我还考虑了通过自定义正则化函数对权重进行离散化,但我不知道如何让框架考虑到这一点。

可能我将不得不扩展(例如)(相应框架的)密集层类,并定义一个自定义的前向传播函数(及其派生函数)。你有这方面的例子吗?

EN

回答 2

Stack Overflow用户

发布于 2016-05-22 21:48:35

在我看来,在Keras中,将权重和激活从平滑到离散可能是一个巨大的问题。我认为这种方法至少有两个主要困难:

  1. Optimization框架必须完全不同: Keras / Theano在ANN中做得如此出色的主要原因是他们能够自动微分张量函数。这是当今大多数优化算法的主要构建块。将域从连续域更改为离散域会改变优化规则,据我所知,Keras和Theano还没有为this.
  2. Mathematical问题做好准备:您可能想知道,简单地对每个权重和激活进行舍入是否对您的问题是一个很好的解决方案。但你必须记住,高维离散网格具有一些违反直觉的属性,这可能会真正误导人们。例如,28 x 28 x 3维单位立方体的直径为50,并且具有大量的顶点(2^dimension).

这些就是为什么你的问题可能真的很难解决的原因。

票数 1
EN

Stack Overflow用户

发布于 2016-08-10 08:59:03

在Tensorflow中,可以使用多种函数组合来激活或执行更多操作。对于您引用的两个示例:

代码语言:javascript
复制
zero = tf.constant(0)
one = tf.constant(1)
neg_one = tf.constant(-1)

hard_tanh(x) = tf.minimum(tf.maximum(x, neg_one), one)) 

sign(x) = tf.greater(x, zero)

请注意,后者返回一个布尔张量,因此如果需要1和0或1和-1,则可以使用tf.cast更改数据类型并进行适当的移位。所有这些函数都实现了渐变。

对于离散权重,我认为您可以在使用权重之前对其应用适当的离散激活。这种方法适用于非负矩阵分解,即在每个更新步骤中使用校正的线性单元将负权重置零。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37341229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档