我建立了一个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.