Abi*_*Fox 6 python machine-learning deep-learning tensorflow
我构建了一个Tensorflow模型,该模型使用a 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.如果是a_NumericColumn,则通过键获取原始张量weight_column.key,然后对其weight_column.normalizer_fn应用以获得权重张量.
所以只需添加一个新列并为稀有类填充一些重量:
weight = tf.feature_column.numeric_column('weight')
...
tf.estimator.DNNClassifier(..., weight_column=weight)
Run Code Online (Sandbox Code Playgroud)
[更新]这是一个完整的工作示例:
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'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1783 次 |
| 最近记录: |