在Keras中,我希望以Coubariaux等人的方式训练具有二进制权重的网络,但我无法确定代码中的量化(二进制化)应该发生在哪里。
培训方法的一个核心方面是:
如果我在Layer.call()中执行二进制化,我相信它会发生在每一个前向传递(对于每个样本),但它应该只发生每批一次。
如果我在一个Callback.on_batch_begin()中进行二值化,我认为我不能指定使用二进制权值进行前向传递,而实值权值用于梯度计算。
有什么建议吗?不幸的是,我的Python知识不是很深,所以对我来说,理解代码流有点困难。
**注意,当我谈到二进制值时,我并不是指1位(例如,放置在int8中的8个二进制值)。二进制值的权重仍然可以用int32、float32等来表示.
发布于 2021-07-10 17:42:11
在Keras中可能不可能实现二进制化。在TensorFlow中,它可以是tensorflow.clip_by_value(x, 0.0, 1.0)
附有守则网站的文件有许多二值化神经网络论文的实现。
https://datascience.stackexchange.com/questions/14533
复制相似问题