gpt4 book ai didi

python - 对keras层的输出进行归一化,使得输出之和为1

转载 作者:太空宇宙 更新时间:2023-11-03 19:56:37 25 4
gpt4 key购买 nike

我想要一个像 K.l2_normalize 这样的归一化函数,但可以使输出的总和为 1

L2归一化公式为:

       x
---------------
sqrt(sum(x**2))

例如,对于输入 [3, 1, 4, 3, 1] 为 [3/6, 1/6, 4/6, 3/6, 1/6]=12/6=1/2

但我想要:

    x 
---------------
||x||

例如,对于输入 [3, 1, 4, 3, 1] 为 [3/12, 1/12, 4/12, 3/12, 1/12]=12/12=1

在Python中,我想要这样的东西:

import tensorflow as tf
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.layers import Lambda

x = tf.keras.layers.Input(tensor=tf.constant([[3, 1, 4, 3, 1]], dtype=tf.float32))
n_layer = Lambda(lambda t: "somefunction" )(x)

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(n_layer.eval())

---------输出--------

[[0.25 0.0833 0.3333 0.25 0.0833 ]]

最佳答案

您要查找的是l1-norm,因此需要将阶数设置为1。您可以通过tf.linalg.norm中的ord参数传递范数的阶数

from tensorflow.python.keras import backend as K
from tensorflow.python.keras.layers import Lambda

x = tf.keras.layers.Input(tensor=tf.constant([[3, 1, 4, 3, 1]], dtype=tf.float32))
n_layer = Lambda(lambda t: tf.linalg.norm(t,ord=1) )(x)

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(n_layer.eval())

输出:

12.0

关于python - 对keras层的输出进行归一化,使得输出之和为1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59499075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com