gpt4 book ai didi

python - 决定是否根据特征条件更新权重

转载 作者:行者123 更新时间:2023-12-04 03:41:00 25 4
gpt4 key购买 nike

我想根据特征值决定是否训练一些特定的权重。

作为一个简单的尝试,我只想“接触”输入层和第一层之间的权重,这样如果特征 i 的条件成立,那么不要训练(更新)所有这些权重将第 1 层与输入神经元连接 i

假设我有这样的模型:

model = keras.Sequential([
layers.Dense(2, activation=tf.nn.relu, input_shape=(N, 4)),
layers.Dense(1, activation=tf.nn.relu)])

如果我输入 [1,2,3,4] 且所有非零值,我希望一切正常工作。但是,我想提供一个像 [1,2,3,0] 这样的例子并使与输入层的第 4 个神经元相关的权重保持不变且未更新。我正在尝试模拟“缺失特征”行为

最佳答案

我可能完全错了。但我认为这个问题没有数学意义。如果输入为零,则梯度将为零。因此不会对权重进行更新。让我们进行测试。

让我们输入一个零:

import tensorflow as tf
import numpy as np

x = np.array([[1.2, 1.1, 0., 2.3, 4.1]], dtype=np.float32)
y = [0.]

如您所见,缺少第三个值。

现在让我们使用随机目标进行前向传播,并查看梯度:

x = np.array([[1.2, 1.1, 0., 2.3, 4.1]], dtype=np.float32)
y = [0.]

model = tf.keras.Sequential([
tf.keras.layers.Dense(8, activation='relu'),
tf.keras.layers.Dense(3, activation='softmax')])

with tf.GradientTape() as tape:
out = model(x)
loss = tf.losses.sparse_categorical_crossentropy(y, out)
gradients = tape.gradient(loss, model.trainable_variables)

np.round(gradients[0].numpy().tolist(), 2)
array([[0.  , 0.  , 0.  , 0.3 , 0.  , 0.  , 0.17, 1.29],
[0. , 0. , 0. , 0.28, 0. , 0. , 0.15, 1.18],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0.58, 0. , 0. , 0.32, 2.47],
[0. , 0. , 0. , 1.03, 0. , 0. , 0.57, 4.4 ]])

与输入的第 3 列(第 3 行)相关的所有梯度均为零。当 optimizer.apply_gradients 将应用于 model.fit 时,不会对与缺失值相关的权重执行任何操作,因为梯度为零。

关于python - 决定是否根据特征条件更新权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66051623/

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