我已经生成了一些CSV输入数据,其中'超棒'是'age * 10'。它看起来像这样:如何训练张量流中的线性模型?
age, awesomeness
67, 670
38, 380
32, 320
69, 690
40, 400
它应该是微不足道的写tensorflow模型,可以预测由“时代”“迷死人”,但我不能使它发挥作用。
当我运行培训,输出我得到的是:
accuracy: 0.0 <----------------------------------- What!??
accuracy/baseline_label_mean: 443.8
accuracy/threshold_0.500000_mean: 0.0
auc: 0.0
global_step: 6000
labels/actual_label_mean: 443.8
labels/prediction_mean: 1.0
loss: -2.88475e+09
precision/positive_threshold_0.500000_mean: 1.0
recall/positive_threshold_0.500000_mean: 1.0
请注意,这显然是一个完全人为的例子,但那是因为我得到了相同的结果具有更复杂的意义的模型一个更大的数据集;准确度为0%。
这是我尝试在最小的可能的可重复测试案例,我可以使其展现相同的行为。
下面是我在做什么的基础上,从tflearn的DNNClassifier普查例如:
COLUMNS = ["age", "awesomeness"]
CONTINUOUS_COLUMNS = ["age"]
OUTPUT_COLUMN = "awesomeness"
def build_estimator(model_dir):
"""Build an estimator."""
age = tf.contrib.layers.real_valued_column("age")
deep_columns = [age]
m = tf.contrib.learn.DNNClassifier(model_dir=model_dir,
feature_columns=deep_columns,
hidden_units=[50, 10])
return m
def input_fn(df):
"""Input builder function."""
feature_cols = {k: tf.constant(df[k].values, shape=[df[k].size, 1]) for k in CONTINUOUS_COLUMNS}
output = tf.constant(df[OUTPUT_COLUMN].values, shape=[df[OUTPUT_COLUMN].size, 1])
return feature_cols, output
def train_and_eval(model_dir, train_steps):
"""Train and evaluate the model."""
train_file_name, test_file_name = training_data()
df_train = pd.read_csv(...) # ommitted for clarity
df_test = pd.read_csv(...)
m = build_estimator(model_dir)
m.fit(input_fn=lambda: input_fn(df_train), steps=train_steps)
results = m.evaluate(input_fn=lambda: input_fn(df_test), steps=1)
for key in sorted(results):
print("%s: %s" % (key, results[key]))
def training_data():
"""Return path to the training and test data"""
training_datafile = path.join(path.dirname(__file__), 'data', 'data.training')
test_datafile = path.join(path.dirname(__file__), 'data', 'data.test')
return training_datafile, test_datafile
model_folder = 'scripts/model' # Where to store the model
train_steps = 2000 # How many iterations to run while training
train_and_eval(model_folder, train_steps)
有两点要注意:
原来的实例教程,这是基于为这里https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/learn/wide_n_deep_tutorial.py
注意我使用的是DNNClassifier,而不是LinearClassifier,因为我想专门处理连续的输入t变量。
很多示例只是使用已知可用于示例的“预制”数据集;我的数据集已经手动生成,绝对不是随机的。
我已验证csv loader正在将数据正确加载为int64值。
训练和测试数据的生成方式是相同的,但其中有不同的值;然而,使用data.training 作为测试数据仍然返回的准确率为0%,所以毫无疑问某些事情不起作用,这不仅仅是过度拟合。
唔...你能澄清可能如何推广到更复杂的模型?这似乎特定于拟合线性模块,其中I *已经知道* y = k * x;我知道这就是我所问的,非常公平,但是当你已经需要知道它是什么的时候,这似乎已经挫败了试图训练数据集的意义......? – Doug
这就是机器学习的工作原理(有一些处理非参数模型的统计分支,但这是一个完全不同的野兽)。 这个模型与真实世界应用程序的唯一区别在于后者通常涉及更复杂和更富表现力的模型。但你说你想要一个线性模型,所以这就是你得到的;) – dseuss