Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 张量流加权交叉熵损失函数在DNN分类器估计函数中的位置?_Python_Tensorflow_Machine Learning_Classification_Loss Function - Fatal编程技术网

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
来讨论如何解决这个问题。相反,看起来你必须建立自己的估计器。

所有预先制作的估计器都不支持自定义损失函数?看起来不是,不是。