首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Keras训练中,如何量化前传中的权重?

在Keras训练中,如何量化前传中的权重?
EN

Data Science用户
提问于 2016-10-14 20:41:56
回答 1查看 1.5K关注 0票数 1

在Keras中,我希望以Coubariaux等人的方式训练具有二进制权重的网络,但我无法确定代码中的量化(二进制化)应该发生在哪里。

培训方法的一个核心方面是:

  • 在每一批训练开始时,存储的实数(例如int32)权值被转换为二进制值(通过舍入或随机/概率方式),并与实数权值分开存储。
  • 在前传中使用二进制值权值来计算活动.
  • 在后传中使用实值权值,计算梯度.
  • 权重更新适用于实数权重,而不是二进制权重。
  • 二进制值的权重在下一批之前不会改变,在下一批时,通过对最近更新的实值权重进行二值化来重新计算它们。

如果我在Layer.call()中执行二进制化,我相信它会发生在每一个前向传递(对于每个样本),但它应该只发生每批一次。

如果我在一个Callback.on_batch_begin()中进行二值化,我认为我不能指定使用二进制权值进行前向传递,而实值权值用于梯度计算。

有什么建议吗?不幸的是,我的Python知识不是很深,所以对我来说,理解代码流有点困难。

**注意,当我谈到二进制值时,我并不是指1位(例如,放置在int8中的8个二进制值)。二进制值的权重仍然可以用int32、float32等来表示.

EN

回答 1

Data Science用户

发布于 2021-07-10 17:42:11

在Keras中可能不可能实现二进制化。在TensorFlow中,它可以是tensorflow.clip_by_value(x, 0.0, 1.0)

附有守则网站的文件有许多二值化神经网络论文的实现。

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

https://datascience.stackexchange.com/questions/14533

复制
相关文章

相似问题

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