加权绝对误差实现不';t在tensorflow(keras)中工作
我在keras中创建了自定义损失(加权绝对误差),但实现不起作用-我得到一个错误加权绝对误差实现不';t在tensorflow(keras)中工作,tensorflow,keras,Tensorflow,Keras,我在keras中创建了自定义损失(加权绝对误差),但实现不起作用-我得到一个错误ValueError:没有为任何变量提供梯度:['my_model/conv2d/kernel:0','my_model/conv2d/bias:0'. 我想为每个像素应用不同的权重 class WeightedMeanAbsoluteError(tf.keras.metrics.Metric): def __init__(self, name='weighted_mean_absolute_error')
ValueError:没有为任何变量提供梯度:['my_model/conv2d/kernel:0','my_model/conv2d/bias:0'.
我想为每个像素应用不同的权重
class WeightedMeanAbsoluteError(tf.keras.metrics.Metric):
def __init__(self, name='weighted_mean_absolute_error'):
super(WeightedMeanAbsoluteError, self).__init__(name=name)
self.wmae = self.add_weight(name='wmae', initializer='zeros')
def update_state(self, y_true, y_pred, loss_weights):
values = tf.math.abs(y_true - y_pred) * loss_weights
return self.wmae.assign_add(tf.reduce_sum(values))
def result(self):
return self.wmae
def reset_states(self):
# The state of the metric will be reset at the start of each epoch.
self.wmae.assign(0.)
loss_object = WeightedMeanAbsoluteError()
train_loss = WeightedMeanAbsoluteError()
我使用以下代码实现培训步骤:
@tf.function
def train_step(input_images, output_images):
with tf.GradientTape() as tape:
# training=True is only needed if there are layers with different
# behavior during training versus inference (e.g. Dropout).
result_images = model(input_images, training=True)
loss = loss_object(output_images, result_images)
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
如果我使用
loss_object = tf.keras.losses.MeanAbsoluteError()
train_loss = tf.keras.metrics.MeanAbsoluteError()
最小化加权标准损失(如mae)的最佳且简单的方法是在拟合方法中使用sample_weights参数,在该方法中,我们传递一个带有每个样本所需权重的数组
X = np.random.uniform(0,1, (1000,50))
y = np.random.uniform(0,1, 1000)
W = np.random.randint(1,10, 1000)
inp = Input((50))
x = Dense(64, activation='relu')(inp)
out = Dense(10)(x)
model = Model(inp, out)
model.compile('adam','mae')
model.fit(X,y, epochs=100, sample_weights=W)
最小化加权标准损失(如mae)的最佳且简单的方法是在拟合方法中使用sample_weights参数,在该方法中,我们传递一个带有每个样本所需权重的数组
X = np.random.uniform(0,1, (1000,50))
y = np.random.uniform(0,1, 1000)
W = np.random.randint(1,10, 1000)
inp = Input((50))
x = Dense(64, activation='relu')(inp)
out = Dense(10)(x)
model = Model(inp, out)
model.compile('adam','mae')
model.fit(X,y, epochs=100, sample_weights=W)