如何将二进制权重值(0,1)或(-1,1)设置到Keras中的层?



我想问一下,我是否可以将(任何)Keras层中的权重初始化器设置为二进制值-例如,简单Dense层的权重仅为0和1 ?这将有助于例如在Conv1D层的情况下放松计算时间。

谢谢你,J

是的,这可以通过创建自定义初始化器实现:

def binary_weights(shape, dtype=tf.float32):
"""This function generates weights of random 0s and 1s based on the provided shape"""
# build logits matrix:
logits = tf.fill((shape[0], 2), 0.5)
# uniformly pick the class.
return tf.cast(tf.random.categorical(tf.math.log(logits), shape[1]), dtype=dtype)

当你指定图层时:

model = tf.keras.models.Sequential([
tf.keras.layers.Dense(units, kernel_initializer=binary_weights, input_shape=[num_features,]),
...
])

查看生成的权重:

print(model.layers[0].get_weights()[0])

相关内容

  • 没有找到相关文章

最新更新