当前位置: 首页 > 面试题库 >

增加类别

连俊智
2023-03-14
问题内容

我建立了一个TensorFlow模型,该模型使用DNNClassifier将输入分为两类。

我的问题是,结果1的发生率高达90-95%。因此,TensorFlow为我的所有预测提供了相同的概率。

我正在尝试预测其他结果(例如,对结果2做出假阳性比错过可能发生的结果2更可取)。我知道,一般而言,在机器学习中,这种情况下值得尝试提高结果2。

但是,我不知道如何在TensorFlow中执行此操作。该文件暗指这是可能的,但我找不到它实际上看起来像任何例子。有没有人成功完成此操作,或者有人知道我在哪里可以找到一些示例代码或详尽的说明(我正在使用Python)?

注意:当有人使用TensorFlow的更基本部分而不是估计量时,我已经看到了暴露的权重被操纵。出于维护原因,我需要使用估算器执行此操作。


问题答案:

tf.estimator.DNNClassifier构造函数具有weight_column参数:

weight_column
字符串_NumericColumn通过tf.feature_column.numeric_column定义表示权重的特征列而创建的
。在训练过程中,它可用于减轻体重或增强示例效果。它将乘以示例的损失。如果是字符串,则用作从中获取权重张量的键features。如果为_NumericColumn,则通过key获取原始张量weight_column.key,然后
weight_column.normalizer_fn将其应用于权重张量。


因此,只需添加一个新列并为稀有类填充一些权重即可:

weight = tf.feature_column.numeric_column('weight')
...
tf.estimator.DNNClassifier(..., weight_column=weight)

[更新] 这是一个完整的工作示例:

import numpy as np
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets('mnist', one_hot=False)
train_x, train_y = mnist.train.next_batch(1024)
test_x, test_y = mnist.test.images, mnist.test.labels

x_column = tf.feature_column.numeric_column('x', shape=[784])
weight_column = tf.feature_column.numeric_column('weight')
classifier = tf.estimator.DNNClassifier(feature_columns=[x_column],
                                        hidden_units=[100, 100],
                                        weight_column=weight_column,
                                        n_classes=10)

# Training
train_input_fn = tf.estimator.inputs.numpy_input_fn(x={'x': train_x, 'weight': np.ones(train_x.shape[0])},
                                                    y=train_y.astype(np.int32),
                                                    num_epochs=None, shuffle=True)
classifier.train(input_fn=train_input_fn, steps=1000)

# Testing
test_input_fn = tf.estimator.inputs.numpy_input_fn(x={'x': test_x, 'weight': np.ones(test_x.shape[0])},
                                                   y=test_y.astype(np.int32),
                                                   num_epochs=1, shuffle=False)
acc = classifier.evaluate(input_fn=test_input_fn)
print('Test Accuracy: %.3f' % acc['accuracy'])


 类似资料:
  • 1、从内部增加和修改类属性 来,我们先来温习一下类的结构。 看着这个结构,提一个问题,如何修改类属性,也就是类里面的变量? 从类结构来看,我们可以猜测,从类方法来修改,也就是从类内部来修改和增加类属性。 看下具体的实例: 这里还是强调一下,例子还是要自己多写,不要只看,自己运行, 看效果。多想。 2、从外部增加和修改类属性 我们刚刚看了通过类方法来修改类的属性,这时我们看下从外部如何修改和增加类属

  • 我有一个只有完全连接/密集层的深度网络,形状为128-256-512-1024-1024所有层使用激活,没有,最后一层使用激活。 在第20次训练后,验证/测试损失开始逆转并上升,但测试精度也在继续提高。这怎么说得通?如果显示了新的数据,测试的准确性是否准确,或者是否存在某种假阳性? 我这样编译模型:

  • 问题内容: 我在Google和此站点中搜索了我的问题,但我仍然不明白该解决方案。 我有一段程序里面有一些数据。程序在大型阵列上崩溃,并显示虚拟内存不足的错误,因此我开始考虑文件。 在此之前: 之后: 我在Ubuntu上进行了测试,并通过系统监视器看到了这种内存增加。但是我很困惑,(和)参数没有变化。 问题是-实际内存使用量的指标是什么? 这是否表示真实指标是?(并且仅分配但仍未使用的内存) 问题答

  • 问题内容: 长期缺席并喜欢它之后,我目前正在重新使用Python。但是,我发现自己反复遇到一种模式。我一直认为,必须有一种更好的方式表达我想要的东西,而我可能做错了方式。 我正在编写的代码具有以下形式: 我在程序中写很多。我的第一个反应是将其推出辅助函数,但是通常python库已经提供了类似的功能。 我缺少一些简单的语法技巧吗?还是采用这种方式? 问题答案: 使用: 在Python> = 2.7中

  • 问题内容: 我曾经这样搜索: 但用户包含这样的用户a,b,c: 是第一个索引,是类型。 如何在此查询中增加类型?最好加上示例代码,谢谢。 问题答案: 您可以使用术语查询来增强索引类型。 首先创建一些测试数据(e1,e2,e3是类型,而test是索引名称): 现在将术语查询与按类型自定义增强一起使用: 它将产生如下结果:

  • 新增类 net.wendal.nutzbook.bean.Role ,请自行补齐getter/setter package net.wendal.nutzbook.bean; import java.util.List; import org.nutz.dao.entity.annotation.ColDefine; import org.nutz.dao.entity.annotation.