我已經生成了一些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