Python 张量流加权交叉熵损失函数在DNN分类器估计函数中的位置?
我目前正在使用Python 张量流加权交叉熵损失函数在DNN分类器估计函数中的位置?,python,tensorflow,machine-learning,classification,loss-function,Python,Tensorflow,Machine Learning,Classification,Loss Function,我目前正在使用tf.estimator.DNNClassifier,研究一种具有高度倾斜数据(90%负/10%正)的二项分类算法。 当我训练的所有模型收敛到将所有样本标记为负数时,我需要实现一个加权损失函数 我在这里看到了许多不同的问题,其中许多都很有启发性。然而,对于如何实际实现这些功能,我无法得到一个实际的端到端答案。线程是最好的 我的问题是:我想使用tf.nn.weighted\u cross\u entropy\u和\u logits(),但我不知道应该将其插入代码中的什么位置 我有一个
tf.estimator.DNNClassifier
,研究一种具有高度倾斜数据(90%负/10%正)的二项分类算法。
当我训练的所有模型收敛到将所有样本标记为负数时,我需要实现一个加权损失函数
我在这里看到了许多不同的问题,其中许多都很有启发性。然而,对于如何实际实现这些功能,我无法得到一个实际的端到端答案。线程是最好的
我的问题是:我想使用tf.nn.weighted\u cross\u entropy\u和\u logits()
,但我不知道应该将其插入代码中的什么位置
我有一个功能来构建特征柱:
def construct_feature_columns(input_features):
return set([tf.feature_column.numeric_column(my_feature)
for my_feature in input_features])
定义tf.estimator.DNNClassifier
和其他参数(如优化器和输入函数)的函数:
def train_nn_classifier_model(
learning_rate,
steps,
batch_size,
hidden_units,
training_examples,
training_targets,
validation_examples,
validation_targets):
dnn_classifier = tf.estimator.DNNClassifier(
feature_columns=construct_feature_columns(training_examples),
hidden_units=hidden_units,
optimizer=my_optimizer)
dnn_classifier.train(input_fn=training_input_fn, steps=steps_per_period)
training_probabilities = dnn_classifier.predict(input_fn=predict_training_input_fn)
培训职能:
def train_nn_classifier_model(
learning_rate,
steps,
batch_size,
hidden_units,
training_examples,
training_targets,
validation_examples,
validation_targets):
dnn_classifier = tf.estimator.DNNClassifier(
feature_columns=construct_feature_columns(training_examples),
hidden_units=hidden_units,
optimizer=my_optimizer)
dnn_classifier.train(input_fn=training_input_fn, steps=steps_per_period)
training_probabilities = dnn_classifier.predict(input_fn=predict_training_input_fn)
预测函数,用于计算训练时的误差:
training_probabilities = dnn_classifier.predict(input_fn=predict_training_input_fn)
优化器:
my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)
输入功能(用于培训输入、预测培训输入和验证输入):
我应该在哪里插入,以便我的模型使用此函数计算损失
另外,如何在交叉熵函数中调用目标(与logits类型和形状相同的张量)
?它是training\u targets
的数据帧吗?它是input函数的输出吗
具体是什么?因为对我来说,它们应该是来自函数的预测:
def train_nn_classifier_model(
learning_rate,
steps,
batch_size,
hidden_units,
training_examples,
training_targets,
validation_examples,
validation_targets):
dnn_classifier = tf.estimator.DNNClassifier(
feature_columns=construct_feature_columns(training_examples),
hidden_units=hidden_units,
optimizer=my_optimizer)
dnn_classifier.train(input_fn=training_input_fn, steps=steps_per_period)
training_probabilities = dnn_classifier.predict(input_fn=predict_training_input_fn)
但这对我来说毫无意义。我尝试了许多不同的方法来实现它,但没有一种奏效。我不想成为坏消息的传播者,但不支持自定义丢失功能:
通过使用softmax交叉熵计算损耗
这是文档中唯一提到的丢失(函数),我找不到任何一篇文章直接更改DNNClassifier
来讨论如何解决这个问题。相反,看起来你必须建立自己的估计器。所有预先制作的估计器都不支持自定义损失函数?看起来不是,不是。